Software has become an increasingly indispensable element of a wide range of military, industrial, and business applications. But it is often characterized by high costs, low reliability, and unacceptable delays. Often, they are downright unacceptable (see Sidebar 1.2). Software life-cycle costs (LCC) typically far exceed the hardware costs. Low software quality has a direct impact on cost. Some 40% of software development cost is spent testing to remove errors and to ensure high quality, and 80 to 90% of the software LCC goes to fix, adapt, and expand the delivered program to meet users' unanticipated, changing, or growing needs.[17] While the software costs far exceed hardware costs, the corresponding frequency of failure rate between software and hardware could be as high as 100:1. This ratio can be even higher for more advanced microprocessor-based systems.[18] Clearly, these are huge issues that cannot be addressed effectively by continuing to deploy traditional software development approaches. It is well known that various quality issues are interrelated. Moreover, high costs and delays can be attributed to low software reliability.[18] Thus, it is conceivable that several objectives may be met with the correct strategic intervention. Quality has a great many useful attributes, and you must clearly understand the customer perspectives throughout the software life cycle. This helps you not only understand the changing user needs but also avoid cost escalation, delays, and unnecessary complexity. You need to deploy a multipronged strategy to address quality issues in large and complex software such as enterprise applications. The Seven Components of a Robust Software Development Process are shown in Figure 1.11. They are as follows:
|