SOFTWARE MAINTENANCE

  The term“software maintenance”is used to describe the software engineering activities that occur following delivery of a software product to the customer.The maintenance phase of the software life cycle is the time period in which a software product performs useful work.Typically,the development cycle for a software product spans 1 or 2 years,while the maintenance phase spans 5 to 10 years.

  Maintenance activities involve making enhancements[1] to software products,adapting products to new environments,and correcting problems.Software product enhancement may involve providing new functional capabilities,improving user displays and modes of interaction,upgrading external documents and internal documentation,or upgrading the performance characteristics of a system.Adaptation of software to a new environment may involve moving the software to a different machine,or for instance,modifying the software to accommodate a new telecommunications protocol or an additional disk drive.Problem correction involves modification and revalidation of software to correct errors.Some errors require immediate attention,some can be corrected on a scheduled,periodic[2 ]basis,and others are known but never corrected.

  It is well established that maintenance activities consume a large portion of the total life-cycle budget[3].It is not uncommon for software maintenance to account for 70 percent of total software life-cycle costs(with development requiring 30 percent).As a general rule of thumb[4],the distribution of effort for software maintenance includes 60 percent of the maintenance budget for enhancement,and 20 percent each for adaptation and correction.

  If maintenance consumes 70 percent of the total life-cycle effort devoted to a particular software product,and if 60 percent of maintenance goes to enhancing the product,then 42 percent of the total life-cycle effort for that product is dedicated to product enhancement.Given this perspective,it is apparent that the product delivered to the customer at the end of the development cycle is only the initial version of the system.Some authors have suggested that the appropriate life-cycle model for software is development→evolution→evolution→evolution…

  This perspective makes it apparent that the primary goal of software development should be production of maintainable software systems.Maintainability,like all high-level quality attributes,can be expressed in terms of attributes that are built into[5] the product.The primary product attributes that contribute to software maintainability are clarity,modularity,and good internal documentation of the source code,as well as appropriate supporting documents.

It should also be observed that software maintenance is a microcosm [6] of the software development cycle.Enhancement and adaptation of software reinitiate development in the analysis phase,while correction of a software problem may reinitiate the development cycle in the analysis phase,the design phase,or the implementation phase[7].Thus,all of the tools and techniques used to develop software are potentially useful for software maintenance.

  Analysis activities during software maintenance involve understanding the scope and effect of a desired change,as well as the constraints on making the change.Design during maintenance involves redesigning the product to incorporate the desired changes.The changes must then be implemented,internal documentation of the code must be updated,and new test cases must be designed to assess the adequacy of the modification.Also,the supporting documents(requirements,design specifications,test plan,principles of operation,user’s manual,crossreference directories,etc.)must be updated to reflect the changes.Updated versions of the software(code and supporting documents)must then be distributed to various customer sites,and configuration control records for each site must be updated.

  All of these tasks must be accomplished using a systematic,orderly approach to tracking and analysis of change requests,and careful redesign,reimplementation,revalidation,and redocumentation of the changes.Otherwise,the software product will quickly degrade as a result of the maintenance process.It is not unusual for a well designed,properly implemented,and adequately documented initial version of a software product to become unmaintainable due to inadequate maintenance procedures.This can result in situations in which it becomes easier and less expensive to reimplement a module or subsystem than to modify the existing version.Software maintenance activities must not destroy the maintainability of software.A small change in the source code often requires extensive changes to the test suite and the supporting documents.Failure to recognize the true cost of a“small change”in the source code is one of the most significant problems in software maintenance.

NOTES

  [1] enhancement:增强。

  [2] periodic:定期的。

  [3] budget:预算。

  [4] rule of thumb:经验法则。

  [5] build into:内含在,构建在……中。

  [6] microcosm:微观世界,缩影。

  [7] reinitiate:回置,回到。

KEYWORDS
  software maintenance                 软件维护

  telecommunication protocol              远程通信协议


