Though the demand for software continues to increase, software development continues to be a time-consuming, expensive, and error-prone process. If the process is to improve, we need to be able to provide development managers with the right information so that they can make informed decisions in regard to planning and scheduling activities and allocation of resources during development.

Software testing is one of the most time-consuming and labor-intensive activities performed during the software development lifecycle. While practically impossible to exhaustively test any software system, it is possible to narrow and direct testing resources to those modules most likely to contain defects. The challenge is in identifying those modules more likely to contain defects, early in development. The prudent application of design measures can accomplish this very thing.