From Wikipedia, the free encyclopedia
Software maintenance in software
engineering is the modification of a software product after
delivery to correct faults, to improve performance or other
attributes, or to adapt the product to a modified environment .
This international standard
describes the 6 software maintenance processes as:
- The implementation processes contains software preparation and
transition activities, such as the conception and creation of the
maintenance plan, the preparation for handling problems identified
during development, and the follow-up on product configuration
- The problem and modification analysis process, which is
executed once the application has become the responsibility of the
maintenance group. The maintenance programmer must analyze each
request, confirm it (by reproducing the situation) and check its
validity, investigate it and propose a solution, document the
request and the solution proposal, and, finally, obtain all the
required authorizations to apply the modifications.
- The process considering the implementation of the modification
- The process acceptance of the modification, by checking it with
the individual who submitted the request in order to make sure the
modification provided a solution.
- The migration process (platform
migration, for example) is exceptional, and is not part of
daily maintenance tasks. If the software must be ported to another
platform without any change in functionality, this process will be
used and a maintenance project team is likely to be assigned to
- Finally, the last maintenance process, also an event which does
not occur on a daily basis, is the retirement of a piece of
There are a number of processes, activities and practices that
are unique to maintainers, for example:
- Transition: a controlled and coordinated sequence of activities
during which a system is transferred progressively from the
developer to the maintainer;
- Service Level
Agreements (SLAs) and specialized (domain-specific) maintenance
contracts negotiated by maintainers;
- Modification Request and Problem Report Help Desk: a
problem-handling process used by maintainers to prioritize,
documents and route the requests they receive;
- Modification Request acceptance/rejection: modification request
work over a certain size/effort/complexity may be rejected by
maintainers and rerouted to a developer.
A common perception of maintenance is that it is merely fixing
studies and surveys over the years have indicated that the
majority, over 80%, of the maintenance effort is used for
non-corrective actions (Pigosky 1997). This perception is
perpetuated by users submitting problem reports that in reality are
functionality enhancements to the system.
Software maintenance and evolution of systems was first
addressed by Meir
M. Lehman in 1969. Over a period of twenty years, his research
led to the formulation of eight Laws of Evolution (Lehman
1997). Key findings of his research include that maintenance is
really evolutionary developments and that maintenance decisions are
aided by understanding what happens to systems (and software) over
time. Lehman demonstrated that systems continue to evolve over
time. As they evolve, they grow more complex unless some action
such as code
refactoring is taken to reduce the complexity.
The key software maintenance issues are both managerial and
technical. Key management issues are: alignment with customer
priorities, staffing, which organization does maintenance,
estimating costs. Key technical issues are: limited understanding,
analysis, testing, maintainability measurement.
maintenance in ISO/IEC 14764
E.B. Swanson initially
identified three categories of maintenance: corrective, adaptive,
and perfective . These
have since been updated and ISO/IEC 14764 presents:
- Corrective maintenance: Reactive modification of a software
product performed after delivery to correct discovered
- Adaptive maintenance: Modification of a software product
performed after delivery to keep a software product usable in a
changed or changing environment.
- Perfective maintenance: Modification of a software product
after delivery to improve performance or maintainability.
- Preventive maintenance: Modification of a software product
after delivery to detect and correct latent faults in the software
product before they become effective faults.
- ^ a
ISO/IEC 14764:2006 Software
Engineering — Software Life Cycle Processes — Maintenance
E. Burt Swanson, The
dimensions of maintenance. Proceedings of the 2nd international
conference on Software engineering, San Francisco, 1976, pp 492 —
- Gopalaswamy Ramesh; Ramesh
Bhattiprolu (2006). Software maintenance : effective
practices for geographically distributed environments. New
Delhi: Tata McGraw-Hill. ISBN
- Grubb, Penny; Takang, Armstrong
(2003). Software Maintenance. New Jersey: World Scientific
- Lehman, M.M.; Belady, L.A. (1985).
Program evolution : processes of software change.
London: Academic Press Inc. ISBN
- Page-Jones, Meilir (1980). The
Practical Guide to Structured Systems Design. New York:
Yourdon Press. ISBN