Software Maintenance
Definition
Software Maintenance is the process of modifying a software system after delivery, to correct faults, improve performance, adapt to a changed environment, or add new capabilities — it is the final phase of the SDLC, and the longest and most expensive one.
IEEE Definition
"The modification of a software product after delivery to correct faults, to improve performance or other attributes, or to adapt the product to a modified environment."
Why Maintenance Is So Significant
- Studies consistently show maintenance consumes 60–80% of total software lifecycle cost
- Software must evolve to remain useful — Lehman's Laws of Software Evolution state that a system must continually adapt or become progressively less useful
Types of Maintenance (Detailed in later topics as "Maintenance Models"/categories)
- Corrective — fixing bugs/defects
- Adaptive — adapting to environment changes (new OS, hardware, regulations)
- Perfective — improving performance, adding new features, enhancing usability
- Preventive — proactively improving maintainability to prevent future problems
Why Maintenance Is Difficult
- Lack of documentation — original design/rationale often poorly documented
- Staff turnover — original developers may have left; institutional knowledge lost
- Aging technology — legacy code may use outdated languages/frameworks
- Complexity growth — repeated modifications increase system complexity over time (unless actively managed)
- Regression risk — every change risks breaking existing functionality
Maintenance and Software Quality
Well-designed software (high cohesion, low coupling, good documentation — see Module 3) is significantly cheaper to maintain than poorly designed software — this is why "maintainability" is emphasized as a key design goal from the very start.
Exam tip: Memorize the "60-80% of lifecycle cost" statistic and the 4 maintenance types (Corrective, Adaptive, Perfective, Preventive) — foundational facts for nearly every question in this module.