Software development is constantly evolving and software methodologies are now focusing on improving the final product quality, this is because organizations have realized that it’s easier and cheaper to involve or plan for good system quality from the very early stages of the process.
One of these changes has been, to adopt agile or iterative methodologies that involve the whole team, including QA Engineers, from the projects very early stages. Other of these changes, which I believe has influenced the most, is Test Driven Development or TDD.
Test Driven Development inverts the developer’s thought process, usually the requirement is reviewed, analysed, the source code is written to fulfil the requirement needs and at last unit tests are written to test the code. However, when you do test driven development, the developer takes the requirement, analyses it focusing on the test scenarios that will be created, then writes those unit tests and finally writes the source code that covers all the previous unit tests.
The following graph describes the process:
Test Driven Development has the following advantages:
- The developer rarely needs to debug the source code.
- Even though the start of the project might be complicated, test driven development will deliver a product with more quality and in less time.
- This methodology doesn’t validate the source code only, it may also assist with requirement definition because it focuses on use cases and it might help to notice some scenarios that weren’t taken in consideration originally.
- It allows the project to advance through iterations and always focusing on delivering high value functionality for the user, this helps to have better user acceptance.
Now the disadvantages of Test Driven Development are:
- This methodology requires the developer to have knowledge about automated testing and testing can be complex sometimes specially UI testing.
- The developer needs to know about mock objects they can be really helpful on test automation.
- Automated tests that are related to databases are complex, they require some analysis on testing data which usually need to be setup even before writting the test itself.
As it has been described before Test Driven Development can usually be helpful and beneficial , however, I consider it’s necessary a detailed analysis to evaluate if this methodology will be beneficial or not for the project before putting it to work without further research. It’s important to know that a projects complexity and size also have an influence on the usage of this methodology or not. This is only one of the techniques you as a developer can use to focus your work on quality and not only on functionality.