Skip to main content

Software maintenance and its types

Short answer

Software maintenance is modifying a delivered system to correct faults, improve performance, or adapt to a changed environment. Its types are corrective (fix bugs), adaptive (new environment), perfective (add/improve features), and preventive (restructure for easier future maintenance).

What is software maintenance? What are the types of software maintenance? Explain with example.

Software maintenance

Software maintenance is the process of modifying a software system after it has been delivered, to correct faults, improve performance or other attributes, or adapt it to a changed environment (IEEE). Software must keep changing to stay useful, so maintenance usually takes the largest share of total life-cycle cost, often 60–80%.

Types of software maintenance

1. Corrective maintenance

  • Fixing faults (bugs) found by users after delivery.
  • Faults may be coding errors (cheap to fix), design errors, or requirements errors (most expensive).
  • Example: in a college library system, the fine for late returns is calculated wrongly for leap years. The calculation is corrected.

2. Adaptive maintenance

  • Changing the software so that it works in a new or changed environment: hardware, operating system, database, network, laws or business rules.
  • Functionality is not changed; only the environment it works in.
  • Example: the library system is moved from a Windows desktop to a web server, or updated because the government changes the tax (VAT) rate used in billing.

3. Perfective maintenance

  • Adding new features or improving existing ones (performance, usability) in response to user requests.
  • This is the largest share of maintenance work.
  • Example: users request that the library system send SMS reminders before due dates, and that searching be made faster.

4. Preventive maintenance

  • Changing the software to make future maintenance easier and to prevent future problems, without changing visible behaviour.
  • Includes restructuring code, improving documentation and removing duplicate code (re-engineering and refactoring).
  • Example: the library system's large, tangled "issue book" module is split into smaller, well-documented functions.

Distribution of maintenance effort (approximate, Sommerville)

Functionality addition or modification  ~65%
###########################################
Environmental adaptation                ~18%
############
Fault repair                            ~17%
###########

(Preventive maintenance, when counted separately, is a small share of a few percent.)

TypeReasonChanges functionality?
CorrectiveFix faultsNo (restores intended function)
AdaptiveNew environmentNo
PerfectiveNew or better featuresYes
PreventiveEasier future maintenanceNo

Maintenance process: whatever the type, a change follows the same steps (Sommerville):

Change request --> Impact analysis --> Release planning
                                             |
  System release <-- Testing <-- Change implementation
  1. Change request: a user or manager asks for a fix, an adaptation or an enhancement.
  2. Impact analysis: find which components are affected and estimate cost and risk.
  3. Release planning: group approved changes (fault repairs, adaptations, new features) into the next release.
  4. Change implementation: understand the existing code, make the change and update documents.
  5. Testing and release: regression-test the system so the change does not break existing features, then release the new version.

Factors that increase maintenance cost: poor documentation, poor program structure, staff turnover, the age of the system, contracts that separate development from maintenance, and weak programming skills of maintenance staff.

Good design (modularity, low coupling, high cohesion, clear documentation) reduces all four kinds of maintenance cost.

✓ Answer checked by Claude Opus 5.5 (high effort)

All Software Engineering chapter 10 questions →