CS 477 Lecture Notes
Homework Essay Results
Week Fifteen, Tuesday: Maintenance Phase
Why Maintenance is Necessary
Less than 20% of time spent on corrective maintenance, most time
is spent on perfective maintenance (improvements to the product).
Adaptive maintenance is externally imposed on the client (zip code
change for example).
What is Required of Maintenance Programmers
Far above average debugging skills. Must construct special test cases.
Must go through the phases of requirements, specification, design, and
implementation and integration. Must deal with dissatisfied users.
Maintenance Case Study
Temperate Fruit Committee (TFC): the developer made the mistake of
obeying the chairman.
Management of Maintenance
There is a serious shortage of programmers good enough to perform maintenance.
Fault Reports
Users file fault reports. Fault reports are analyzed to determine if it's
a new fault or a known fault. Faults are categorized as to seriousness.
Work-arounds are identified until the fault can be fixed. The fault report
file is distributed to minimize reinventing work-arounds.
Authorizing Changes to the Product
The maintenance programmer documents what was changed, why, by whom, when.
Testing should be performed by an independent SQA.
Ensuring Maintainability
Do not compromise whatever maintainability was built into the product to
begin with.
Problem of Repeated Maintenance
The documentation tends to become less reliable than usual.
Maintenance of Object-Oriented Software
The object-oriented paradigm brings some problems to maintenance, all
related to inheritance. First, inheritance increases the difficulty
of understanding the software. Second, dynamic binding (associated with
polymorphism) makes it more difficult to track down problems. Third,
changing a class propagates that change to all of its descendant classes.
That is, inheritance is a form of coupling. Use inheritance wisely.
Maintenance Skills versus Development Skills
A developer can be specialized (good only) in one phase. A maintainer must
be highly skilled in all areas. Maintenance is the same as development,
only more so.
Reverse Engineering
If the documentation is not available for a product, reverse engineering the
requirements and specifications can help. If source code is not available,
disassembling and reverse compiling the product is problematic. Use reverse
engineering to deduce the specifications from the behavior of the current
product.
Restructuring is done to make up for inadequate development
to make the product easier to maintain.
Testing during the Maintenance Phase
It is vital to store all test cases (with correct outcomes in machine-readable
format) so that regression testing can be performed during maintenance.
CASE Tools for the Maintenance Phase
Version control. Configuation control.
Metrics for the Maintenance Phase
Module complexity, number of faults reported (classified by severity and type),
fault status.
This page established April 18, 1998; last updated January 17, 2000.