ABSTRACT

Software maintenance is an integral part of the software

life cycle and has been identified as an activity that affects

in a major way the overall system cost and effort. It is also a

major factor for affecting software quality. Software main-

tenance is defined by a collection of activities that aim to

evolve and enhance software systems with the purpose of

keeping these systems operational. The field of software

maintenance was first discussed in a paper by Canning,[1]

where different software maintenance types where imp-

licitly presented. However, it was due to a paper

by Swanson[2] where the terms and types of software

maintenance were first explicitly defined in a typology of

maintenance activities.[2]

In the following years, the software community realized

the importance of the field, and the Institute of Electrical

and Electronics Engineers (IEEE) published two standards

in this area. The IEEE standard 610.12-1990 and the

updated standard 1219-l998 identify four major types of

software maintenance.[3,4] The first type is referred to as

Corrective Software Maintenance, where the focus is on

techniques, methodologies, and tools that support the iden-

tification and correction of faults that appear in software

artifacts such as requirements models, design models, and

source code. The second type is Perfective Software

Maintenance, where the focus is on techniques, methodol-

ogies, and tools that support the enhancement of the soft-

ware system in terms of new functionality. Such

enhancement techniques and methodologies can be applied

at the requirements, design, or source code levels. The third

type of software maintenance is referred to as Adaptive

Software Maintenance and refers to activities that aim to

modify models and artifacts of existing systems so that

these systems can be integrated with new systems or

migrated to new operating environments. A fourth type

of software maintenance is Preventive Software

Maintenance. Preventive Software Maintenance deals

with all other design time and development time activities

that have the potential to deliver higher-quality software

and reduce future maintenance costs and effort.[5]

Examples of Preventive Software Maintenance include

adhering to well-defined processes, adhering to coding

standards, maintaining high-level documentation, or

applying software design principles properly. In general,

preventive maintenance encompasses any type of

intention-based activity that allows to forecast upcoming

problems and prevent maintenance problems before they

occur.[4,6] Preventive maintenance touches upon all the

other three types of maintenance and in some respect is

more difficult to define boundaries for.[6] Due to broad

boundaries of preventive maintenance, in this entry we

will mostly focus on core technical and process issues of

the first three types of software maintenance, namely,

corrective, adaptive, and perfective maintenance. The

interested reader can refer to Swanson,[2] Chapin,[6] and

Kajko-Mattsson[7] for a more detailed discussion on pre-

ventive maintenance.