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 Formats | 17.4% |
| Emergency Fixes | 12.5% |
| Routine Debugging | 9.3% |
| Hardware Changes | 6.2% |
| Improvements in Documentation | 5.5% |
| Recoding for Efficiency | 4% |
| Other | 3.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)
| Corrective | 21% |
| Adaptive | 25% |
| Perfective | 50% |
| 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
- identify the system's components and their interrelationships
- create representations of the system in another form or at a higher level of abstraction
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