Concept: Focus Continuously On Quality
This principle introduces quality and describes how to address it throughout the process.
Main Description

Introduction

This principle emphasizes that, to achieve quality, it must be addressed throughout the project lifecycle. An iterative process is particularly adapted to achieving quality since it offers many measurement and correction opportunities.

            
Benefits
  • Higher quality 
  • Earlier insight into progress and quality
Pattern
  1. Ensure team ownership of quality for the product.
  2. Test early and continuously in step with integration of demonstrable capabilities.
  3. Incrementally build test automation.
Anti-Patterns
  • To peer-review all artifacts and complete all unit testing before integration testing.
  • To conduct in-depth peer-review of all intermediate artifacts, which is counter productive since it delays application testing and hence identification of major issues.
  • To complete all unit testing before doing integration testing, again delaying identification of major issues

Discussion 

Improving quality is not simply "meeting requirements," or producing a product that meets user needs and expectations. Rather, quality also includes identifying the measures and criteria that demonstrate its achievement, as well as the implementation of a process to ensure that the product has achieved the desired degree of quality, and that this can be repeated and managed.

Ensuring high quality requires more than the participation of the testing team; it requires that the entire team owns quality. It involves all team members and all parts of the lifecycle:

  • Analysts are responsible for making sure that requirements are testable, and that we specify clear requirements for the tests to be performed.
  • Developers need to design applications with testing in mind, and must be responsible for testing their code.
  • Managers needs to ensure that the right test plans are in place, and that the right resources are in place for building the testware and performing required tests.
  • Testers are the quality experts. They guide the rest of the team in understanding software quality issues, and they are responsible all product testing (including functional, system, and performance).

When we experience a quality issue, every team member should be willing to chip in to address the issue.

One of the major benefits of Iterative Development is that it enables a test early and continuously approach, as illustrated below. By the time we reach the end of a project, and since the most important capabilities are implemented early on, the most essential software may will have been up and running for months, and it is therefore likely it will have been tested for months. It is no surprise that most projects adopting iterative development claim that an increase in quality is a primary tangible result of the improved process.

Software developed in each iteration is tested as it is built. Regression testing ensures that new defects are not introduced in this process.

Testing Is Initiated Early and Expanded Upon in Each Iteration
Iterative development enables early testing. Software developed in each iteration is tested as it is built. Regression testing ensures that new defects are not introduced as new iterations add functionality. Reference: Supporting Material: Quality Management.

As we incrementally build our application, we should also incrementally build test automation to detect defects early, while minimizing up-front investments. As we design our system, we consider how it should be tested. Making the right design decisions can greatly improve our ability to automate testing. We may also be able to generate test code directly from the design models. This saves time, provides incentives for early testing, and increases the quality of testing by minimizing the number of bugs in the test software. Automated testing has been a key area of focus for, among others, the agile community, where the aim is to automate testing of all code, and where tests are written before the code is written (test-first design.)