The story behind TDD
Test Driven Development (TDD), developed by Kent Beck in the late 1990's as part of Extreme Programming, is a technique for building products that guides software development by writing tests. Nowadays it is recognized as one of the best ways to ensure software quality and fits superbly into widely used Agile methodologies of IT project management.
In a nutshell, developers follow these three steps repeatedly:
- Write a test for the next bit of functionality needed to add
- Write the functional code until the test passes
- Refactor both new and old code to make it well structured
Once code is written, it must pass the unit test. As a result of this practice developers create truly maintainable code and easily reduce the number of bugs. It prevents the development team from writing code that doesn’t meet specified standards of the product as well. Moreover, code refactoring also known as a powerful Agile technique, helps improving existing software without changing its external behavior.
What are the advantages of adapting TDD?
Spelling it out - TDD has benefits not only for programmers. Entrepreneurs, Product Owners, Project Managers may gain a profit as well. Some of essential advantages are pointed and described below.
- Less Bugs
TDD practice goal is to prevent bugs rather than to remove them after the code is written or even released into production. Thanks to following the rules of TDD development team can decrease the number of bugs up to 80%!
From the business point of view it’s significant to deliver products without bugs and there is no doubt that this technique may help you avoid situations when your software needs a lot of fixes. Strictly followed TDD ensures 100% test coverage and leads the application to work as required.
- Maintainable Codebase
Another important aspect of TDD is that it helps you create a maintainable codebase. Refactoring, as a part of TDD methodology, upgrades code readability and reduce complexity.
Code refactoring, in its essentials, has the defined rules and some of them goes as follows:
- The DRY (Don’t Repeat Yourself) - developers must avoid repeating the same code in different parts of the product, it’s also called “Duplication is Evil”
- The KISS (Keep it Simple, Stupid!) - software architecture should be well built and clear for anyone in the team
- The YAGNI (You Ain’t Gonna Need It) - the main goal is to be focused only on assigned tasks and the most important features
These design patterns lead not only to simplify developers work, but also to improve the quality of existing software.
- Stay away from Scope Creep
Every person responsible for project or product management knows that lack of proper documentation may be the reason for unavoidable scope creep. As a result of additional unexpected tasks, requirements misinterpretation, poorly defined goals etc., the sprint may be delayed and it’s not something desired.
Software covered by tests is much more likely to perform as we expected. There is no place for fear while adding new functionality or changing existing ones. At the beginning developers need to spend more time on TDD, nonetheless it’s more precise and much more effective in the long run. Teams that doesn’t practise writing tests often have to check the codebase manually. To make it noticeable - with TDD tests are automated and run every time once new functionality is added or changed.
TDD in a real world of software development
At Railwaymen, we believe that TDD is something what makes our applications more valuable, so we constantly ensure 100% test coverage in different projects. Development experience has taught us that thanks to following TDD process we significantly improve code readability and maintainability. It has been our practice for a long time, thus we are going to continue it as long as it helps us create functional apps and meet each customer expectations.