Testing is not a single activity, nor is it a phase in the project during which we assess quality. If developers are to obtain timely feedback on evolving product quality, testing must occur throughout the lifecycle: we can test the broad functionality of early prototypes ; we can test the stability, coverage, and performance of the architecture while there is still an opportunity to fix it; and we can test the final product to assess its readiness for delivery to customers. The all-too-common viewpoint that testing is a kind of final check to make sure that everything works misses the main benefit of testing: providing feedback while there is still time (and resources) to do something about it.