Software Engineering - System Maintenance Overview

📢 This article was translated by gemini-3-flash-preview

Software Engineering Series - Part 4

Software maintenance is the final phase of the software lifecycle, occurring after the system hits production. Since it happens after deployment, it technically isn’t part of the system development process. It involves modifying software after delivery to fix bugs or meet new requirements—essentially any change made to the software once it’s live.

System Maintainability Concepts

System maintainability is defined as how easy it is for maintenance personnel to understand, correct, change, and improve the software. Improving maintainability is a key goal across all development steps. Whether a system can be maintained effectively is measured by the “system maintainability” metric.

System Maintainability Metrics

  1. Understandability: How easily others can grasp the system’s structure, interfaces, functions, and internal processes. Modularity, detailed design docs, structured design, and high-level programming languages all help here.
  2. Testability: The ease of diagnosis and testing depends on understandability. Solid documentation is crucial for diagnosis, as are clear program structures, high-performance testing tools, and well-planned test procedures. Developers should design for diagnostic ease during the design and coding phases. Existing test cases from the system testing phase should be reused during maintenance.
  3. Modifiability: This is directly linked to design principles. Modularity, coupling, cohesion, and the relationship between scope of effect and scope of control all impact how easily a system can be modified.

Maintenance and Software Documentation

Documentation is the deciding factor in software maintainability. Large systems used over long periods undergo many changes, making docs vital.

Software documentation falls into two categories:

  • User Documentation: Describes system functions and usage without worrying about implementation details.
  • System Documentation: Describes design, implementation, testing, and other technical aspects.

Maintainability is a core feature every software product should have. It must be addressed during the development phase. Every single stage of software engineering should consider and improve maintainability, with technical and management reviews at the end of each stage focusing on this metric.

Software Documentation

High-quality documentation improves software development quality.

Documentation is an integral part of the software; software without documentation isn’t really “software.” Documentation takes up a significant portion of the workload in development, and high-quality docs are essential for the software product’s long-term value.

Content and Types of System Maintenance

System maintenance includes hardware, software, and data maintenance.

Hardware Maintenance

Handled by dedicated hardware maintenance personnel.

Software Maintenance

This involves modifying applications based on changing requirements or hardware environments. When modifying, source code should be fully utilized. All changes must be logged in a program modification registry, and differences between old and new versions must be specified in change notices.

Types of software maintenance include:

  1. Corrective Maintenance: Fixing errors that occurred during development but weren’t caught during testing.
  2. Adaptive Maintenance: Modifying software to keep up with changes in IT environments (hardware/OS) or management requirements.
  3. Perfective Maintenance: Adding new features or improving performance that wasn’t specified in the original system analysis and design.
  4. Preventive Maintenance: Proactively adding new features to improve reliability and maintainability, ensuring the system survives future environment changes without becoming obsolete.

Data Maintenance

Handled primarily by Database Administrators (DBAs), focusing on security, integrity, and concurrency control.

Software Quality Attributes

Reliability, Availability, and Maintainability are key quality attributes, usually measured on a scale of 0 to 1 in software engineering.

Reliability is the probability that a system operates without failure for a given time interval under specific conditions. It can be measured as MTTF / (1 + MTTF), where MTTF is Mean Time To Failure.

Availability is the probability that a system is operating correctly according to specs at a given point in time. It can be measured as MTBF / (1 + MTBF), where MTBF is Mean Time Between Failures.

Maintainability is the probability that maintenance activities can be completed within a given time interval using specified processes and resources. It can be measured as 1 / (1 + MTTR), where MTTR is Mean Time To Repair.