Software Maintenance in Software Engineering

software maintenance

Software maintenance in Software Engineering –

Software maintenance in Software Engineering is widely accepted part of the SDLC now a days. It basically stands for all the modifications and updations done on the software after the delivery of software product. There are large numbers of reasons, why modifications are necessary, some of them are briefly explained below:

  • Market Conditions – Policies, which keep changes over a period of time. Such as the taxation and very newly introduced constraints like, how to maintain the bookkeeping. It may be a trigger need for the process of modification.
  • Client Requirements– Over the time, many customer may ask for some new features or functions in their software.
  • Host Modifications – If any of the user hardware or the platform (such as the operating system) of the target hosts changes. The software changes are required to keep the adaptability.
  • Organization Changes– If there is any kind of business level change at the client end. It can be reduction of the organization strength, acquiring any another company, organization venturing into some new business. That need to be modified in the original software and these problems may arise.

Types of maintenance

In a software complete lifetime, there are various types of maintenance that may vary based on its nature. It may be just a normal routine maintenance tasks as some small bug that may be discovered by some user or it can be a very large event itself based on the maintenance size or nature. Following are some different types of maintenance that is based on their characteristics:

  • Corrective Maintenance– This may include the modifications and updations that are done in order to correct or fix all the problems. Which are either discovered by the user or may be concluded by the user error reports.
  • Adaptive Maintenance– This includes all the modifications and updations that are applied to keep the desired software product up-to date and tuned it to the ever changing world of the technology and business environment.
  • Perfective Maintenance– This also includes various modifications and updates that are done in order to keep the desire software usable over a long period of time. It also includes same new features, new user requirements for the refining of the software and improve its reliability with speed and performance.
  • Preventive Maintenance– This maintenance system includes modifications and the updations in order to prevent many future problems that occur in the software. It aims to attend all the problems, which are not even significant at this particular moment but can cause some very serious issues in future.

Cost of Software Maintenance

Various reports suggest that the cost of the maintenance is very high. A study on the estimating software maintenance has found that the total cost of the maintenance is as high as 67% of the cost of the entire software process cycle.

On an average, the total cost required in software maintenance is more than 50% of all the SDLC phases. There are various factors, which mainly triggers the maintenance cost to go very high, such as:

Real-world factors affecting the Software Maintenance Cost

  • The standard age of any of the software is considered anyway between 10 to 15 years.
  • Older softwares, which were meant to work on very slow machines with limited memory and limited storage capacity cannot keep themselves challenging against the newly coming enhanced softwares on this modern hardware.
  • As the technology advances, it has becomes very costly to maintain these old software.
  • Most of the maintenance engineers are newbie and mainly use the trial and error method in order to rectify the problem.
  • Often, various changes made in software can very easily hurt the original structure of the software. Hence, making it very hard for any other subsequent changes.
  • Changes are sometimes left undocumented which may cause even more conflicts in the future.

Software-end factors affecting the Maintenance Cost

  • Structure of the Software Program
  • Programming Language used
  • Dependence on the external environment
  • Staff reliability and staff availability

Software Maintenance Activities

IEEE provides a suitable framework for the sequential maintenance process activities. It can be easily used in the iterative manner and can be easily extended. So, that all the customized items and the processes can be included in it.

These activities even go hand-in-hand with each of following phase:

  • Identification & Tracing– It usually involves activities pertaining to identification of requirement of modification or maintenance. It is generated by user or system may itself report via logs or error messages. Here, the maintenance type is also classified.
  • Analysis– The modification type is analyzed for its total impact on the system including the safety and security implications. If the probable impact is very severe, alternative solution is then looked for. A set of all the required modifications is then materialized into the requirement specifications. The total cost of the modification/maintenance is then analyzed and total estimation is concluded.
  • Design– New type of modules, which is needed to be replaced or modified, are designed against the requirement specifications set in the last stage. Test cases are also created for the validation and verification process.
  • Implementation– The new type of modules are coded with the help of the structured design that is created in the design step. Every programmer is then expected to do the unit testing in parallel.
  • System Testing– Integration testing is also done among the newly created modules. Integration testing is then also carried out between those new modules and the desired system. Finally the new system is tested as a whole, following the regressive testing procedures.
  • Acceptance Testing– After testing the entire system internally, it is then tested for the acceptance with the help of intended users. If at that state, user complaints some type of issues, they are addressed or may be noted to address in the next iteration.
  • Delivery– After the acceptance test, the system is now deployed all over the organization either by some small update package or by fresh installation of the system. The final testing takes place at the client end after the entire software is delivered.
