Chapter 3. Focus Continuously on Quality


Benefits

  • Higher quality.

  • Earlier insight into progress and quality.

Patterns

  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

  • Conduct in-depth peer review of all intermediate arti-facts, which is counterproductive since it delays application testing and hence identification of major issues.

  • Complete unit testing of the entire application before doing integration testing, again delaying identification of major issues.


The principle of focusing continuously on quality emphasizes that quality, to be achieved, must be addressed throughout the project life-cycle. An iterative process is particularly adapted to achieving quality, since it offers many measurement and correction opportunities.

Improving quality is more than simply "meeting requirements" or producing a product that meets user needs and expectations. Rather, quality also means identifying the measures and criteria that demonstrate how it was achieved and show clearly that the process can be repeated and managed.

Ensuring high quality demands more than the participation of the testing team; it involves all team members and all parts of the life-cycle, and it requires that the entire team own quality.

  • Analysts are responsible for making sure that requirements are testable.

  • Developers need to design applications with testing in mind, and they must be responsible for testing their code.

  • Managers need 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 gatekeepers of quality. They guide the rest of the team in understanding software quality issues by providing objective quality metrics of working software throughout the project. They are responsible for product-level testingfunctional, system, and performance.

Every team member should be willing to chip in to address a quality issue.

One of the major benefits of iterative development is that it enables teams to test early and continuously (see Figure 3.1). By the end of a project, since the most important capabilities are implemented early on, the most essential software will have been up and running for months and will therefore likely have been tested for months. This early feedback regarding quality also allows you to understand and improve the quality of requirements, design, architecture, and the overall process you follow. It is no surprise that most projects adopting iterative development claim that higher quality is a primary tangible result of the improved process.

Figure 3.1. Testing Is Initiated Early and Expanded Upon in Each Iteration.

Iterative development enables early testing. Software is built in every iteration and tested as it is built. Regression testing detects whether new defects are introduced as new iterations add incremental functionality.

(Adapted from Kroll 2003.)


As you incrementally build your application, you should also incrementally build test automation to detect defects early, while minimizing up-front investments. As you design your system, consider how it should be tested. Making the right design decisions can greatly improve your ability to automate testing. You may also be able to generate test harnesses and drivers 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; the aim here is to automate all unit testing of code and, to a lesser degree, acceptance testing, and to write tests before the code is written (test-first design).

The anti-pattern to following this principle would be to do in-depth peer review of all intermediate artifacts and complete all unit testing before doing integration testing. In-depth peer review of all intermediate artifacts can delay your application testing and can thus be counterproductive. Integration testing is crucial for finding major issues, such as architectural problems, and needs to happen early and often, rather than only after all code has been unit tested.

This chapter describes a series of practices that will help you improve the quality of your application.

  • Practice 5: Test Your Own Code details how developers can approach testing their own code holistically and includes techniques that will potentially be part of a broader test automation strategy.

  • Practice 6: Leverage Test Automation Appropriately describes how automating appropriate amounts of the test effort can also realize improved product quality and shorter product development schedules.

  • Practice 7: Everyone Owns the Product! takes a deeper look at how analysts, developers, architects, testers, managers, and customers need to change their mindset to be successful in building a quality product.

Let's have a look at these practices.



Agility and Discipline Made Easy(c) Practices from OpenUP and RUP
Agility and Discipline Made Easy: Practices from OpenUP and RUP
ISBN: 0321321308
EAN: 2147483647
Year: 2006
Pages: 98

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net