Software Maintenance - Software Engineering

What is Software Maintenance?

Even after the software product being delivered, if required and desired, changes and updating are done for the software product. This is known as software maintenance. Once the software product is delivered, it needs to be changed for different reasons. Some of them are as follows:

  • Market Conditions – Changes and modifications may be required as the policies relating to taxation, rules and regulations of book keeping change regularly.
  • Client Requirements – Additional new features or functions may be added as desired and required by the customers.
  • Host Modifications – The software product need to be changed if there is any occurrence of change either in the hardware or the operating system.
  • Organization Changes – The changes in the client business like acquisitions, venturing new business, reducing the strength of the organization, may also demand for software changes.

What are the different types of software maintenance?

Depending on the nature of the software product, the maintenance system adopted may change or vary. It can be either a routine maintenance or may be maintenance for a specific purpose. Some of the different types of software maintenance are as follows -

  • Corrective Maintenance – In the presence of any problems, these problems are corrected by taking up the corrective maintenance. These problems may be either discovered by the user or the reports generated by the user.
  • Adaptive Maintenance – For keeping the product up-dated with respect to the technological changes, the software is modified and updated by using adaptive maintenance.
  • Perfective Maintenance – To increase the life and usability of the software, modification and updates are done to the software, know as perfective maintenance. The performance and the reliability of the software is improved and increased by the refining the requirements of the user and adding new features.
  • Preventive Maintenance – The probable future problems of the software are prevented by regularly updating and modifying the software which is known as preventive maintenance. The issues that are likely to cause big problems in the future are being addressed by preventive maintenance.

What is software maintenance Cost?

It is studied by the research that, the cost of the maintenance of the software is almost 67% of the cost of the development of the software product.

Maintenance Cost

If estimated the cost of maintenance, phase-wise, it is noted that for all phases of SDLC, the average cost of software maintenance at all stages is more than 50% of the cost of software product.

The increase in the software maintenance cost is may be due to some of the following factors.

Real-world factors affecting Maintenance Cost

  • 10 to 15 years is usually considered as the standard age of particular software.
  • The newly developed software on the modern hardware, when compared to the older software, are more enhanced than the older ones.
  • To challenge with the new software is a big challenge for the older versions of the software.
  • Maintenance of the old software is involved with a high cost.
  • The problems are resolved by the engineers by using the trial and error methods.
  • It becomes very difficult for incorporating changes to the original software product.

Software-end factors affecting Maintenance Cost

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

What are the different activities involved in software Maintenance?

All the different activities of the software maintenance are structured within a framework issued by IEEE. The framework is made flexible such that some of the customized items can be added.

Maintenance Activities

The different activities of the software maintenance are as follows -

  • Identification & Tracing – All the requirements are maintained or modified by this activity of Identification and tracing. This activity is take up by the user or the report generated by the system identities the error messages.
  • Analysis – When the software product is modified, it has a huge impact on the system. This impact is analyzed. And according to the severity of the impact, the solutions are identified. The cost associated with the modification and maintenance is also analysed by this activity.
  • Design – At the analysis stage, the new requirements are set, for replacing or modifying the new modules. These requirements are designed in accordance with the new modules and they are validated and verified by using test cases.
  • Implementation – By using the structure of the design, from the previous step, coding is done for the modules. While implementation of the software program, unit testing is conducted.
  • System Testing – For the modules that are newly created, testing is carried out. In integration among the system and the new modules created is also tested. The complete system is tested.
  • Acceptance Testing – Acceptance test is done for the system from the view point of the users. This testing helps in identification of any more issues which have not been addressed, by the user.
  • Delivery – Once the modified system clears the testing, the modifications are released into the system in the form of small and fresh system installations or as update packages. One the software is delivered to the client, the final testing is incorporated.

A hard copy of the user manual is provided along with training as desired.

  • Maintenance management – The versions, semi-versions and patch management are added with the configuration management an then maintenance is carried out.

What is Software Re-engineering?

Without changing the core functions of the software product, the software system is updated to go along with the present outside environment, which is known as software re-engineering. By software re-engineering, the design and the programs of the software are changed.

It is not possible to update the legacy software. The updation of the software is associated with the hardware becoming obsolete. The functionality of the software does not change, even if the software turns to be old.

For instance, Unix language was initially developed in assembly language. Later as the C language was developed, considering the problems associated working in assembly language, UNIX was re-engineered into C.

In some instances, only some parts of the software calls for more maintenance than other parts.

Re Engineering Process

Re-Engineering Process

The process of Re-Engineering works as follows -

  • Decide - Decision regarding either the complete software or a part of the software to re-engineer is to be taken.
  • Perform – The specifications of the existing software can be undertaken by taking up the reverse engineering function.
  • Restructure Program – The program need to changed from function-oriented programs o object-oriented programs, if desired.
  • Re-structure data - if required.
  • Apply Forward engineering – The software to be re-engineered, the concept of forward engineering need to be applied.

What are the different terminologies used in Software Re-engineering?

The different and important terminology used in software re-engineering is as follows -

Reverse Engineering

The existing system is understood in detail and then it is analyzed, which is known as reverse engineering. It means that the lower abstraction levels are analyzed first and then the higher level is analyzed.

For the software system that is in existence, the code is examined and analyzed and then the design is obtained by the process of re-engineering. By abstraction the design, the specification can be drawn, thus moving from the code to design and from design to specifications.

Reverse Engineering

Program Restructuring

The source code of the existing software is re-arranged from one programming language to other language or also can be re-arranged in without changing the language, and thus the existing program is re-structured and re-constructed which is known as program restructuring. Source code re-structuring and data re–structuring both together constitute program restructuring.

The software is enabled to more reliable by re-structuring the program. The functionality of the software program is not affected by the process of program restructuring. Program restructuring facilitates in altering the error causing program components.

Restructuring enables to eradicate the software dependency on the hardware.

Forward Engineering

The concept of reverse engineering helps in identifying the specifications for the existing system by the codes. By using these specifications, the desired software is developed in accordance with the current technological changes, which is known as forward engineering. Forward engineering is based on the concept that the software engineering was already incorporated for the existing product.

Both software engineering and forward engineering are similar, except that that forward engineering is performed after incorporating reverse engineering.

Forward Engineering

What is Component reusability?

A module or sub-module of a software product is known as a component which is used for the task execution.


For instance, the components are the login credentials for a web browser and the software component is software print.

The components are basically independent in nature. Without depending on other modules, tasks are performed by the components individually.

The objects that are designed by Object Oriented Programming are only specific to that particle program and hence they are least used in other software programs.

The modules or the objects designed by modular programming are intended for specific task performance, but they can be used by other software programs as well.


At various levels of the software product development, the activity of re-use can be incorporated.

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

Reuse Process

The process of reusing can be done in two different ways. The first method is to adjust the component s by maintaining the same requirements and the second method is to adjust the requirement by maintaining the same component.

Reuse Process

  • Requirement Specification – In accordance with the existing system and the user input, the requirements both functional and non-functional need to be specified.
  • Design – The design for the system and sub-systems is developed and the requirements are defined. This process is considered as one of the steps of the process of SDLC.
  • Specify Components – Once the design of the software is developed, the system is divided into components or the sub-systems. A group of such sub-systems work together for developing a complete software design.
  • Search Suitable Components – On the basis of the requirements of the user and the functionality of the software, the desired matching required component is selected by the designers.
  • Incorporate Components – The selected required components are combined and grouped together forming a software product as a whole.

All rights reserved © 2018 Wisdom IT Services India Pvt. Ltd Protection Status

Software Engineering Topics