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.