Software Engineering — SOFTWARE MAINTENANCE [Part-4]

Prasun Das| August 30, 2022 at 10:13 AM | 5 minutes Read


Software Maintenance can be defined as the process of modifying a software product after its delivery. The main purpose of software maintenance is to modify and update the software applications after delivery to correct faults(if any) and to optimise performance. Software being a model of the real world needs to be constantly updated to keep up with the real world changes. It is an inclusive activity that includes deletion of obsolete features, error corrections, upgrades and necessary optimizations.

Need for Maintenance:

  • Correct faults
  • Change in user requirements over time
  • Improve the design
  • Improving the system efficiency
  • Migrate legacy software
  • To optimise the code to run faster
  • Eliminating any unwanted side effects

Categories of Software Maintenance:

Corrective Maintenance -

This includes all the modifications and updates done in order to rectify bugs and find solutions to specific problems which are either discovered by the user or concluded by user error reports.

Adaptive Maintenance -

It includes all the modifications and updates done to keep the software up-to-date and in tune to the always changing world of technology and business environment.

It implies that adaptive maintenance includes the modifications and updates when the customers need the product to run on new platforms, on new operating systems, or when they need the product to interface with new hardware and software. 

Preventive Maintenance -

 This includes modifications and updations to prevent any future problems with the software. It aims to attend to problems, which are not significant at this moment but may cause serious issues in future. This ensures that the software doesn’t die out.

Perfective Maintenance -

It defines improving the processing efficiency or performance and/or enhancing changeability. This may contain enhancement of existing system functionality, improvement in computational efficiency, etc.  It includes new features, new user requirements for refining the software and improving its overall reliability and performance.

Challenges to Software Maintenance:

  • A software maintenance process is an open ended process, continuing for years which drives up the maintenance cost.
  • Changes made are often left undocumented causing conflicts in the near future.
  • The standard age of any software is in the range of 10-15 years, after which it starts fading, unable to keep up with the world.
  • Older softwares originally meant to work on less advanced machines find it hard to compete with new enhanced softwares on modern hardware.


Software Reliability implies Operational reliability. It is described as the ability of a system or component to perform its required functions under static conditions for a specific period of time.

Software reliability can also be defined as the probability that a software system fulfills its assigned task in a particular environment for a predefined number of input cases, assuming that the hardware and the input are error free. It is an essential component of software engineering and consists of - functionality, usability, capability, serviceability, documentation and installability of the software.

Software reliability is inversely proportional to the complexity of the software. However, that does not deter system developers from pushing a certain complexity level into the software layer. It is believed that the more advanced the technology, the higher complexity of software involved. For instance, the upcoming International Space Station will have an estimated 10 million lines of ground support software; next generation air traffic control systems with about 1-2 million lines of software. To put it in plain terms, we can not sacrifice software complexity for a better reliability since software complexity raises the overall quality of the software.


When the user perceives that the software has ceased delivering the desired result with respect to specific input values, it can be said that software failure has occurred. This can occur for a variety of reasons like - bugs, ambiguities, misinterpretation of the specification that the software is supposed to satisfy, carelessness in writing code, inadequate testing, incorrect or unexpected usage of the software or other unforeseen problems. 

Software failure can be classified as:

  • Transient failure: These failures only occur with specific inputs.
  • Permanent failure: This failure appears on all inputs.
  • Recoverable failure: System can recover without any help from the operator.
  • Unrecoverable failure: System can recover with operator help only.
  • Non-corruption failure: The failure does not corrupt the system state or data.
  • Corrupting failure: It damages the system state or data.


Risk is a problem that can be a potential threat to the progress of the project in the near future, but hasn’t occurred yet. These potential issues might harm cost, schedule or technical success of the project and the quality of the software device, or cost the project team morale.

Risk Management is the process of identifying, addressing and eliminating these problems before they can cause damage to the project.

Risks affecting a software project can be classified into:

  1. Project Risks
  2. Technical Risks
  3. Business Risks

Project risks: Project risks concern different forms of budgetary, schedule, personnel, resource, and customer-related problems. A vital project risk is schedule slippage. Since the software is intangible, it is very difficult to monitor and control a software project. It is very hard to control something which cannot be identified. 

Technical risks: Technical risks concern potential method, implementation, interfacing, testing, and maintenance issues. It also consists of an ambiguous specification, incomplete specification, changing specification, technical uncertainty, and technical obsoleteness. Most technical risks actually appear due to the development team's insufficient knowledge about the project and/or incompetence.

Business risks: This type of risks are more about the business aspects than the technical aspects. For instance, losing budgetary commitments, building expensive projects with no market demands, etc can be termed as business risks.

