Software maintenance accounts for over 60% of total software cost. Understanding its types, characteristics, and process models is essential for long-term software sustainability.
🔩 Characteristics of Software Maintenance
Software maintenance is the process of modifying software after delivery to correct faults, improve performance, or adapt to a changed environment.
Most expensive phase — typically 60–80% of total software lifecycle cost
Involves understanding existing code (often written by others)
Changes must be made without breaking existing functionality
Documentation needs to be updated alongside code changes
Regression testing required after every change
Requires understanding of original design decisions
🗂️ Types of Software Maintenance
Maintenance Types Distribution (approximate industry data)
Corrective
Fixes bugs and faults discovered after deployment. Reactive — something broke, fix it.
Logic errors
Performance failures
Security vulnerabilities (patches)
Data corruption issues
Adaptive
Modifies software to work in a changed environment. Proactive — environment changes, adapt.
New OS version
Hardware upgrades
Changed business rules/regulations
New database version
Perfective
Improves performance or maintainability without changing external behavior. Proactive — enhance.
Code refactoring
Performance optimization
Adding new features
Improving user interface
🔃 Software Maintenance Process Model
The maintenance process involves two engineering cycles working together: Reverse Engineering (understanding the existing system) followed by Forward Engineering (making and implementing the changes).
Reverse Engineering → Forward Engineering Cycle
Reverse Engineering
Analyze source code to understand its design and requirements
Produce design documents from existing undocumented code
Identify components, their relationships, and behaviors
Often needed when original documentation is lost
Forward Engineering
Apply the recovered understanding + change requirements to redesign
Re-implement the changed portions with new code
Integrate, test (including regression testing), and release