翻译:


  术语“软件维护”用来描述在软件产品交付给用户以后所进行的​​软件工程​​活动。软件生存周期维护阶段指软件产品完成有效工作的时间段。典型的情形是:一个软件产品的开发周期持续1年或2年,而它的维护阶段则历时5至10年。

  维护活动包含增强软件产品、调整软件产品以适应新的环境和纠正问题。软件产品增强可以包含:提供新的功能,改进用户显示和交互模式,升级外部文档和内部文件说明,或升级系统的性能指标。软件对新环境的适应可以包括把软件移植到不同的机器,或者,例如修改软件以适合于新的远程通信协议或添加的磁盘驱动器。问题的纠正包括修改和重新确认软件以纠正错误。有些错误需要立即采取措施,有些则可按计划定期纠正,而另一些错误虽然测知但却永远未作纠正。

  维护活动在整个生存周期预算中占很大比例是公认的。它占软件生存周期费用的70%是常见的(而软件开发费占30%)。按一般经验法则,软件维护预算分配是:60%用于功能增强;适应新环境和纠错各占20 %。

  如果维护要花费某一软件产品整个生存周期的70%,而维护费用的60%用于此产品的功能增强,那么,产品功能加强要占产品整个生存周期的42%。据此观点,很明显产品在开发周期结束时交给用户的仅仅是系统的最初版本。有一些作者已建议比较合适的软件生存周期模型应该是开发——进化一一进化……

  由此观点可见软件开发的主要目标应是生产可维护的软件系统产品。像所有高层质量属性一样,可维护性可用包含在产品内部的属性来表达。影响软件可维护性的主要产品属性有明晰度、模块性、良好的内部源代码文档说明以及适当的支持文档。

  还应看到软件维护是软件开发周期的缩影。软件的功能增强和适应使开发重新回到分析阶段,而软件纠错可使开发周期回到分析阶段、设计阶段或实现阶段。因此,所有用于开发软件的工具和技术对软件维护都有潜在的用途。

  软件维护的分析活动包括了解希望所做的更改的范围和影响,以及对所作更改的限制条件。维护阶段的设计包括根据想作的更改来重新设计产品,然后必须实现更改,代码的内部文档说明必须更新,必须设计新的测试用例以评估修改的恰当性。还必须更新支持文档(需求、设计规格说明、测试计划、操作原理、用户手册、交叉参考目录等)以反映所做的更改。更新后的软件版本(代码和支持文档)必须分发到各个用户站点,各站点的配置控制记录必须更新。

  所有这些任务都必须通过系统的、有条理的方法去跟踪和分析更改请求,仔细地重新设计,重新实现,重新确认和重新对所作更改编制文档来完成。否则,软件产品将因为维护过程而很快降级。常常有设计良好、实现合理和有合适文档的初版软件产品因不适当的维护过程而变得不可维护,这会导致重新实现一个模块或子系统比修改已存在版本更容易和花费更少。软件维护活动一定不要损坏软件的可维护性。源代码中的一个细微更改往往需要测试套件和支撑文档作大规模变动。忽视源代码中所谓“小小的变动”到头来付出代价是软件维护中最重大的问题之一。


EXERCISES
1.Multiple choices.
(1)Typically,the maintenance phase spans            

     a.1 or 2 years                  b.2 or 3 years

     c.3—4 years                   d.5—10 years

(2)Analysis activities of software maintenance involve            

  a.understanding the scope of a desired change

  b.understanding the effect of a desired change

  c.understanding the constraints on making the change

  d.redesigning the product

(3)Consumption of the total life-cycle effort in software maintenance is             that in software development.

  a.less than                     b.larger than

  c.equal or less than                 d.equal or larger than

(4)Supporting documents include            

  a.user’s manual              b.design specification

  c.principles of operation          d.test plan

(5)In an unmaintainable product it is possible to reimplement a module or subsystem than to modify the existing version.

  a.more difficult     b.easier

    c.more expensive      d.less expensive

(6)Correction of a software problem may reinitiate the development cycle in the phase.

  a.development      b.implementation

  c.analysis       d.design

(7)Maintenance activities include            

  a.making enhancements to software products

  b.developing a new software product

  c.correcting problems

  d.adapting products to new environments

(8)Enhancing a software product may consume             percent of the total life-cycle effort.

  a.70    b.60    c.50    d.42

(9)Adaptation of software to a new environment may involve            

  a.modifying the software to accommodate a new telecommunications protocol

  b.moving the software to a different machine

  c.providing mew functional capabilities

  d.modifying the software to accommodate an additional disk drive

(10)All of software maintenance tasks must be accomplished using a systematic,orderly approach to            

    a.careful redesign     b.redocumentation

    c.reimplementation     d.revalidation

2.Fill in the blanks with appropriate words or phrases.

(1)After a software product has been delivered to the customers             should be provided.

(2)Updated versions of the software must then be distributed to           

(3)Problem correction involves              to correct errors.

(4)Design during maintenance involves             to incorporate the desired changes.

(5)Software maintenance is a              of the software development cycle.

(6)Primary goal of software development should be production of            

(7)The product of software delivered to the customer at the end of the development cycle is only            

(8)             are potentially useful for software maintenance.

(9)A small change in the source code often requires              to the test suite.

(10)The primary product attributes of software maintainability include            

    a.modification and revalidation of software

    b.all of the tools and techniques used to develop software

    c.software maintenance

    d.maintainable software systems

    e.clarity,modularity,and good internal documentation of source code

    f.various customer sites

    g.extensive changes

    h.microcosm

    i.the initial version of the system

    j.redesigning the product


答案:

 1.

(1)d   

(2)a,b,c  

(3)b   

(4)a,b,c,d

(5)b,d  

(6)b,c,d  

(7)a,c,d  

(8)d

(9)a,b,d  

(10)a,b,c,d

2.

(1)c   

(2)f   

(3)a   

(4)j

(5)h   

(6)d   

(7)i   

(8)b

(9)g   

(10)e