您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 第6章软件维护与再工程
六盘水师范学院孙新杰1第6章软件维护与再工程软件维护的概念软件维护的活动软件的可维护性软件再工程六盘水师范学院孙新杰26.1软件维护的概念当软件系统在实际环境被用户使用时,软件开发宣告结束。但软件总是要变化的,在软件交付使用后修改软件的过程称为软件维护。一般的软件维护不包括重大的体系结构的改变,变更的实现方法一般是修改已有的系统构件以及在必要的地方添加新构件到系统中。1、软件维护的分类•改正性维护:修改软件缺陷。•适应性维护:适应变更的操作环境(硬件、操作系统平台、其他支持软件)。•增强性维护:系统需求改变(机构因素、业务改变)。六盘水师范学院孙新杰3Lientz和Swanson(1980)对维护的工作量做过调查,如图所示。Nosek和Palvia(1990)在十年后给出的数据与此相似。适应性维护和增强性维护占了绝大部分工作量。维护是系统开发过程的自然延续,同样也涉及到需求描述、设计、实现和测试活动。六盘水师范学院孙新杰42、维护的成本维护成本和开发成本的比例在不同的应用域中是不同的。Guimaraes(1983)的研究表明,对于业务应用系统,维护成本和系统开发成本大体相等。对于嵌入式实时系统,维护费用是开发成本的四倍以上。带来高维护费用的关键因素:•人员的不稳定•合同责任•维护人员技术水平•系统结构衰退遗留系统的结构受到频繁变更的破坏;没有使用现代的软件工程技术开发;文档不全、不一致;没有采用配置管理,系统变更时在寻找系统构件的合适版本上浪费时间。六盘水师范学院孙新杰5Belady和Lehman提出了一个计算维护工作量的模型:M=p+K×e(c-d)其中M:软件维护所有的工作量;p:生产性工作量(分析、设计、编码及测试);K:经验常数;c:复杂程度;d:维护人员对软件的熟悉程度。该模型描述了影响维护的诸多因素中重要的关系。如果一个系统开发没有遵循软件工程原则,软件结构不好,c的值就会很高,再加上维护人员对软件的不熟悉,d的值很低。结果是,维护的成本呈指数级的增长。六盘水师范学院孙新杰6如何降低软件维护的费用?(1)从开发阶段的一开始就按质量标准构建系统,给予“可维护性”属性以足够的重视,这样可以使系统的整个生命周期成本减少。下图说明了这个问题。系统1在开发成本中多投入$25000,用于提高系统的可维护性,结果在整个生命周期中节省了$100000的维护成本。六盘水师范学院孙新杰7(2)采用演化式的系统开发模型(如增量、螺旋),建立能结合新需求而演化和变更的系统。(3)实施软件再工程,改善系统结构,提高可维护性。六盘水师范学院孙新杰86.2软件维护活动Pfleeger和Bohner(1990)提出了软件维护的一种模型,其中包含了度量的反馈,见下图:六盘水师范学院孙新杰9该图说明了当请求进行一些变更时要执行的活动,底部带标注的箭头代表提供的度量信息,管理人员利用这些信息决定什么时候和怎样进行变动。维护活动的一般过程:(1)变更分析分析各种变更带来的的负面影响:产生不正确或不完整的补丁软件、结构很差的设计与编码、构件不标准等等。这些负面影响使软件复杂性增加,更不易理解。因此对变更的成本、影响要进行分析。(2)理解变更,规划新版本根据变更的类型(缺陷修正、平台适应或系统增强),决定哪些变更在下一个版本中完成。六盘水师范学院孙新杰10(3)实现变更分析系统变更的需求(如有必要,可对提出的变更建立原型),对系统构件重新设计,编码、测试。软件开发中重要的配置管理思想在这里同样适用。对于紧急变更,保证更快速度完成比保证变更过程规范化更重要。(4)影响分析维护活动中改动的是需求、设计与代码构件、测试用例以及文档等工作产品。一个工作产品的质量可能影响到其他工作产品,Pfleeger(1990)提出必须建立并跟踪工作产品之间的关系,帮助我们评估一个构件的变更对所有其他构件的影响。下图展示了工作产品之间的关系及可追踪性:六盘水师范学院孙新杰11R1R2R3RiD1D2D3Dj......水平追踪连接C1C2C3Ck...T1T2T3Tn...垂直追踪连接需求设计代码测试工作产品的追踪图六盘水师范学院孙新杰12其中:每个矩形框内的结点:表示为该阶段产生的工作产品或构件。构件及之间的实线箭头:构成了度量产品的垂直跟踪图。虚线箭头连接的图:构成了系统的水平跟踪图,代表了对变更的一个过程的度量。在某一阶段内(矩形框内)的产品变更前后分别对以下度量指标求值:•结点总数•指向一个结点的边数(该结点的入度)•一个结点发出的边数(出度)•环路数。六盘水师范学院孙新杰13Pfleeger提出计算最小路径集,如果软件变更后覆盖的路径增加,或者结点的入度、出度增加,则系统会更复杂、更难于维护。利用此信息,维护组可能决定用另一种方式实现或者取消该变更。每一对工作产品:需求产品与设计产品,设计产品与代码产品,代码产品与测试用例,在两者之间形成关系子图,度量规模和复杂性关系,从而得出负面影响。还可浏览整个水平跟踪图,了解变动后总的可追踪性变得更复杂还是简单了。六盘水师范学院孙新杰146.3软件可维护性软件的可维护性、可靠性和可用性是衡量软件质量的几个主要特性,是用户最关心的几个问题。软件可维护性可定性地定义为:维护人员理解、改正、改动和改进这个软件的难易程度。1、用于衡量可维护性的软件特性:可用下面7个质量特性来衡量:可理解性、可测试性、可修改性、可靠性、可移植性、可使用性和效率。对于不同类型的维护,这7种特性的侧重点也不相同。要将这些质量要求贯彻到各开发阶段的各步骤中。软件的可维护性是产品投入运行以前各阶段针对上述各质量特性要求进行开发的最终结果。六盘水师范学院孙新杰15开发阶段可维护性因素需求分析•明确维护的范围和责任。•检查每条需求,分析维护时可能需要的支持。•明确哪些资源可能会变化以及带来的影响。•了解系统可能的扩展与变更。设计阶段•设计系统扩展、压缩或变更的方法(如将变动部分与稳定部分分离)。•做一些变更或适应不同软硬件环境的实验。•遵循高内聚、低耦合原则。•设计界面不受系统内部变更的影响。•每一个模块只完成一个功能。六盘水师范学院孙新杰16编码阶段•检查源程序与文档的一致性。•检查源程序的可理解性。•源程序是否符合编码规范。测试阶段•维护人员与测试人员一起按照需求文档和设计文档测试软件的有效性、可用性。•维护人员将收集的出错信息分类统计,为今后的维护奠定基础。六盘水师范学院孙新杰172、可维护性的度量(1)使用质量检查表度量一个可维护性的软件的7种特性。质量检查表是用于测试程序中某些质量特性是否存在的一个问题清单,检查者对表上的每一个问题,回答“是”或“否”。(2)间接地度量可维护性(面向时间的度量):•察觉到问题所耗的时间;•分析问题所用的时间;•形成修改说明所需时间;•修改所用时间;•局部测试所用时间;•整体测试所用时间;•维护复审所用时间;•完全恢复所用时间。有关设计结构和软件复杂性的度量也可间接说明软件的可维护性。六盘水师范学院孙新杰183、如何提高软件的可维护性(1)建立明确的软件质量目标。有一些特性是相互促进的,有一些是相互矛盾的,根据用途不同或计算机环境不同,确定最重要的特性。(2)使用先进的开发技术和工具。传统方法开发的软件结构紧密相关于所要完成的功能,结构不稳定。(3)建立明确的质量保证措施。在各里程碑处检查与可维护性相关的软件特性。(见下图)六盘水师范学院孙新杰19各里程碑处对与可维护性相关的软件特性的检查:(4)选择易理解、易编程的语言。(5)建立完整、一致和正确的文档。分析设计编码测试验收配置复审可靠性可移植性可用性可理解性可修改性可测试性可理解性可修改性可移植性效率可靠性效率完整性一致性可理解性六盘水师范学院孙新杰206.4软件再工程在许多企业中,大型软件的使用时间多为10年以上,维护这些软件是一个挑战!如一个保险公司使用多种实现语言在不同平台上支持许多不同的应用程序,例如有一个应用程序处理某种类型的保险单、保单持有人信息、保险统计与记帐信息。这样的保单可能要维持数十年。有时不到最后一个保单持有人死亡并且每一项索赔都得到支付,是不可能报废软件的。这些软件有的已老化,虽然经常出错,但对业务处理提供了有力的支持。企业还要依赖这些系统,却很难决定怎样使这些系统更易于维护。其选择可能是扩充或者用新技术替换;每种选择都希望在成本尽可能低的情况下增加软件质量。因此软件再工程是试图提高当前系统(或称遗留系统)的总体质量、对它们进行重构的工程。六盘水师范学院孙新杰211、遗留系统遗留系统是仍然提供必要的业务服务的旧系统。更换一个遗留系统是一个有风险的策略:•遗留系统几乎没有完整的描述。•业务过程和遗留系统的操作方式紧密的交织在一起。•重要的业务规则(业务功能的约束)隐藏在软件内部。•系统的结构衰退,理解系统的难度加大。遗留系统的评估与选择:•低质量、低业务价值:抛弃•低质量、高业务价值:转换或替代•高质量、低业务价值:不转换•高质量、高业务价值:正常的系统维护六盘水师范学院孙新杰222、软件再工程软件再工程通过对遗留系统的改造使它们的质量得到提高。与新开发软件之间的重要差别表现在开发的起点上。再工程开始于已有的系统,通过改善原始系统的结构和产生新的系统文档,使之更容易理解、更易于维护。实施软件再工程的优越性是:•减少重新开发软件的风险•降低开发软件的成本再工程的成本比重新开发要小的多。Ulrich(1990)引用了一个商业系统的例子:重新实现预算5000万美元,经过再工程,仅用了1200万美元,是重新开发费用的四分之一。因此当一个系统有很高的业务价值同时需要很高的维护费用时,对该系统实施再工程是个经济的办法。软件再工程过程中的活动主要包括以下几个方面:六盘水师范学院孙新杰23•文档重构(redocument)•结构重组(restructuring)•逆向工程(reverseengineering)•再工程(reengineering)六盘水师范学院孙新杰24(1)文档重构对源代码进行静态分析,产生以下用图标和文本表示的信息:•构件的调用关系•类或构件的层次关系•数据接口表•数据词典信息•数据流图、控制流图、实体-关系图、结构图•伪代码•测试路径•构件与变量的交叉引用图形、文本、表格信息用来帮助维护人员理解代码,评估一个系统是否需要结构重组。建立文档是非常耗费时间的,仅对系统中当前正在改变的那些部分建立有用的相关文档。重构(restructuring)是在不改变软件基本功能和性能的前提下,对软件内部的一种调整。六盘水师范学院孙新杰25(2)结构重组这里主要指软件重构,注重修改源代码和(或)数据,使适应未来的变化,通常不修改软件整体的体系结构。包括两方面:·代码重构:生成与源程序相同功能、但具有更高质量的设计。如非结构化的程序转换为更现代语言的程序。如FunctionEncapsulationTool能够将旧的C程序重构为C++程序。·数据重构:对程序处理的数据作改变以反映程序变更。先进行源代码分析的逆向工程,评估所有包含数据定义、文件描述、I/O以及接口描述的程序语句,从中抽取数据项和对象,获取关于数据流的信息,理解已实现的数据结构,然后对数据重新设计,包括物理修改:文件格式或数据库类型的转换。六盘水师范学院孙新杰26(3)逆向工程是一个分析程序的过程,利用工具从现有的程序中抽取数据、体系结构和过程的设计信息。逆向工程的关键在于它从详细的源代码实现中抽取出抽象说明的能力。抽象层次可以有以下几级:•导出实现过程的设计表示。如流程图、语法树、符号表等。这是一种低层的抽象。•导出程序和数据的结构信息,即程序和数据成分之间相互依赖关系的信息。如程序结构图、实体-关系图。这是一种稍高层次的抽象。六盘水师范学院孙新杰27•导出程序功能和运行行为的信息。如对象模型或类图、数据流模型、状态转移图、协作图等。是一种相对高层抽象。•导出系统整体结构、上下文环境和部署图的信息。如包图、部署图等。这是一种高层抽象。随着抽象层次提高,更有助于理解程序中的信息
本文标题:第6章软件维护与再工程
链接地址:https://www.777doc.com/doc-203620 .html