21-12-2012, 05:51 PM
Software Maintenance
1Software Maintenance.pdf (Size: 105.18 KB / Downloads: 75)
Introduction
The term maintenance, when accompanied to software, assumes a meaning profoundly
different from the meaning it assumes in any other engineering discipline. In fact, many
engineering disciplines intend maintenance as the process of keeping something in working
order, in repair. The key concept is the deterioration of an engineering artifact due to the use
and the passing of time; the aim of maintenance is therefore to keep the artifact’s functionality
in line with that defined and registered at the time of release.
Of course, this view of maintenance does not apply to software, as software does not
deteriorate with the use and the passing of time. Nevertheless, the need for modifying a piece
of software after delivery has been with us since the very beginning of electronic computing.
The Lehman’s laws of evolution [50, 51] state that successful software systems are
condemned to change over time. A predominant proportion of changes is to meet everchanging
user needs. This is captured by the first law of Lehman [50, 51]: “A program that is
used in a real world environment necessarily must change or become progressively less useful
in that environment”. Significant changes also derive from the need to adapt software to
interact with external entities, including people, organizations, and artificial systems. In fact,
software is infinitely malleable and, therefore, it is often perceived as the easiest part to
change in a system [21].
This article overviews software maintenance, its relevance, the problems, and the available
solutions; the underlying objective is to present software maintenance not as a problem, but in
terms of solutions.
Definitions
Software maintenance is a very broad activity often defined as including all work made on a
software system after it becomes operational [56]. This covers the correction of errors, the
enhancement, deletion and addition of capabilities, the adaptation to changes in data
requirements and operation environments, the improvement of performance, usability, or any
other quality attribute. The IEEE definition is as follows [40]:
“Software maintenance is the process of modifying a software system or component
after delivery to correct faults, improve performances or other attributes, or adapt to
a changed environment.”
This definition reflects the common view that software maintenance is a post-delivery
activity: it starts when a system is released to the customer or user and encompasses all
activities that keep the system operational and meet the user’s needs. This view is well
summarized by the classical waterfall models of the software life cycle, which generally
comprise a final phase of operation and maintenance, as shown in figure 1.
Categories of software maintenance
Across the 70’s and the 80’s, several authors have studied the maintenance phenomenon with
the aim of identifying the reasons that originate the needs for changes and their relative
frequencies and costs. As a result of these studies, several classifications of maintenance
activities have been defined; these classifications help to better understand the great
significance of maintenance and its implications on the cost and the quality of the systems in
use. Dividing the maintenance effort into categories has first made evident that software
maintenance is more than correcting errors.
Lientz and Swanson [54] divide maintenance into three components: corrective, adaptive, and
perfective maintenance. Corrective maintenance includes all the changes made to remove
actual faults in the software. Adaptive maintenance encompasses the changes needed as a
consequence of some mutation in the environment in which the system must operate, for
instance, altering a system to make it running on a new hardware platform, operating system,
DBMS, TP monitor, or network. Finally, perfective maintenance refers to changes that
originate from user requests; examples include inserting, deleting, extending, and modifying
functions, rewriting documentation, improving performances, or improving ease of use.
Pigoski [62] suggests joining the adaptive and perfective categories and calling them
enhancements, as these types of changes are not corrective in nature: they are improvements.
As a matter of fact, some organizations use the term software maintenance to refer to the
implementation of small changes, whereas software development is used to refer to all other
modifications.
Costs and challenges
However one decides to categorize the maintenance effort, it is still clear that software
maintenance accounts for a huge amount of the overall software budget for an information
system organization. Since 1972 [28], software maintenance was characterized as an
“iceberg” to highlight the enormous mass of potential problems and costs that lie under the
surface. Although figures vary, several surveys [1, 2, 7, 10, 34, 46, 54, 56, 58] indicate that
software maintenance consumes 60% to 80% of the total life cycle costs; these surveys also
report that maintenance costs are largely due to enhancements (often 75–80%), rather than
corrections.
Several technical and managerial problems contribute to the costs of software maintenance.
Among the most challenging problems of software maintenance are: program comprehension,
impact analysis, and regression testing.
Whenever a change is made to a piece of software, it is important that the maintainer gains a
complete understanding of the structure, behavior and functionality of the system being
modified. It is on the basis of this understanding that modification proposals to accomplish the
maintenance objectives can be generated. As a consequence, maintainers spend a large
amount of their time reading the code and the accompanying documentation to comprehend
its logic, purpose, and structure.
Models
A typical approach to software maintenance is to work on code first, and then making the
necessary changes to the accompanying documentation, if any. This approach is captured by
the quick-fix model, shown in figure 4, which demonstrates the flow of changes from the old
to the new version of the system [8]. Ideally, after the code has been changed the requirement,
design, testing and any other form of available documents impacted by the modification
should be updated. However, due to its perceived malleability, users expect software to be
modified quickly and cost-effectively. Changes are often made on the fly, without proper
planning, design, impact analysis, and regression testing.
Processes
Several authors have proposed process models for software maintenance. These models
organize maintenance into a sequence of related activities, or phases, and define the order in
which these phases are to be executed. Sometimes, they also suggest the deliverables that
each phase must provide to the following phases. An example of such a process is shown in
figure 7 [82]. Although different authors identify different phases, they agree that there is a
core set of activity that are indispensable for successful maintenance, namely the
comprehension of the existing system, the assessment of the impact of a proposed change, and
the regression testing.
IEEE and ISO have both addressed software maintenance, the first with a specific standard
[41] and the latter as a part of its standard on life cycle processes [44]. The next two sections
describe the maintenance processes defined by these two documents.
Maintenance management
Management is “the process of designing and maintaining an environment in which
individuals, working together in groups, accomplish efficiently selected aims” [79]. In the
case of maintenance the key aim is to provide cost-effective support to a software system
during its entire lifespan. Management is concerned with quality and productivity, that imply
effectiveness and efficiency. Many authors [48, 79, 74] agree that management consists of
five separate functions, as shown in figure 11. The functions are: planning, organizing,
staffing, leading (sometimes also called directing), and controlling.
Planning consists of selecting missions and objectives and predetermining a course of actions
for accomplishing them. Commitment of human and material resources and scheduling of
actions are among the most critical activities in this function.
Organizing is the management function that establishes an intentional structure of roles for
people to fill in an organization. This entails arranging the relationships among roles and
granting the responsibilities and needed authority.
Staffing involves filling the positions in the organization by selecting and training people.
Two key activities of this function are evaluating and appraising project personnel and
providing for general development, i.e. improvement of knowledge, attitudes, and skills.