Page 260 -
P. 260
9.3 Software maintenance 243
1. Fault repairs Coding errors are usually relatively cheap to correct; design errors
are more expensive as they may involve rewriting several program components.
Requirements errors are the most expensive to repair because of the extensive
system redesign which may be necessary.
2. Environmental adaptation This type of maintenance is required when some
aspect of the system’s environment such as the hardware, the platform operating
system, or other support software changes. The application system must be
modified to adapt it to cope with these environmental changes.
3. Functionality addition This type of maintenance is necessary when the system
requirements change in response to organizational or business change. The scale
of the changes required to the software is often much greater than for the other
types of maintenance.
In practice, there is not a clear-cut distinction between these types of mainte-
nance. When you adapt the system to a new environment, you may add functionality
to take advantage of new environmental features. Software faults are often exposed
because users use the system in unanticipated ways. Changing the system to accom-
modate their way of working is the best way to fix these faults.
These types of maintenance are generally recognized but different people some-
times give them different names. ‘Corrective maintenance’ is universally used to
refer to maintenance for fault repair. However, ‘adaptive maintenance’ sometimes
means adapting to a new environment and sometimes means adapting the software to
new requirements. ‘Perfective maintenance’ sometimes means perfecting the soft-
ware by implementing new requirements; in other cases it means maintaining the
functionality of the system but improving its structure and its performance. Because
of this naming uncertainty, I have avoided the use of all of these terms in this chapter.
There have been several studies of software maintenance which have looked at
the relationships between maintenance and development and between different
maintenance activities (Krogstie et al., 2005; Lientz and Swanson, 1980; Nosek and
Palvia, 1990; Sousa, 1998). Because of differences in terminology, the details of
these studies cannot be compared. In spite of changes in technology and different
application domains, it seems that there has been remarkably little change in the dis-
tribution of evolution effort since the 1980s.
The surveys broadly agree that software maintenance takes up a higher proportion
of IT budgets than new development (roughly two-thirds maintenance, one-third
development). They also agree that more of the maintenance budget is spent on
implementing new requirements than on fixing bugs. Figure 9.8 shows an approxi-
mate distribution of maintenance costs. The specific percentages will obviously vary
from one organization to another but, universally, repairing system faults is not the
most expensive maintenance activity. Evolving the system to cope with new environ-
ments and new or changed requirements consumes most maintenance effort.
The relative costs of maintenance and new development vary from one applica-
tion domain to another. Guimaraes (1983) found that the maintenance costs for busi-
ness application systems are broadly comparable with system development costs.