SOFTWARE MAINTENANCE_______________________________________________________________
Overview
                         Software maintenance in software engineering is the modification
                         of a software product after delivery to correct faults, to improve
                         performance or other attributes.
                         A common perception of maintenance is that it merely involves
                         fixing defects. However, one study indicated that over 80% of
                         maintenance effort is used for non-corrective actions. This
                         perception is perpetuated by users submitting problem reports that
                         in reality are functionality enhancements to the system. More
                         recent studies put the bug-fixing proportion closer to 21%.
History
                         Software maintenance and evolution of systems were first
                         addressed by Meir M. Lehman in 1969. Over a period of twenty
                         years, his research led to the formulation of Lehman's Laws
                         (Lehman 1997). Key findings of his research include that
                         maintenance is really evolutionary development and that
                         maintenance decisions are aided by understanding what happens to
                         systems (and software) over time. Lehman demonstrated that
                         systems continue to evolve over time. As they evolve, they grow
                         more complex unless some action, such as code refactoring, is
                         taken to reduce the complexity.
                         In the late 1970s, a famous and widely cited survey study by
                         Lientz and Swanson, the very high fraction of life-cycle costs that
                         were being expended on maintenance was exposed. They
                         categorized maintenance activities into four classes:
                                   Adaptive – modifying the system to cope with changes in
                                    the software environment (DBMS, OS)
                                   Perfective – implementing new or changed user
                                    requirements which concern functional enhancements to
                                    the software
                                   Corrective – diagnosing and fixing errors, possibly ones
                                    found by users
                                   Preventive – increasing software maintainability or
                                    reliability to prevent problems in the future
                         The survey showed that around 75% of the maintenance effort was
                         on the first two types, and error correction consumed about 21%.
                         Many subsequent studies suggest a similar magnitude of the
                         problem. Studies show that contribution of end user is crucial
                         during the new requirement data gathering and analysis. And this
                                                                                               1
INTRO TO SOFTWARE ENGINEERING
SOFTWARE MAINTENANCE_______________________________________________________________
                          is the main cause of any problem during software evolution and
                          maintenance. So software maintenance is important because it
                          consumes a large part of the overall lifecycle costs and also the
                          inability to change software quickly and reliably means that
                          business opportunities are lost.
Importance of software maintenance
                          The key software maintenance issues are both managerial and
                          technical. Key management issues are:
                                 1.   Alignment with customer priorities;
                                 2.   Staffing;
                                 3.   Which organization does maintenance;
                                 4.   Estimating costs.
                          Key technical issues are:
                                 1.   Limited understanding;
                                 2.   Impact analysis;
                                 3.   Testing;
                                 4.   Maintainability measurement.
                          Software maintenance is a very broad activity that includes error
                          correction, enhancements of capabilities, deletion of obsolete
                          capabilities, and optimization. Because change is inevitable,
                          mechanisms must be developed for evaluation, controlling and
                          making modifications. The purpose is to preserve the value of
                          software over time. The value can be enhanced by expanding the
                          customer base, meeting additional requirements, making it easier
                          to use and more efficient and employing newer technology.
                          Maintenance may span for 20 years, whereas development may
                          last1-2 years.
Software maintenance planning
                          An integral part of software is the maintenance one, which requires
                          an accurate maintenance plan to be prepared during the software
                          development. It should specify how users will request
                          modifications or report problems. The budget should include
                          resource and cost estimates. A new decision should be addressed
                          for the developing of every new system feature and its quality
                          objectives. The software maintenance, which can last for 5–6 years
                          (or even decades) after the development process, calls for an
                          effective plan which can address the scope of software
                          maintenance, the tailoring of the post-delivery/deployment process,
                                                                                              2
INTRO TO SOFTWARE ENGINEERING
SOFTWARE MAINTENANCE_______________________________________________________________
                           the designation of who will provide maintenance, and an estimate
                           of the life-cycle costs. The selection of proper enforcement of
                           standards is the challenging task right from early stage of software
                           engineering which has not got definite importance by the
                           concerned stakeholders.
Software maintenance processes
             This section describes the six software maintenance processes as:
                        1. The implementation process contains software preparation and
                           transition activities, such as the conception and creation of the
                           maintenance plan; the preparation for handling problems identified
                           during development; and the follow-up on product configuration
                           management.
                        2. The problem and modification analysis process, which is executed
                           once the application has become the responsibility of the
                           maintenance group. The maintenance programmer must analyze
                           each request, confirm it (by reproducing the situation) and check
                           its validity, investigate it and propose a solution, document the
                           request and the solution proposal, and finally, obtain all the
                           required authorizations to apply the modifications.
                        3. The process considering the implementation of the modification
                           itself.
                        4. The process acceptance of the modification, by confirming the
                           modified work with the individual who submitted the request, in
                           order to make sure the modification provided a solution.
                        5. The migration process (platform migration, for example) is
                           exceptional, and is not part of daily maintenance tasks. If the
                           software must be ported to another platform without any change in
                           functionality, this process will be used and a maintenance project
                           team is likely to be assigned to this task.
                        6. Finally, the last maintenance process, also an event which does not
                           occur on a daily basis, is the retirement of a piece of software.
                        There are a number of processes, activities and practices that are
                        unique to maintainers. For example:
                               Transition: a controlled and coordinated sequence of activities
                                during which a system is transferred progressively from the
                                developer to the maintainer;
                               Service Level Agreements (SLAs) and specialized (domain-
                                specific) maintenance contracts negotiated by maintainers;
                               Modification Request and Problem Report Help Desk: a
                                problem-handling process used by maintainers to prioritize,
                                documents and route the requests they receive;
                                                                                                  3
