Difference between revisions of "Chapter 5: Software Maintenance"

From SWEBOK
Jump to: navigation, search
(Software Maintenance Fundamentals)
(Categories of Maintenance)
Line 206: Line 206:
 
|-
 
|-
 
|
 
|
|Correction
+
|'''Correction'''
|Enhancement
+
|'''Enhancement'''
 
|-
 
|-
 
|Proactive
 
|Proactive

Revision as of 18:22, 24 August 2015

Acronyms
MR
Modification Request
PR
Problem Report
SCM
Software Configuration Management
SLA
Service-Level Agreement
SQA
Software Quality Assurance
V&V
Verification and Validation
Introduction

Software development efforts result in the delivery of a software product that satisfies user requirements. Accordingly, the software product must change or evolve. Once in operation, defects are uncovered, operating environments change, and new user requirements surface. The maintenance phase of the life cycle begins following a warranty period or postimplementation support delivery, but maintenance activities occur much earlier.

Software maintenance is an integral part of a software life cycle. However, it has not received the same degree of attention that the other phases have. Historically, software development has had a much higher profile than software maintenance in most organizations. This is now changing, as organizations strive to squeeze the most out of their software development investment by keeping software operating as long as possible. The open source paradigm has brought further attention to the issue of maintaining software artifacts developed by others.

In this Guide, software maintenance is defined as the totality of activities required to provide cost-effective support to software. Activities are performed during the predelivery stage as well as during the postdelivery stage. Predelivery activities include planning for postdelivery operations, maintainability, and logistics determination for transition activities [1*, c6s9]. Postdelivery activities include software modification, training, and operating or interfacing to a help desk.

The Software Maintenance knowledge area (KA) is related to all other aspects of software engineering. Therefore, this KA description is linked to all other software engineering KAs of the Guide.

Breakdown of Topics for Software Maintenance

The breakdown of topics for the Software Maintenance KA is shown in Figure 5.1.

1 Software Maintenance Fundamentals

This first section introduces the concepts and terminology that form an underlying basis to understanding the role and scope of software maintenance. The topics provide definitions and emphasize why there is a need for maintenance. Categories of software maintenance are critical to understanding its underlying meaning.

1.1 Definitions and Terminology

The purpose of software maintenance is defined in the international standard for software maintenance: ISO/IEC/IEEE 14764 [1*].1 In the context of software engineering, software maintenance is essentially one of the many technical processes.

The objective of software maintenance is to modify existing software while preserving its integrity. The international standard also states the importance of having some maintenance activities prior to the final delivery of software (predelivery activities). Notably, IEEE 14764 emphasizes the importance of the predelivery aspects of maintenance—planning, for example.

1.2 Nature of Maintenance

Software maintenance sustains the software product throughout its life cycle (from development to operations). Modification requests are logged and tracked, the impact of proposed changes is determined, code and other software artifacts are modified, testing is conducted, and a new version of the software product is released. Also, training and daily support are provided to users. The term maintainer is defined as an organization that performs maintenance activities. In this KA, the term will sometimes refer to individuals who perform those activities, contrasting them with the developers.

IEEE 14764 identifies the primary activities of software maintenance as process implementation, problem and modification analysis, modification implementation, maintenance review/acceptance, migration, and retirement. These activities are discussed in section 3.2, Maintenance Activities.

Maintainers can learn from the developers’ knowledge of the software. Contact with the developers and early involvement by the maintainer helps reduce the overall maintenance effort. In some instances, the initial developer cannot be reached or has moved on to other tasks, which creates an additional challenge for maintainers. Maintenance must take software artifacts from development (for example, code or documentation) and support them immediately, then progressively evolve/maintain them over a software life cycle.

1.3 Need for Maintenance

Maintenance is needed to ensure that the software continues to satisfy user requirements. Maintenance is applicable to software that is developed using any software life cycle model (for example, spiral or linear). Software products change due to corrective and noncorrective software actions. Maintenance must be performed in order to

  • correct faults;
  • improve the design;
  • implement enhancements;
  • interface with other software;
  • adapt programs so that different hardware, software, system features, and telecommunications facilities can be used;
  • migrate legacy software; and
  • retire software.

Five key characteristics comprise the maintainer’s activities:

  • maintaining control over the software’s day-to-day functions;
  • maintaining control over software modification;
  • perfecting existing functions;
  • identifying security threats and fixing security vulnerabilities; and
  • preventing software performance from degrading to unacceptable levels.

1.4 Majority of Maintenance Costs

