After completing the hectic and time consuming process of developing and testing a software application, taking measures to ensure its maintenance is quite sensible and important. Nowadays, software maintenance is widely accepted as part of Software Development Life Cycle (SDLC). It is the process of modifying and updating software application after its delivery to improve its performance, correct any new defects and adapt the product according to the modified environment. The purpose of software maintenance is to preserve the value of software over time, which can accomplished by:
Expanding the customer base.
Enhancing software’s capabilities.
Omitting obsolete capabilities.
Employing newer technology.
Categories of Software Maintenance:
Basic software maintenance includes optimization, error correction, and enhancement of existing features, which combine together to make the software abreast with the latest changes and demands of the software industry. However, the type of maintenance can vary in a software based on its nature and requirement. In order to make the process of maintaining software more profiting and beneficial, Software Maintenance is divided into four main categories:
Corrective Maintenance: Corrective Maintenance is a reactive process that is focused on fixing failures in the system. It refers to the modification and enhancement done to the coding and design of a software to fix errors or defects detected by the user or concluded by error user report. This type of maintenance is initiated in the system to resolve any new or missed defects in the software. Corrective Maintenance is further divided into two types:
Adaptive Maintenance: Adaptive Maintenance is initiated as a consequence of internal needs, like moving the software to a different hardware or software platform compiler, operating system or new processor and to match the external completion and requirements. The main goal of Adaptive Maintenance is to keep the software program up-to-dated and to meet the needs and demands of the user and the business.
Perfective Maintenances: Here enhancements, modifications and updates are done in order to keep the software usable for a long period of time. It aims at achieving reduced costs in using the system and increasing its maintainability. The process of perfective maintenance includes making the product faster, cleaner structured, improving its reliability and performance, adding new features, and more.
Preventive Maintenance: Most commonly known as Software Re-engineering, the purpose of this type of maintenance is to prevent future problems in the software by making it more understandable, enhancing its features and improving its existing qualities, which will facilitate future maintenance work. The objective of Preventive Maintenance is to attend problems, which may seem insignificant but can cause serious issues in the future.
Challenges in Software Maintenance:
Maintaining software is though considered essential these days, it is not a simple procedure and entails extreme efforts. The process requires knowledgeable experts who are well versed in latest software engineering trends and can perform suitable programming and testing. Furthermore, the programmers can face several challenges while executing software maintenance which can make the process time consuming and costly. Some of the challenges encountered while performing software maintenance are:
Finding the person or developer who constructed the program can be difficult and time consuming.
Changes are made by an individual who is unable to understand the program clearly.
The systems are not maintained by the original authors, which can result in confusion and misinterpretation of changes executed in the program.
Information gap between user and the developer can also become a huge challenge in software maintenance.
The biggest challenge in software maintenance is when systems are not designed for changes.
Process of Software Maintenance:
Software Maintenance is an important phase of Software Development Life Cycle (SDLC), and it is implemented in the system through a proper software maintenance process, known as Software Maintenance Life Cycle (SMLC). This life cycle consists of seven different phases, each of which can be used in iterative manner and can be extended so that customized items and processes can be included. These seven phases of Software Maintenance process are:
In this phase, the requests for modifications in the software are identified and analysed. Each of the requested modification is then assessed to determine and classify the type of maintenance activity it requires. This is either generated by the system itself, via logs or error messages, or by the user.
The feasibility and scope of each validated modification request are determined and a plan is prepared to incorporate the changes in the software. The input attribute comprises validated modification request, initial estimate of resources, project documentation, and repository information. The cost of modification and maintenance is also estimated.
The new modules that need to be replaced or modified are designed as per the requirements specified in the earlier stages. Test cases are developed for the new design including the safety and security issues. These test cases are created for the validation and verification of the system.
In the implementation phase, the actual modification in the software code are made, new features that support the specifications of the present software are added, and the modified software is installed. The new modules are coded with the assistance of structured design created in the design phase.
System Testing Phase:
Regression testing is performed on the modified system to ensure that no defect, error or bug is left undetected. Furthermore, it validates that no new faults are introduced in the software as a result of maintenance activity. Integration testing is also carried out between new modules and the system.
Acceptance Testing Phase:
Acceptance testing is performed on the fully integrated system by the user or by the third party specified by the end user. The main objective of this testing is to verify that all the features of the software are according to the requirements stated in the modification request.
Once the acceptance testing is successfully accomplished, the modified system is delivered to the users. In addition to this, the user is provided proper consisting of manuals and help files that describe the operation of the software along with its hardware specifications. The final testing of the system is done by the client after the system is delivered.
Software Maintenance Models:
To overcome internal as well as external problems of the software, Software maintenance models are proposed. These models use different approaches and techniques to simplify the process of maintenance as well as to make is cost effective. Software maintenance models that are of most importance are:
This is an ad hoc approach used for maintaining the software system. The objective of this model is to identify the problem and then fix it as quickly as possible. The advantage is that it performs its work quickly and at a low cost. This model is an approach to modify the software code with little consideration for its impact on the overall structure of the software system.
Iterative Enhancement Model:
Iterative enhancement model considers the changes made to the system are iterative in nature. This model incorporates changes in the software based on the analysis of the existing system. It assumes complete documentation of the software is available in the beginning. Moreover, it attempts to control complexity and tries to maintain good design.
Iterative Enhancement Model is divided into three stages:
Analysis of software system.
Classification of requested modifications.
Implementation of requested modifications.
The Re-use Oriented Model:
The parts of the old/existing system that are appropriate for reuse are identified and understood, in Reuse Oriented Model. These parts are then go through modification and enhancement, which are done on the basis of the specified new requirements. The final step of this model is the integration of modified parts into the new system.
Boehm’s Model performs maintenance process based on the economic models and principles. It represents the maintenance process in a closed loop cycle, wherein changes are suggested and approved first and then are executed.
Taute Maintenance Model:
Named after the person who proposed the model, Taute’s model is a typical maintenance model that consists of eight phases in cycle fashion. The process of maintenance begins by requesting the change and ends with its operation. The phases of Taute’s Maintenance Model are:
Change request Phase.
Software maintenance has recently gained its importance in the software development process. It is one such practise which is immensely beneficial. Executed through various techniques and software maintenance models, it performs functions that fixes new or existing bugs and defects in the system and provides improved performance with regular upgrades.
Through software maintenance, software systems can adapt to the changing technical environment and latest market trends. It also helps in predicting cash flow and controlling software expenditure. Hence, by adopting software maintenance developers can provide clients services that are up-to-date with the latest trends and is extremely beneficial.