Software Engineering Body of Knowledge (v3) (2014) (811503), страница 26
Текст из файла (страница 26)
Therefore, this KA description islinked to all other software engineering KAs ofthe Guide.INTRODUCTIONBREAKDOWN OF TOPICS FORSOFTWARE MAINTENANCESoftware development efforts result in the delivery of a software product that satisfies userrequirements. Accordingly, the software productmust change or evolve. Once in operation, defectsare uncovered, operating environments change,and new user requirements surface.
The maintenance phase of the life cycle begins following awarranty period or postimplementation supportdelivery, but maintenance activities occur muchearlier.Software maintenance is an integral part of asoftware life cycle. However, it has not receivedthe same degree of attention that the other phaseshave. Historically, software development has hada much higher profile than software maintenancein most organizations. This is now changing, asorganizations strive to squeeze the most out oftheir software development investment by keeping software operating as long as possible.
Theopen source paradigm has brought further attention to the issue of maintaining software artifactsdeveloped by others.In this Guide, software maintenance is definedas the totality of activities required to providecost-effective support to software. Activities areperformed during the predelivery stage as well asThe breakdown of topics for the Software Maintenance KA is shown in Figure 5.1.1. Software Maintenance FundamentalsThis first section introduces the concepts andterminology that form an underlying basis tounderstanding the role and scope of softwaremaintenance. The topics provide definitions andemphasize why there is a need for maintenance.Categories of software maintenance are critical tounderstanding its underlying meaning.1.1. Definitions and Terminology[1*, c3] [2*, c1s2, c2s2]The purpose of software maintenance is definedin the international standard for software maintenance: ISO/IEC/IEEE 14764 [1*].1 In the contextof software engineering, software maintenance isessentially one of the many technical processes.1 For the purpose of conciseness and ease of reading, this standard is referred to simply as IEEE 14764in the subsequent text of this KA.5-15-2 SWEBOK® Guide V3.0Figure 5.1.
Breakdown of Topics for the Software Maintenance KAThe objective of software maintenance is tomodify existing software while preserving itsintegrity. The international standard also statesthe importance of having some maintenanceactivities prior to the final delivery of software(predelivery activities). Notably, IEEE 14764emphasizes the importance of the predeliveryaspects of maintenance—planning, for example.1.2. Nature of Maintenance[2*, c1s3]Software maintenance sustains the software product throughout its life cycle (from developmentto operations).
Modification requests are loggedand tracked, the impact of proposed changes isdetermined, code and other software artifacts aremodified, testing is conducted, and a new versionof the software product is released. Also, training and daily support are provided to users. Theterm maintainer is defined as an organization thatperforms maintenance activities. In this KA, theterm will sometimes refer to individuals who perform those activities, contrasting them with thedevelopers.IEEE 14764 identifies the primary activities ofsoftware maintenance as process implementation,problem and modification analysis, modificationimplementation, maintenance review/acceptance,migration, and retirement. These activities arediscussed in section 3.2, Maintenance Activities.Maintainers can learn from the developers’ knowledge of the software. Contact withthe developers and early involvement by theSoftware Maintenance 5-3maintainer helps reduce the overall maintenanceeffort.
In some instances, the initial developercannot be reached or has moved on to other tasks,which creates an additional challenge for maintainers. Maintenance must take software artifactsfrom development (for example, code or documentation) and support them immediately, thenprogressively evolve/maintain them over a software life cycle.1.3. Need for Maintenance[2*, c1s5]Maintenance is needed to ensure that the softwarecontinues to satisfy user requirements. Maintenance is applicable to software that is developedusing any software life cycle model (for example,spiral or linear). Software products change dueto 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 dayto-day functions;• maintainingcontroloversoftwaremodification;• perfecting existing functions;• identifying security threats and fixing security vulnerabilities; and• preventing software performance fromdegrading to unacceptable levels.perception of software maintenance is that itmerely fixes faults.
However, studies and surveys over the years have indicated that the majority, over 80 percent, of software maintenance isused for noncorrective actions [2*, figure 4.1].Grouping enhancements and corrections togetherin management reports contributes to some misconceptions regarding the high cost of corrections.
Understanding the categories of softwaremaintenance helps to understand the structure ofsoftware maintenance costs. Also, understandingthe factors that influence the maintainability ofsoftware can help to contain costs. Some environmental factors and their relationship to softwaremaintenance costs include the following:• Operating environment refers to hardwareand software.• Organizational environment refers to policies, competition, process, product, andpersonnel.1.5. Evolution of Software[2*, c3s5]Software maintenance in terms of evolution wasfirst addressed in the late 1960s.
Over a period oftwenty years, research led to the formulation ofeight “Laws of Evolution.” Key findings include aproposal that maintenance is evolutionary development and that maintenance decisions are aidedby understanding what happens to software overtime. Some state that maintenance is continueddevelopment, 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 someaction is taken to reduce this complexity.1.6. Categories of Maintenance[1*, c3, c6s2] [2*, c3s3.1]1.4. Majority of Maintenance Costs[2*, c4s3, c5s5.2]Three categories (types) of maintenance havebeen defined: corrective, adaptive, and perfective [2*, c4s3].
IEEE 14764 includes a fourthcategory–preventative.Maintenance consumes a major share of the financial resources in a software life cycle. A common• Corrective maintenance: reactive modification (or repairs) of a software product5-4 SWEBOK® Guide V3.0performed after delivery to correct discovered problems. Included in this categoryis emergency maintenance, which is anunscheduled modification performed to temporarily keep a software product operationalpending corrective maintenance.• Adaptive maintenance: modification of asoftware product performed after delivery tokeep a software product usable in a changedor changing environment.
For example,the operating system might be upgradedand some changes to the software may benecessary.• Perfective maintenance: modification of asoftware product after delivery to provideenhancements for users, improvement ofprogram documentation, and recoding toimprove software performance, maintainability, or other software attributes.• Preventive maintenance: modification of asoftware product after delivery to detect andcorrect latent faults in the software productbefore they become operational faults.IEEE 14764 classifies adaptive and perfectivemaintenance as maintenance enhancements.
Italso groups together the corrective and preventive maintenance categories into a correction category, as shown in Table 5.1.Table 5.1. Software Maintenance CategoriesProactiveReactiveCorrectionEnhancementPreventiveCorrectivePerfectiveAdaptive2. Key Issues in Software MaintenanceA number of key issues must be dealt with toensure the effective maintenance of software.Software maintenance provides unique technical and management challenges for softwareengineers—for example, trying to find a fault insoftware containing a large number of lines ofcode that another software engineer developed.Similarly, competing with software developersfor resources is a constant battle.