Software Maintenance

DoD currently maintains more than 1.4 billion lines of code associated with thousands of heterogeneous noncombat information systems at more than 1700 data centers. The annual cost of operating these systems is $9 billion.

Boeing Computer Services maintains a payroll system that is 22 years old (650KLOC of Cobol OS/VS, units 10K-40KLOC)

Maintenance in Perspective

Software Maintenance consumes 40-80% of total costs.

How should one view this statistic?

A product may have a 3-5 year development time and 10-15 years of service.
Assume 3 year development time and 12 years in service. Development time is 3/15=20% of total life.
Maintenance Bound Organizations

What happens or can happen over the service life of a product?

Errors are uncovered and reported during software use.
Performance problems are encountered.
New generations of hardware (18 month cycle)/operating systems are introduced.
Recommendations for new capabilities are received.

Changes in User Requirements

41.8%
Changes in Data Formats17.4%
Emergency Fixes12.5%
Routine Debugging9.3%
Hardware Changes6.2%
Improvements in Documentation5.5%
Recoding for Efficiency4%
Other3.3%
(from Lientz and Swanson, 1980)

Types of Maintenance

Corrective Maintenance - diagnosis and correction of errors
Adaptive Maintenance - modifies software product to properly interface with a changing environment
Perfective Maintenance - enhancements to product to either add new capabilities or modify existing functions
Preventive Maintenance - changes made to improve future maintainability (reverse engineering/re-engineering)

Corrective21%
Adaptive25%
Perfective50%
Preventive 4%
Vliet, p. 457

Problem associated with Maintenance


1. Difficult to trace the evolution of the software through many versions or releases. Changes are not adequately documented.
2. Difficult to trace process through which software was created.
3. Difficult to understand someone else's program.
4. Personnel turnover (design and coding and maintenance)
5. Documentation doesn't exist or is untrustworthy.
6. Most software is not designed for change.
7. Maintenance is not considered "glamorous work"
8. Unstructured code.
9. Maintenance programmers have insufficient knowledge of system and/or problem domain.

Reverse Engineering


The process of analyzing a subject system to

Restructuring concerns the transformation of a system from one representation to another, at the same level of abstraction. The functionality of the system does not change.

Reengineering usually combines a reverse engineering followed by forward engineering. Typically reengineering involves making real changes to the system.

Design Recapture recreates design abstractions from a combination of code, existing design documentation personal experience, and general knowledge about the problem and application domains. All information required for a person to fully understand what a program does, how it does it, and why it does it. This can result in harvesting reusable components.

Software Comprehension


problem-solution mapping (abstraction to code mapping - Biggerstaff)
identify problem
understand
localize
plan revision
implement revision
test to see if works
test to see what else is broken