While building software for large projects with zero defects is virtually impossible, the quality of the software can be determined by the lifetime of a defect – the time when a defect is identified, fixed and released. A defect in a well-isolated module can be easily identified, root-cause analyzed and fixed in a short amount of time than a highly cohesive system.
In addition, adopting an agile development methodology helps reducing the lifetime of a defect drastically. This is possible by releasing well-tested software in short bursts or iterations and delivering higher quality software compared to other development methodologies.
In an agile project, tests are written before or concurrently while producing the code. Therefore, all code that is delivered for testing is tested code. In most agile projects there are four primary layers of testing:
- Unit testing, also called development testing.
- Acceptance testing, also called functional testing.
- Component testing.
- System and performance testing – integration testing and testing for non-functional requirements.
In agile methodology, the primary goal is to test all these layers during the course of iteration.