How Test Driven Development helped our Software Integration Project
Test Driven Development (TDD) is an agile development technique in which developers write automated unit test cases before implementing product code and perform continuous refactoring until all the tests pass and meet coding standards. Over the past decade, several researchers have performed case studies [1, 2] which showed improvements in metrics such as code complexity and defect density when using Test driven approach. However the adoption of TDD approach has been rather sporadic in corporate world.
Possible reasons could be business driven crunch and strict project deadlines restricts engineering teams from adopting the TDD technique since practicing TDD increases the actual implementation time by 15 - 35% . Another reason could be lack of education among development teams on how to adopt this technique for their teams. Software developers often have the question on how different is TDD from writing unit tests. This paper presents a real world case study to address the above mentioned concerns.
The paper highlights the positive experiences of using TDD in a software integration project I worked on at Groupon. The project involved integrating Groupon’s existing web application with that of OrderUps’ to add new functionalities to Groupon’s application. The paper highlights how the TDD approach helped the engineering team navigate through the various unknowns in this project and helped them deliver a quality product. It also highlights how practices such as multiple iterations, continuous refactoring and building large suite of tests resulted in quicker turn around time in test engineering and deployment cycles.
The paper also talks about how a software testers role aids in identifying functional test cases when the team practices TDD and how other dimensions of testing opens up for testers. This is followed by a brief discussion on case studies done in companies such as Microsoft, IBM to understand the impact of practicing TDD in real world projects.