Training facility is also provided if required, in addition to the hard copy of the user manual.
  • Maintenance management– Configuration management is a very essential part of the system maintenance. It is aided with the version control tools to control the versions, semi-version or the patch management.

Software Re-engineering

When we need to update the entire software to keep it up to date to the current market, without even impacting its functionality, it is called as the software re-engineering. It is a very thorough process where all the design of the software is changed and entire programs are re-written.

Legacy software may be cannot keep tuning with the latest technology that is available in the market. As the desire hardware become obsolete, updating of the software may become a headache. Even if the software grows old with the time, its functionality still remains same with the time.

For an example, initially the Unix was developed in the assembly language. When the language C came into existence, Unix was then re-engineered in C, because the working in assembly language was very difficult.

Other than this, sometimes programmers may notice that few parts of the software need some more maintenance than the others and they also require re-engineering.

Re-Engineering Process

  • Decide what to re-engineer. Is it complete software or just a part of it?
  • Perform the Reverse Engineering, in order to obtain the specifications of an existing software.
  • Restructure Program if required. For an example, changing the function-oriented programs into the object-oriented programs.
  • Re-structure data as required.
  • Apply Forward engineering concepts done in order to get the re-engineered software.

There are some very few important terms that is used in the Software re-engineering

Reverse Engineering

It is a process that is done to achieve the system specification by thoroughly analyzing and understanding the existing system. This process can be seen as the reverse SDLC model, i.e. we just try to get the higher abstraction level by analyzing the lower abstraction levels.

An existing type of system is previously implemented design, about which we don’t know anything. Designers then do the reverse engineering by just looking at the code of software and try to get all the design. With the design in hand, they try to conclude all the specifications. Thus, going in the reverse from the code to system specification.

Program Restructuring

It is a very important process to perform re-structure and re-construction of the existing software. It is all about re-arranging the original source code, either in the same programming language or from any one programming language to a different type of language. Restructuring can either have the source code-restructuring and data-restructuring or even both.

Re-structuring does not even impact the functionality of the software used but it will enhance the reliability and maintainability. Program components, which may cause errors very frequently can be now changed, or updated with the re-structuring process.

The dependability of desired software on the obsolete hardware platform can be easily removed via the re-structuring.

Forward Engineering

Forward engineering is a process used to obtain desired software from the specifications in hand which were brought down by the means of reverse engineering. It assumes that there was some type of software engineering that is already done in the past.

Forward engineering is same as the software engineering process with just one difference – it is carried out always after the reverse engineering.

Component reusability

A component is also a part of the software program code, which usually executes an independent task in the system. It can be a very small module or a sub-system itself.


The login procedures that are used on the web can be easily considered as components, printing system in the software can be seen as a basic component of the software.

Components usually have high cohesion of the functionality and very lower rate of coupling, i.e. they usually work independently and can easily perform tasks without depending on other type of modules.

Re-use is basically done at various kinds of levels-

  • Application level – Where a complete application program is used as a sub-system of the new software.
  • Component level – Where the sub-system of an application is used.
  • Modules level – Where all the functional modules are re-used.

Software components also provide the interfaces, which can be later used to establish a communication among the different components.

Reuse Process

Two kinds of software method can be adopted: either by keeping the requirements same and just adjusting components or by keeping the components same and modifying the requirements.

  • Requirement Specification– The functional and the non-functional requirements are very specific, which a software product should comply to, with the help of this existing system, user input or even both.
  • Design– This is also a standard type of SDLC process step, where the requirements are defined in the terms of software parlance. Basic architecture of the system as a whole and all its sub-systems are created.
  • Specify Components – By studying the entire software design, the designers can segregate the entire system into some smaller components or sub-systems. One complete software design can turn into a collection of a very huge set of components that works together.
  • Search Suitable Components– The software component repository is easily referred by the designers to search for the matching component. It is done on the basis of the functionality and intended software requirements.
  • Incorporate Components– All the matched components are packed together to shape them as a complete software.



Speak Your Mind