Unit 14 — Software Maintenance & Evolution¶
Learning objectives¶
- Classify corrective, adaptive, perfective, and preventive maintenance.
- Explain why software aging often reflects accumulated change complexity rather than physical wear.
- Use characterization tests and incremental modernization for legacy systems.
Most software lives after version 1.0¶
Long-lived systems accumulate new features, platform changes, data migrations, dependency upgrades, security fixes, staff turnover, and undocumented assumptions.
Legacy modernization strategy¶
- Identify business-critical behavior.
- Create observability and characterization tests.
- Map risky dependencies and data flows.
- Improve seams/interfaces around change hotspots.
- Replace or refactor incrementally.
- Measure operational and delivery effects.
Big-bang rewrites can reproduce old defects while creating new ones and may discard years of encoded domain knowledge.
Evolution-friendly engineering¶
Readable code, automated tests, modular architecture, documented decisions, reproducible builds, and migration tooling are investments in future change.