Other Risk Categories:

  • Known risks - These risks can be identified and subsequently taken care of, after careful assessment of the project program, the business and technical environment and accessing data sources.
  • Predictable risks - These risks are hypothesized from past experience of a similar project.
  • Unpredictable risks - This type of risks can and often do occur but are tough to identify in advance.

Essential Principles of Risk Management:

Global perspective: 

Reviewing  the bigger system description, design, and implementation. We take a look at the chance and the impact the risk is going to have.

Open communication: 

Encouraging open lines of communication between the client and the team enables certainty and concise plan of action against the risks.


Contemplating and foreseeing future events help us a lot in forming strategies to deal with future risks and anomalies.

Integrated management:

Risk management is made an essential part of project management.

Continuous process: 

In this phase, the risks are often tracked continuously throughout the risk management paradigm.

#computer fundamentals#software-engineering#last minute notes#fundamentals to learn
View Count:4.1k


Similar Articles

Busting myths about web3

WHAT IS WEB3?Web3 is the catch-all term for the vision of an upgraded version of the internet aimed at giving power back to the users. It is truly the......

Cover image


Operating Systems is one of the core subjects for a computer science student. As such a lot of important questions are asked on this subject in interv......

Cover image

Cloud Computing Cheatsheet

Getting started with cloud computing ?The words "cloud" and "web" will be interchangeable. What kind of business operates today without the internet? ...

Cover image

Software Engineering — Software Process Activities [Part - 3]

A quick summary upto what we did this far  from this series:Software EngineeringSoftware engineering is a discipline of engineering concerned wit...

Cover image

Understanding Time Complexity with Interview Examples

Introduction:Understanding time complexity of a function is imperative for every programmer to execute a program in the most efficient manner. Time co...

Cover image

Software Engineering — Software Development lifecycle and software process(Part 2)

 Software MethodologyA software methodology (which is also known as software process) is a set of related development Phases that leads to the pr...

Cover image

Software Engineering [Part 1] - Introduction

Software Engineering is a subject that requires when you are a software developer as well as when you are in your college preparing for a semester or ...

Cover image

SQL Interview Questions

Are you getting ready for your SQL developer job interview?You've come to the correct place.This tutorial will assist you in brushing up on your SQL s...

Cover image


Introduction: What is SQL?To understand SQL, we must first understand databases and database management systems (DBMS).Data is essentially a collectio...

Cover image

Computer Networking Cheatsheet (Last Minute Notes)

 Networking: Importance in real life!Using a computer for work, as well as for personal use, ha...

Cover image

Last Minute Preparation Cheat Sheet for Quantitative Aptitude

FORMULA LIST:ALGEBRA :1.Sum of first n natural numbers = n(n+1)/22.Sum of the squares of first n nat...

Cover image

Database Management System Last Minute Notes [Part - 2]

ER-DiagramWhat are ER Models ?An Entity Relationship Diagram (ERD) is a visual representation of dif...

Cover image

Database Management System Last Minute Notes [Part - 1]

What is actually DBMS?A Database Management System (DBMS) is system software used to manage the orga...

Cover image

C Cheatsheet

C CHEATSHEETINTRODUCTION:C programming language was developed by Dennis Ritchie of Bell Labs in 1972...

Cover image

C Interview Questions — 2022

C is a general purpose high-level language most popular amongst coders, it is the most compatible, e...

Cover image

C++ STL Cheat Sheet

C++ programming language has templates which basically allows functions and classes to work with gen...

Cover image


C++ was conceived in the late 1970s to overcome the limitations of C. It  is an extension of th...

Cover image

Python [Advanced] Interview Questions — 2022

Interview Questions are a great source to test your knowledge about any specific field. But remember...

Cover image

Basic Python [Core] Interview Questions for Freshers and Short Sample Answers — 2022

The most popular high-level, multipurpose programming language right now is Python.Python supports p...

Cover image

Python Cheat Sheet - Learn the basics of Python

IntroductionPython is a high-level programming language with dynamic binding and high-level inherent...

Cover image

Basic Java Interview Questions for Freshers and Short Sample Answers — 2022

Interview Questions are a great source to test your knowledge about any specific field. But remember...

Cover image

Java OOP Cheat Sheet — A Quick Guide to Object-Oriented Programming in Java

Object-Oriented Programming or better known as OOPs is one of the major pillars of Java that has lev...

Cover image

Learn Java: Basics to Advanced Concepts [Java Cheatsheet]

Java is a high-level programming language known for its robustness, object-oriented nature, enhanced...

Cover image