Understanding the efficacy of Test Driven Development
Test Driven Development (TDD) is a software development practice in which unit and acceptance test cases are incrementally written prior to writing the production code and guiding the design of the target software. Recently, TDD has gained considerable attention among practitioners and researchers, outside its original context in Extreme Programming (XP), with the promise of a number of benefits to the software development process. Proponents of TDD claim that TDD enhances code quality, application quality and developer productivity compared with a traditional Test-Last development methodology. There are some published empirical studies of TDD that support these claims, but few of these are in an industrial setting and generally focus on measurements of quality or productivity. This study adds to this evidence-based research on TDD by studying practitioners’ perceptions of the benefits of TDD. Furthermore, this study seeks to go further than previous studies in this area and gain a deeper understanding of the efficacy of TDD by investigating the underlying factors contributing to the benefits of using TDD. This is important to inform future tool support and process improvements of TDD. In addition it may suggest strategies for increasing the adoption level of TDD.This research takes a single case study approach. TDD practitioners’ perceptions of the benefits of TDD and the contributing factors were collected in five semi-structured interviews conducted in a medium-sized software company located in Auckland, New Zealand. The results of the interviews were analyzed using a thematic analysis technique looking for patterns and themes that aligned with the three general benefits identified from literature, namely improvements to code quality, application quality and developer productivity. This study contributes empirical evidence where experienced TDD practitioners clearly perceive that using TDD provides a number of benefits and that these align closely with those claimed by proponents of TDD and evidence in related empirical studies. The main underlying factors contributing to these benefits identified in this research can be summarised as: increased confidence in refactoring and modifying code, broader test coverage, deeper understanding of requirements, enhanced code comprehensibility, reduced error scope and severity, and improved developer satisfaction. The benefits of TDD are perceived as strongly linked to developers’ capabilities in refactoring, and writing high quality tests. The findings of this research add to the existing empirical body of knowledge on the use of TDD in an industrial context, as well as strengthening the case for using TDD in this type of software development environment. The research also indicates that current integrated development environments need to improve the level of support they provide for TDD activities.