The Impact of Test Driven Development on the Evolution of a Reusable Framework of Components – An Industrial Case Study

Test driven development (TDD) is a software engineering technique to promote fast feedback, task-oriented development, improved quality assurance and more comprehensible low-level software design. Benefits have been shown for non-reusable software development in terms of improved quality (e.g. lower defect density). We have carried out an empirical study of a framework of reusable components, to see whether these benefits can be shown for reusable components. The framework is used in building new applications and provides services to these applications during runtime. The three first versions of this framework were developed using traditional test-last development, while for the two latest versions TDD was used. Our results show benefits in terms of reduced mean defect density (35.86%), when using TDD, over two releases. Mean change density was 76.19% lower for TDD than for test-last development. Finally, the change distribution for the TDD approach was 33.3% perfective, 5.6% adaptive and 61.1% preventive.

[1]  David S. Janzen,et al.  Test-driven development concepts, taxonomy, and future direction , 2005, Computer.

[2]  Reidar Conradi,et al.  The REBOOT approach to software reuse , 1995, J. Syst. Softw..

[3]  Arie van Deursen,et al.  Program Comprehension Risks and Opportunities in Extreme Programming , 2001, WCRE.

[4]  Arie van Deursen,et al.  Refactoring test code , 2001 .

[5]  Reidar Conradi,et al.  A Case Study of Defect-Density and Change-Density and their Progress over Time , 2007, 11th European Conference on Software Maintenance and Reengineering (CSMR'07).

[6]  Reidar Conradi,et al.  An empirical study of software change: origin, acceptance rate, and functionality vs. quality attributes , 2004, Proceedings. 2004 International Symposium on Empirical Software Engineering, 2004. ISESE '04..

[7]  Dick Hamlet,et al.  The engineering of software : technical foundations for the individual , 2001 .

[8]  Marco Torchiano,et al.  On the effectiveness of the test-first approach to programming , 2005, IEEE Transactions on Software Engineering.

[9]  Matthias M. Müller,et al.  Experiment about test-first programming , 2002, IEE Proc. Softw..

[10]  Boby George,et al.  A structured experiment of test-driven development , 2004, Inf. Softw. Technol..

[11]  Laurie A. Williams,et al.  Test-driven development as a defect-reduction practice , 2003, 14th International Symposium on Software Reliability Engineering, 2003. ISSRE 2003..

[12]  Reidar Conradi,et al.  An empirical study of software reuse vs. defect-density and stability , 2004, Proceedings. 26th International Conference on Software Engineering.

[13]  Alexander L. Wolf,et al.  Acm Sigsoft Software Engineering Notes Vol 17 No 4 Foundations for the Study of Software Architecture , 2022 .

[14]  Paul Clements,et al.  Software architecture in practice , 1999, SEI series in software engineering.

[15]  Claes Wohlin,et al.  Experimentation in software engineering: an introduction , 2000 .

[16]  Keith H. Bennett,et al.  Software maintenance and evolution: a roadmap , 2000, ICSE '00.

[17]  Meir M. Lehman,et al.  A Model of Large Program Development , 1976, IBM Syst. J..

[18]  Ian Sommerville,et al.  Software Engineering (7th Edition) , 2004 .

[19]  Laurie A. Williams,et al.  Assessing test-driven development at IBM , 2003, 25th International Conference on Software Engineering, 2003. Proceedings..

[20]  Reidar Conradi,et al.  Identifying and Understanding Architectural Risks in Software Evolution: An Empirical Study , 2008, PROFES.

[21]  Watts S. Humphrey,et al.  Managing the software process , 1989, The SEI series in software engineering.

[22]  Joseph W. Yoder,et al.  Big Ball of Mud , 1997 .