To assess product quality, different kinds of test, each one with a different focus, are needed. These tests can be categorized in various ways:
Quality DimensionThere are patterns to quality problems; the same kinds of problems tend to recur in virtually every system. There are various conventions for enumerating quality problems, each designed to help you reason the most important dimension of quality in your context. The following aspects are generally assessed for most products:
For each quality dimension, one or more types of test should be executed at different test levels. Additionally, there are other qualities to consider whose assessment may be more subjective : supportability, maintainability, extensibility, flexibility, and so on. Whenever possible, quantitative measures should be derived to assess these qualities. Levels of TestingTesting is not a single activity that is executed all at once. In each iteration, testing is executed against different types of targets (targets-of-test) in one or more test cycles. In each test cycle, different targets will be tested , ranging from small elements of the system, such as components (unit testing), to completed systems (system testing). The four levels we use have the following purposes:
Keep in mind that these levels occur throughout the lifecycle, with varying emphasis, either in sequence or in parallel. An early conceptual prototype used in the inception phase to assess the viability of the product vision will be subjected to acceptance tests, informal though they may be. For example, an architectural prototype developed during the elaboration phase will be subjected to integration and system tests to validate architectural integrity and performance of key architectural elements, even though most of the code in the system exists only as stubs. These levels are not "phases" that occur in sequence near the end of the project ”in the iterative lifecycle, testing occurs early and often. Types of TestThere are many types of test, each one focusing on a specific test objective, testing a characteristic or attribute of the software, or finding certain classes of faults or failures. Because tests are executed throughout the lifecycle, the software being tested may be a single unit of code, integrated units, or a complete application or system. Here are some of the most common types of test:
Regression TestingRegression testing is a test strategy in which previously executed tests are reexecuted against a new version of the target-of-test to ensure that the quality of the target has not regressed (moved backward) when new capabilities have been added. The purpose of the regression test is to ensure two things:
Regression testing can involve the reexecution of any of the test types. Typically, some regression testing is performed during each iteration, rerunning tests from prior iterations, and therefore is of particular importance in our lifecycle model. |