This tutorial Introduction to Software Maintenance covers Types, Necessity of Maintenance, Estimation of Maintenance Cost, Software Reverse Engineering, Software Re-engineering.
Table of Content
Software Maintenance
Upon completion, a software system is handed over to the client. Any changes after the client have accepted the system are categorized as maintenance. Changes to code, documentation, manual or any other component of the system are examples of maintenance. Maintenance should be kept in mind throughout the development process. The maintenance efforts require about 60 per cent of the total life-cycle cost for a typical software product. However, maintenance costs vary widely from one application domain to another.
“Software maintenance is the process of modifying a software system or component after delivery to correct faults, improve performances or other attributes, or adapt to a changed environment.”
IEEE definition
Need of Software Maintenance
Software maintenance is needed to:
- Correct errors
- Enhance features
- Port the software to new platforms
- Migrate legacy systems
Types of Maintenance
- Corrective Maintenance
- Adaptive Maintenance
- Perfective Maintenance
- Preventive maintenance
Corrective Maintenance
Corrective maintenance of a software product is necessary to rectify the bugs observed while the system is in use.
Adaptive Maintenance
A software product might need maintenance 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 or software.
Perfective Maintenance
A software product needs maintenance to support the new features that users want it to support, to change different functionalities of the system according to customer demands, or to enhance the performance of the system.
Preventive maintenance
Preventive maintenance may be undertaken on a system in order to anticipate future problems and make subsequent maintenance easier.
Apart from the four categories mentioned above, other categories are also defined by some sources as follows:
Emergency maintenance: Emergency maintenance is the unscheduled corrective maintenance performed to keep a system operational.
Enhancements: Software enhancements include addition of new features or functionalities to an existing system. Adequate planning is necessary to determine the new features to be added so as to protect the system from degrading in the long run. The funding for enhancements almost always comes from the customer.
Also Read: Risk Management
Estimation of Maintenance Cost
Boehm proposed a formula for estimating maintenance costs as part of his COCOMO cost estimation model. Boehm’s maintenance cost estimation is made in terms of a quantity called the Annual Change Traffic (ACT). Boehm defined ACT as the fraction of a software product’s source instructions which undergo change during a typical year either through addition or deletion.
where KLOC (added) is the total kilo lines of source code added during maintenance.
KLOC (deleted) is the total kilo lines of source code deleted during maintenance. Thus, the code that is changed should be counted in both the code added and the code deleted. The ACT is multiplied with the total development cost to arrive at the maintenance cost:
Maintenance Cost = ACT × Development Cost
Maintenance Activities
- Problem or modification identification: In this phase, the customer or the user sends in the request for change (also known as modification request – MR). The phase also includes decisions on whether to accept or reject the request sent from the customer.
- Analysis: The overall maintenance plan is sketched out which includes the design, implementation and test of the system to be modified. Also analyzed in this phase are the alternative solutions, if any, for modifying the system in an efficient way, keeping the cost and other impacts in mind.
- Design: The changes or the modifications that have to be made to the existing system are designed in this phase. The input to this phase is the result of the analysis phase and also the details of the existing system which includes the appropriate documentation.
- Implementation: This phase includes activities involving coding, implementation, testing, integration of modified code, analysis of risks etc.
- Regression or system testing: After the modifications are made to the existing system, tests are conducted on the new system to ensure that the new system is free of any errors and also to monitor whether the new system has met its new specifications.
- Acceptance testing: This type of testing involves the customers or the end users to use the system and point out errors, if any, which would be reported to the maintenance team, in order to make further changes.
- Delivery: The modified system is released to the customer in this phase.
Also Read: COCOMO Model
Software Reverse Engineering
Software reverse engineering is the process of recovering the design and the requirements specification of a product from an analysis of its code.
The purpose of reverse engineering is to facilitate maintenance work by improving the understandability of a system and to produce the necessary documents for a legacy system.
Reverse engineering is becoming important, since legacy software products lack proper documentation, and are highly unstructured. Even well-designed products become legacy software as their structure degrades through a series of maintenance efforts. A process model for reverse engineering is shown in Figure 1.
Purposes of Reverse engineering process
- Quality issues which include simplification of complex software, removing errors from software thus increasing the quality of the software.
- Management issues include an increase in programming standard and to implement better software maintenance techniques.
- Technical issues which include making major changes in a piece of software to be implemented and to discover and record the design of the system.
When using reverse engineering, the following problems have to be solved:
- Source code may be poorly structured and relevant documentation may be out of date.
- Design specifications may be incomplete.
- The existing system may be developed with inconsistent principles resulting in the difficulty to extract sufficient information.
Software Re-engineering
Re-engineering is defined as “the examination and alteration of a subject system to reconstitute it in a new form and the subsequent implementation of the new form”.
Reengineering can also be defined as “any activity that: improves one’s understanding of software, or prepares or improves the software itself, usually for increased maintainability, reusability, or evolvability”.
Reengineering involves implementing various techniques in analyzing and redesigning an existing system from the extracted information by the reverse engineering process. Reengineering tries to regenerate the abstract view of the system after which the forward engineering activities realize the system into new form.
Software re-engineering is a combination of two consecutive processes i.e., software reverse engineering and software forward engineering as shown in the Figure. 2.
The reverse engineering process extracts elements and important information from an existing system. The reengineering process uses this extracted information for analysis and redesign and tries to identify the components that have to be reused and the parts that need to be redesigned or replaced. After the final design has been created in the reengineering process, the forward engineering process takes over in implementing this design and finally testing the new modified system.
Read Further: Wikipedia
Also Read: Software Maintenance
Reference: Estimating Software Maintenance by Arun Mukhija (University of Zurich), Jan. 200 [Acess Here]