Skip to main content

What does TDD really mean?


Test Driven Development is... everything. Before we get into specifics, let's consider some advantages of TDD. One major pro is that TDD allows us to easily update software to include new business rules. This directly impacts scalability. Additionally, debugging becomes less painful; we are forced to think critically about what we want our code to actually do; TDD makes us simplify our code, resulting in a quality, clean, maintainable code base.

So how is TDD done? There is an idea called Red Green Refactor. "Red" means that we create our test to fail. I like to go ahead and set up my dependencies, implementation method signatures returning null and any method level documentation. Now we write the tests. I'm a fan of JUnit and Mockito for Java and Mocha for Javascript. When you write tests, consider carefully what you want the code to do and account for negative scenarios like bad user input and empty data sets. Naturally, the tests will fail because we return null in implementation. Next, we minimally fill in our implementation code just enough to get the tests to pass. Now that we have red and green, it's time to consider how our code is behaving and can we optimize. You guessed it! Refactor time. A few questions to ask yourself here might be: Are my tests isolated? Can I reduce duplicate code in either test suite or implementation code? Do I have negative tests?

Good test driven development practices will strengthen the foundation of any application or service and allow for scalability. To further understand TDD consider the following topics: AAA(arrange, act, assert), Unit tests, Integration tests, System tests, Performance tests, User acceptance tests, Black box testing. 

Comments

Popular posts from this blog

Accessibility Is For Everyone

  Years ago, I attended a virtual conference sponsored by Microsoft where accessibility was the topic.  The idea was that we will all require some level of enhanced accessibility at some point in our lives, so we should design and build things for our future selves. Prior to this I had only thought of ADA compliant designs as a "ToDo" for others, though still a priority. I keep this new perspective with me and welcome opportunities to evangelize.  I recently found a website that stood out to me as real champion for accessibility. This site allows the visitor to dial in whichever option(s) they need and to variable degrees. Typically we'd have to rely on the browser or perhaps the operating system itself to specify, or in better scenarios search the page for accessibility options. Kudos to nc.gov  for making this easy to find and easy to use.

Why Do I Code?

I've been a paid technology professional for half a decade and this is not my first career. Why do I bother to learn new tech and torture myself with daunting task after daunting task? Well, the brain exercise is great and so is the ultimate sweet satisfaction of writing and deploying a thing that works. I love the alchemy of it all, to forge interactive material FROM NOTHING that can change how we behave is the closest thing to magic we have... other than real magic of course. The overwhelming truth here, is that I code to bring my ideas to life. I wanted to be able to communicate my "million dollar ideas" effectively and drive innovation. Here's an idea, what if we could harness the power of traffic, like wind or water? There may not be a pure software solution for that, but I feel like I need to put that one out there. The idea that motivated me to get into tech, though, is about connecting crowdfunding and publishing/royalty distribution. I called it SoundStock, n...

Hot Java

In an effort to understand object oriented programming more deeply and learn a new programming language, I've decided to learn JAVA!!! Thank you to Congnizant for sponsoring a Java bootcamp with UNC Charlotte's continuing education program. Java helped me solidify a few concepts that were previously lost on me. Let's get into it, here are the four major Java OOP principles .  Abstraction is about hiding implementation details from the user while only sharing the functionality. For instance, we can mark a method as abstract and each child class that extends the  parent will have to provide it's own implementation. We also have the option to use interfaces with or without default methods. Next up is Encapsulation ,   or data hiding. When we create a class, we should make variables private from other classes and public getters and setters. Think of an ATM. There is a public interface that we interact with but private implementation behind the scenes that does all ...