The Maintenance of Software Products
An Introduction
Prof. David Bernstein
James Madison University
Computer Science Department
bernstdh@jmu.edu
Types of Maintenance (ISO/IEC 14764)
Corrective:
Modifications that correct defects found in the production environment
Adaptive:
Modifications that keep the product usable in a changed/changing production environment (e.g., migration to another platform)
Perfective:
Modifications that satisfy additional functional requirements (e.g., new features) or non-functional requirements (e.g., improve performance)
Preventive:
Modifications that correct faults discovered in the development environment before they give rise to failures/symptoms in the production environment
Frequency
Agile Processes:
Tend to deploy more frequently so maintenance activities tend to occur more frequently
Heavyweight Processes:
Tend to deploy Less frequently so maintenance is less frequent but no less significant
The Results of Several Surveys
Adaptive and Perfective:
75% of the total effort and cost
Corrective and Preventive:
25% of the total effort and cost
Why Maintenance is Expensive
Endemic Reasons:
Successful products are in the field for decades so huge costs are bound to accrue
Other Reasons:
As a product is modified its structure deteriorates
Maintenance Tradeoffs
Related to Availability:
Maintenance improves a product but may make it unavailable
Related to Quality:
There are often "elegant" solutions and "quick and dirty" solutions
Who Is Involved?
There Are Options:
The original development team
A maintenance team
More Tradeoffs:
The development team understand the product but may not understand the operational environment
Maintenance teams and development teams may have (or think they have) different statuses
Metrics for Corrective Maintenance
Backlog (\(B\)):
\(C\) denotes the number of problems closed during an interval of time (e.g., a month)
\(A\) denotes the number of problem "arrivals" during an interval of time (e.g., a month)
\(B = \frac{C}{A} \cdot 100\)
Response Time (Mean Time to Repair):
The mean (or median) amount of time between the arrival of a problem and its correction
Tools for Corrective Maintenance (i.e., Bug/Issue Tracking)
Purpose:
Provide a clear, centralized overview of corrective maintenance requests
Calculate performance metrics
Some Open Source Examples:
Apache Bloodhound
Bugzilla
Zentrack