Abstract The dictionary defines maintenance as “The work of keeping something in proper order.” However, this definition does not necessarily fit software. Software maintenance is different from hardware maintenance because the software doesn’t physically wear out but often gets less useful with age. Software is typically delivered with undiscovered flaws. Therefore, software maintenance is: “The process of modifying existing operational software while leaving its primary functions intact.” Maintenance typically exceeds fifty percent of the systems’ life cycle cost. While software maintenance can be treated as a level of effort activity, there are consequences on quality, functionality, reliability, cost, and schedule that can be mitigated through parametric estimation techniques.
1. INTRODUCTION One of the greatest challenges facing software engineers is the management of change control. It has been estimated that the cost of change control can be between 40% and 70% of the life cycle costs. Software engineers have hoped that new languages and processes would greatly reduce these numbers; however, this has not been the case. Fundamentally this is because software is still delivered with a significant number of defects. Capers Jones estimates that there are about 5 bugs per Function Point created during Development. Watts Humphrey found “… even experienced software engineers normally inject 100 or more defects per KSLOC . Capers Jones says, “A series of studies the defect density of software ranges from 49.5 to 94.5 errors per thousand lines. Of code .” This article aims first to review the fundamentals of software maintenance and present alternative approaches to estimating software maintenance. A key element to note is that development and management decisions made during the development process can significantly affect the developmental cost and the resulting maintenance costs.
2. SOFTWARE MAINTENANCE Maintenance activities include all work carried out post-delivery and should be distinguished from block modifications which represent significant design and development effort and supersede a previously released software package. These maintenance activities can be quite diverse, and it helps to identify exactly what post-delivery activities are to be included in an estimate of maintenance effort. Maintenance activities, once defined, may be evaluated in a quite different light than when called “maintenance.” Software maintenance is different from hardware maintenance because the software doesn’t physically wear out, but software often gets less useful with age and may be delivered with undiscovered flaws. In addition to the undiscovered flaws, it is common that some known defects pass from the development organization to the maintenance group. Accurate estimation of the effort required to maintain delivered software is aided by decomposing the overall effort into the various activities that make up the whole process.
3. APPROACHING THE MAINTENANCE ISSUE Maintenance is a complicated and structured process. In his textbook, Estimating Software Intensive Systems, Richard Stuzke outlines the typical software maintenance process. The process is more than just writing new code.
Related Articles :
- Life Extension: The Modern Anti-Aging Movement – Are We Standing at the Threshold of Immortality?
- Which One Is Better – Bespoke Software or Off-The-Shelf Software?
- What’s The Definition Of Physical Health and Does Good Health Naturally Mean All Natural Is Good?
- Tips For Finding The Right Software Development Company For Customized Services
- iOS 7 Vs. Other Mobile OS – Which one stands out in Better User Experience?
The following checklist can be used to explore the realism and accuracy of maintenance requirements.
o Which pieces of software will be maintained?
o How long will the system need to be maintained?
o Are you estimating the entire maintenance problem or just incremental maintenance?
o What level of maintenance is required?
o Is that which is being called maintenance, in fact, a new development project?
o Who will do the maintenance? Will it be done organically by the original developer? Will there be a separate team? Will there be a separate organization?
o Will maintainers are using the same tools used during development? Are any proprietary tools required for maintenance?
o How much Commercial-Off-The-Shelf (COTS) is there? How tightly coupled are the interfaces?
These questions will help you ask whether maintenance is being honestly represented. o Some follow-on development may be disguised as maintenance. This will either inflate maintenance figures or else cause shortfalls if basic maintenance gets pushed aside.
o Is the activity really an incremental improvement?
o, Are healthy chunks of the original code being rewritten or changed?
o Will additional staff be brought in to perform the upgrade?
o Is the maintenance effort schedule regular and fairly flat, or does it contain staffing humps that look like new development?
4. SANITY CHECKS Although sanity checks should be sought on a year-by-year basis, they should not be attempted for overall development. This is because maintenance activities can be carried on indefinitely, rendering any life-cycle rules useless. As an example, consider Grady (p. 17):
We spend about 2 to 3 times as much effort maintaining and enhancing software as we create new software.
This and similar observations apply at an organizational level and higher, but not for a specific project. Any development group with a history will be embroiled in the long tail ends of their many delivered projects, still needing indefinite attention. Here are a few quick sanity checks:
o One maintainer can handle about 10,000 lines per year.
o Overall life-cycle effort is typically 40% development and 60% maintenance.
o Maintenance costs on average are one-sixth of yearly development costs.
o Successful systems are usually maintained for 10 to 20 years.
Finally, as in development, the amount of code that is new versus modified makes a difference. The effective size, the equivalent effort if all the work were new code, is still the key input for both development and maintenance cost estimation.
5. FIVE ALTERNATIVE APPROACHES All software estimation techniques must model the theory and the likely real world result. The real world scenario is that over time, the overlay of changes upon changes makes software increasingly difficult to maintain and thus less useful. Maintenance effort estimation techniques range from the simplistic level of effort method, through more thoughtful analysis and development practice modifications, to parametric models to use historical data to project future needs.
5.1 Level of Effort As is sometimes the case in the development environment, software maintenance can be modeled as a level of effort activity. Given the repair category activities and the great variance that they show, this approach clearly has deficiencies. In this approach, a level of effort to maintain software is based on size and type.ance