Program Maintenance

 

Once a program and possibly a collection of subprograms and libraries developed for solving a problem have been validated and verified, they begin their useful lives and will, in many cases, be used for several years. It is likely, however, that for a variety of reasons, they will require modification. Software systems, especially large ones developed for complex projects, will often have obscure bugs that were not detected during testing and that will surface after the software is released for public use.

 

A study by the National Institute of Standards and Technology (NIST) published in May, 2002, estimated that software errors cost the U. S. economy $60 billion annually. (It also found that more than a third of this cost could be eliminated by better testing.) Fixing such flaws in software is thus a major and costly part of system maintenance. It may also be necessary to modify software to improve its performance, to add new features, and so on. Other modifications may be required because of changes in computer hardware and/or system software such as the operating system. External factors such as changes in government rules and regulations or changes in the organizational  structure of the company may also force software modification. These changes are easier to make in systems that are developed in a modular manner with well-structured program units than in poorly designed ones, because the changes can often be made by modifying only a few of the units or by adding new ones.

 

Studies have shown that a higher percentage of computing budgets and programmer time are devoted to software maintenance than to software development and that this percentage continues to increase:

 

1970s

3540%

1980s

4060%

1990s

7080%

2000s

8090%

 

A major factor that has contributed to the huge amounts of money and time spent on maintenance is that many programs and systems were originally written with poor structure, poor documentation, and poor style. This problem is complicated by the fact that maintenance must often be done by someone not involved in the original design. Thus, it is mandatory that programmers do their utmost to design programs and systems of programs that are readable, well documented, and well structured so they are easy to understand and modify and are thus easier to maintain than is much of the software developed in the past.