31 Software Maintenance

R. Baskaran

 

SOFTWARE MAINTENANCE

 

Software maintenance is the process of modification or making changes in the system after delivery to overcome errors and faults in the system that were not uncovered during the early stages of the development cycle.

 

LEARNING OBJECTIVES 

 

• To study on why maintenance is an issue.

• To study on reverse engineering and limitations.

• To organize data.

• To check what the system does.

 

SOFTWARE MAINTENANCE 

 

The IEEE Standard for Software Maintenance (IEEE 1219) gave the definition for software maintenance as “The process of modifying a software system or component after delivery to correct faults, improves performance or other attributes, or adapt to a changed environment.”

 

 

The IEEE/EIA 12207 Standard defines maintenance as modification to code and associated documentation due to a problem or the need for improvement.

 

Nature of Maintenance 

 

Modification requests are logged and tracked, the impact of proposed changes are determined, code and other software artifacts are modified, testing is conducted, and a new version of the software product is released. Maintainers can learn from the developer´s knowledge of the software.

 

Need for Maintenance 

 

Maintenance must be performed in order to:

 

• Correct faults.

• Improve the design.

• Implement enhancements.

• Interface with other systems.

• Adapt programs so that different hardware, software, system features, and telecommunications facilities can be used.

• Migrate legacy software.

• Retire software

 

Tasks of a Maintainer

 

The maintainer does the following functions:

 

•  Maintain control over the software´s day-to-day functions.

•  Maintain control over software modification.

•  Perfecting existing functions.

•  Preventing software performance from degrading to unacceptable levels.

 

Majority of Maintenance Costs 

 

Maintenance consumes a major share of software life cycle financial resources. But studies and surveys have shown that “over 80% of the maintenance effort is used for non-corrective actions. Quality of software design, construction, documentation, and testing affects software maintenance costs.

 

Evolution of Software 

 

Lehman has studied software maintenance and evolution for over 20 years, leading to ‘Lehman´s Laws’. E.g. increasing complexity — as a program is evolved, its complexity increases unless work is done to maintain or reduce it.

 

CATEGORIES OF MAINTENANCE 

 

Maintenance can be categorized into the follwing:

  • Corrective maintenance
  • Adaptive maintenance
  • Perfective maintenance
  • Preventive maintenance

 

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.

 

KEY TO MAINTENANCE 

 

The key to effective maintenance lies in development. Depending upon the development of the product the maintenance of the product is determined.

  • Higher quality Þ less (corrective) maintenance
  • Anticipating changes  Þ less (adaptive and perfective) maintenance
  • Better tuning to user needs  Þ less (perfective) maintenance
  • Less code Þ less maintenance

 

The distribution of maintenance activities are shown in the figure below:

 

Major causes of maintenance problems 

 

Some of the major factors which causes problem in maintenance is as follows:

  • Unstructured code
  • Insufficient domain knowledge
  • Insufficient documentation

 

The key issues in software maintenance include:

  • Limited Understanding
  • Shift in type of maintenance
  • Impact Analysis
  • Maintainability
  • Alignment with organizational objectives
  • Staffing
  • Process
  • Organizational aspects of maintenance
  • Outsourcing
  • Cost Estimation
  • Specific Measures

 

Limited Understanding 

 

The maintainers make changes or corrections to software that they did not write, so they should quickly understand the software. 40%-60% of the maintenance effort is devoted to understanding the software. Comprehension is difficult in the absence of documentation and when the original developers are unavailable. The maintainers must quickly understand the software and should make modifications to overcome the issues in the system.

 

Shift in type of maintenance 

 

Shift in type of maintenance over time can be projected as follows:

  • Introductory stage: emphasis on user support.
  • Growth stage: emphasis on correcting faults.
  • Maturity: emphasis on enhancements.
  • Decline: emphasis on technology changes.

 

Impact Analysis 

 

The objectives of impact analysis are:

  • Determination of the scope of the change in order to plan and implement the work.
  • Development of accurate estimates of resources needed to perform the work
  • Analysis of the cost/benefits of the requested change
  • Communication to others of the complexity of a given change”.

 

Maintainability

 

IEEE [IEEE610.12-90] defines maintainabiliy as the ease with which software can be maintained, enhanced, adapted, or corrected to satisfy specified requirements and the presence of systematic and mature processes, techniques, and tools helps to enhance the maintainability of a system.

 

Web Links

  • swebokwiki.org/Chapter_5:_Software_Maintenance
  • agile.csc.ncsu.edu/SEMaterials/MaintenanceRefactoring.pdf
  • https://www.tutorialspoint.com/software…/software_maintenance_overview.htm

 

Supporting & Reference Materials

  • Roger S. Pressman, “Software Engineering: A Practitioner’s Approach”, Fifth Edition, McGraw Hill, 2001.
  • Pankaj Jalote, “An Integrated Approach to Software Engineering”, Second Edition, Narosa Publications, 2005.
  • Ian Sommerville, “Software Engineering”, Tenth Edition, Pearson Education, 2017.