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.