Skip to content

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

  1. Identify business-critical behavior.
  2. Create observability and characterization tests.
  3. Map risky dependencies and data flows.
  4. Improve seams/interfaces around change hotspots.
  5. Replace or refactor incrementally.
  6. 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.