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.
   255   256   257   258   259   260   261   262   263   264   265