INTRO TO SOFTWARE ENGINEERING
SOFTWARE MAINTENANCE_______________________________________________________________
Categories of maintenance in ISO/IEC 14764
                          E.B. Swanson initially identified three categories of maintenance:
                          corrective, adaptive, and perfective. These have since been updated
                          and ISO/IEC 14764 presents:
                               Corrective maintenance: Reactive modification of a software
                                product performed after delivery to correct discovered
                                problems.
                               Adaptive maintenance: Modification of a software product
                                performed after delivery to keep a software product usable in a
                                changed or changing environment.
                               Perfective maintenance: Modification of a software product
                                after delivery to improve performance or maintainability.
                               Preventive maintenance: Modification of a software product
                                after delivery to detect and correct latent faults in the software
                                product before they become effective faults.
                          There is also a notion of pre-delivery/pre-release maintenance
                          which is all the good things you do in order to lower the total cost
                          of ownership of the software. Things like compliance with coding
                          standards that includes software maintainability goals. The
                          management of coupling and cohesion of the software. The
                          attainment of software supportability goals (SAE JA1004, JA1005
                          and JA1006 for example). It is worth noting that some academic
                          institutions are carrying out research to quantify the cost to
                          ongoing software maintenance due to the lack of resources, such as
                          design documents and system/software comprehension training
                          and resources (multiply costs by approx. 1.5-2.0 where there is no
                          design data available).
Maintenance Factors
                          Impact of key adjustment factors on maintenance (sorted in order
                          of maximum positive impact)
                               Maintenance Factors               Plus Range
                         Maintenance specialists                 35%
                         High staff experience                   34%
                         Table-driven variables and data         33%
                         Low complexity of base code             32%
                         Y2K and special search engines          30%
                         Code restructuring tools                29%
                         Re-engineering tools                    27%
                                                                                                 4
INTRO TO SOFTWARE ENGINEERING
SOFTWARE MAINTENANCE_______________________________________________________________
                         High level programming languages 25%
                         Reverse engineering tools        23%
                         Complexity analysis tools        20%
                         Defect tracking tools            20%
                         Y2K “mass update” specialists    20%
                         Automated change control tools   18%
                         Unpaid overtime                  18%
                         Quality measurements             16%
                         Formal base code inspections     15%
                         Regression test libraries        15%
                         Excellent response time          12%
                         Annual training of > 10 days     12%
                         High management experience       12%
                         HELP desk automation             12%
                         No error prone modules           10%
                         On-line defect reporting         10%
                         Productivity measurements        8%
                         Excellent ease of use            7%
                         User satisfaction measurements   5%
                         High team morale                 5%
                                         Sum                503%
                         Not only are error-prone modules troublesome, but many other
                         factors can degrade performance too. For example, very complex
                         “spaghetti code” is quite difficult to maintain safely. A very
                         common situation which often degrades performance is lack of
                         suitable maintenance tools, such as defect tracking software,
                         change management software, and test library software. Below
                         describe some of the factors and the range of impact on software
                         maintenance.
                         Impact of key adjustment factors on maintenance (sorted in order
                         of maximum negative impact)
                                Maintenance Factors         Minus Range
                         Error prone modules                -50%
                         Embedded variables and data        -45%
                         Staff inexperience                 -40%
                         High code complexity               -30%
                         No Y2K of special search engines   -28%
                                                                                            5
INTRO TO SOFTWARE ENGINEERING
SOFTWARE MAINTENANCE_______________________________________________________________
                         Manual change control methods -27%
                         Low level programming languages -25%
                         No defect tracking tools          -24%
                         No Y2K “mass update” specialists -22%
                         Poor ease of use                  -18%
                         No quality measurements           -18%
                         No maintenance specialists        -18%
                         Poor response time                -16%
                         No code inspections               -15%
                         No regression test libraries      -15%
                         No help desk automation           -15%
                         No on-line defect reporting       -12%
                         Management inexperience           -15%
                         No code restructuring tools       -10%
                         No annual training                -10%
                         No reengineering tools            -10%
                         No reverse-engineering tools      -10%
                         No complexity analysis tools      -10%
                         No productivity measurements      -7%
                         Poor team morale                  -6%
                         No user satisfaction measurements -4%
                         No unpaid overtime                0%
                                        Sum                   -500%
                                                                                  6
INTRO TO SOFTWARE ENGINEERING