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 |
35Ð40% |
1980s |
40Ð60% |
1990s |
70Ð80% |
2000s |
80Ð90% |
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.