Software Maintenance

Software maintenance is the modification of a software product after delivery to correct faults, improve performance or other attributes, or adapt the product to a modified environment. It is a critical and often the longest-running phase of the software lifecycle, representing the majority of the total cost of ownership for many systems. Maintenance is not just about fixing bugs; it is the essential work of evolving and sustaining software systems over time to ensure they continue to provide value and remain relevant to their users and the business.

Key Concepts

  • Corrective Maintenance: Reactive modification of a software product performed after delivery to correct discovered problems.
  • Adaptive Maintenance: Modification of a software product performed after delivery to keep it usable in a changed or changing environment (e.g., new operating system or library).
  • Perfective Maintenance: Modification of a software product performed after delivery to improve performance or maintainability (e.g., refactoring or feature enhancement).
  • Preventive Maintenance: Modification of a software product performed after delivery to detect and correct latent faults in the product before they become effective faults.
  • Software Evolution: The process of a software system undergoing continuous change over its lifetime as it adapts to new requirements and environments.

Common Patterns or Tools

  • SLA (Service Level Agreement): A formal commitment between a service provider and a client that specifies the expected performance and response times for maintenance and support activities.
  • Root Cause Analysis (RCA): A method used to identify the underlying cause of a problem, helping to develop a solution that prevents the problem from recurring.
  • Dependency Management: Using tools and processes to track and update third-party libraries and frameworks, ensuring that security vulnerabilities are addressed and that the system remains compatible.
  • Patch Management: The systematic process of testing and applying updates (patches) to software to fix security vulnerabilities and bugs.