Software maintenance indicates any changes made to software product once it is delivered to the customer. Maintenance is generally required to correct errors, enhance features, port to new platforms, etc.
Maintenance is inevitable for almost any kind of products.
Software maintenance activity is generally in demand as the user community want to see the existing software product run on newer platforms or environment with enhanced features. When hardware platform changes and a software product performs some low level functions, maintenance becomes necessary.
Also when the the support environment of the product changes, the software product requires rework to cope with the newer interface.
In short, every software product continues to evolve after its development through maintenance effort.
In sdlc phases, maintenance phase normally requires maximum effort.
On average 60% of the total life cycle effort is spent entirely on maintenance.
Types of software maintenance
Software maintenance can be of three types:
1. Corrective maintenance
Corrective maintenance is required to rectify the bugs observed while the system is in use.
2. Adaptive maintenance
Adaptive maintenance is required when the customer needs the product to run on new platforms, on new operating systems, or when they need the product to interface with new hardware or software.
3. Perfective maintenance
Perfective maintenance is required to support the new features that users want it to support, to change different functionalities of the system according to customers demands.
It may also be carried out to improve the performance of the system.
Software maintenance is a very important yet one of the most neglected areas of software engineering. It doesn't have that good image in the industry as a result bright and experienced engineers tries to keep away from maintenance activity. But it must be noted here that this task is more complicated and challenging compared to development. And simple reason for it is:
Engineers need to thoroughly understand someone else's code and then make neccesary changes on it to produce expected system.
Majority of the software systems needing maintenance are legacy one.