Maintenance consumes a major share of the financial resources in a software life cycle. A common perception of software maintenance is that it merely fixes faults. However, studies and surveys over the years have indicated that the majority, over 80 percent, of software maintenance is used for noncorrective actions [2*, figure 4.1]. Grouping enhancements and corrections together in management reports contributes to some misconceptions regarding the high cost of corrections. Understanding the categories of software maintenance helps to understand the structure of software maintenance costs. Also, understanding the factors that influence the maintainability of software can help to contain costs. Some environmental factors and their relationship to software maintenance costs include the following:

  • Operating environment refers to hardware and software.
  • Organizational environment refers to policies, competition, process, product, and personnel.

1.5 Evolution of Software

Software maintenance in terms of evolution was first addressed in the late 1960s. Over a period of twenty years, research led to the formulation of eight “Laws of Evolution.” Key findings include a proposal that maintenance is evolutionary development and that maintenance decisions are aided by understanding what happens to software over time. Some state that maintenance is continued development, except that there is an extra input (or constraint)–in other words, existing large software is never complete and continues to evolve; as it evolves, it grows more complex unless some action is taken to reduce this complexity.

1.6 Categories of Maintenance

Three categories (types) of maintenance have been defined: corrective, adaptive, and perfective [2*, c4s3]. IEEE 14764 includes a fourth category–preventative.

  • Corrective maintenance: reactive modification (or repairs) of a software product performed after delivery to correct discovered problems. Included in this category is emergency maintenance, which is an unscheduled modification performed to temporarily keep a software product operational pending corrective maintenance.
  • Adaptive maintenance: modification of a software product performed after delivery to keep a software product usable in a changed or changing environment. For example, the operating system might be upgraded and some changes to the software may be necessary.
  • Perfective maintenance: modification of a software product after delivery to provide enhancements for users, improvement of program documentation, and recoding to

improve software performance, maintainability, or other software attributes.

  • Preventive maintenance: modification of a software product after delivery to detect and correct latent faults in the software product before they become operational faults.

IEEE 14764 classifies adaptive and perfective maintenance as maintenance enhancements. It also groups together the corrective and preventive maintenance categories into a correction category, as shown in Table 5.1.

Table 5.1. Software Maintenance Categories
Correction Enhancement
Proactive Preventive Perfective
Reactive Corrective Adaptive

2 Key Issues in Software Maintenance

2.1 Technical Issues

2.1.1 Limited Understanding

2.1.2 Testing

2.1.3 Impact Analysis

2.1.4 Maintainability

2.2 Management Issues

2.2.1 Alignment with Organizational Objectives

2.2.2 Staffing

2.2.3 Process

2.2.4 Organizational Aspects of Maintenance

2.2.5 Outsourcing

2.3 Maintenance Cost Estimation

2.3.1 Cost Estimation

2.3.2 Parametric Models

2.3.3 Experience

2.4 Software Maintenance Measurement

2.4.1 Specific Measures

3 Maintenance Process

3.1 Maintenance Processes

3.2 Maintenance Activities

3.2.1 Unique Activities

3.2.2 Supporting Activities

3.2.3 Maintenance Planning Activities

3.2.4 Software Configuration Management

3.2.5 Software Quality

4 Techniques for Maintenance

4.1 Program Comprehension

4.2 Reengineering

4.3 Reverse Engineering

4.4 Migration

4.5 Retirement

5 Software Maintenance Tools

References

[1] IEEE Std., 14764-2006 (a.k.a.ISO/IEC 14764:2006) Standard for Software Engineering—Software Life Cycle Processes-Maintenance, IEEE, 2006.

[2] P. Grubb and A.A. Takang, Software Maintenance: Concepts and Practice, 2th ed., World Scientific Publishing, 2003.

[3] H.M. Sneed, "Offering Software Maintenance as an Offshore Service", Proc. IEEE Int'l Conf. Software Maintenance (ICSM 08), IEEE, 2008, pp. 1–5.

[4] J.W. Moore, The Road Map to Software Engineering: A Standards-Based Guide, Wiley-IEEE Computer Society Press, 2006.

[5] IEEE, ISO/IEC/IEEE 24765:2010 Systems and Software Engineering—Vocabulary, ISO/IEC/IEEE, IEEE, 2010.

[6] A. April and A. Abran, Software Maintenance Management: Evaluation and Continuous Improvement, Wiley-IEEE Computer Society Press, 2008.

[7] M. Kajko-Mattsson, Towards a Business Maintenance Model, Proc. Int’l Conf. Software Maintenance, IEEE, 2001, pp. 500–509.