Fragment Name: Test Driven Development (also known as test-first programming, test-driven design, and test-first design)
originating Method: XP
Test-driven development (TDD) is the craft of producing automated tests for production code, and using that process to drive design and programming. For every tiny bit of functionality in the production code, you first develop a test that specifies and validates what the code will do. You then produce exactly as much code as will enable that test to pass. Then you refactor (simplify and clarify) both the production code and the test code. (S77)
         
Contributes to  
Major Softgoal sub softgoal Cont. Value from Fragment Study Situation  
More Accurate Project Planning Improved predictability of project +
Text Box: S41 Text Box: S42
   
  Avoid a long trail of bugs at the end of project ++
Text Box: S41
   
  Earlier detection of critical and time-consuming components  +      
           
Improved Technical Knowledge of Developers Instant learning from your own code +
Text Box: S41
   
           
Improved Product Quality Improved Reliability of Product +
Text Box: S50
Text Box: S41
   
    ?
Text Box: S45 Text Box: S49
Text Box: S48
False Sense of Security (all of the tests that developers had written were passed, but they neglected some of the important faults) Academic Cases  
    -
Text Box: S56
Safety Critical systems, which need more rigorous formal tests  
  Improved Product Design +
Text Box: S42
   
  Improved Quality of Code ++
Text Box: S44
   
Improved Effectiveness Reduced Defect Density (rate) of Code ++
Text Box: S42
Text Box: S42
   
  Earlier Detection of Defects (thus prebenting the cost of late defect detection) ++    
  Improved Productivity (LOC/Month) ?
Text Box: S42 Text Box: S46
   
    -
Text Box: S44 Text Box: S45
   
  Ease of incorporating late requirements +
Text Box: S42
   
  Reduction of Test Effort ++
Text Box: S43
Proper use of automated tests  
  Facilitate Simple Design (reducing the need for up-front design)  +
Text Box: S44
   
  Improved Understandability of Code +
Text Box: S45
   
  Facilitated Maintenance of Code +
Text Box: S46
   
  Clean Code without Redundancy +
Text Box: S47
   
Improved Collaboration More reliable collaboration of team-members (as they can trust eac-others' code) ++
Text Box: S41
   
  Defining Clear topics for developers collaboration +
Text Box: S41
   
           
Increased Frequency of Product Release Code integration in shorter periods ++
Text Box: S42
   
           
Job Satisfaction Better sense of written code +
Text Box: S41 Text Box: S42
   
           
Improved relationshnip with customer Having a shipable product at short iterations +
Text Box: S41