您好,欢迎访问三七文档
第8章维护1软件维护的定义2软件维护的特点3软件维护过程4软件的可维护性5预防性维护6软件再工程过程1.所谓软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。2.软件维护通常包括4类活动:1)改正性维护;2)适应性维护;3)完善性维护;4)预防性维护。8.1软件维护的定义8.2.1结构化维护与非结构化维护差别巨大;1.非结构化维护;2.结构化维护。8.2.2维护的代价高昂1.维护费用只不过是软件维护的最明显的代价;2.还有其他无形的代价:1)当看来合理的有关改错或修改的要求不能及时满足时将引起用户不满;2)由于维护时的改动,在软件中引入了潜伏的错误,从而降低了软件的质量;3)当必须把软件工程师调去从事维护工作时,将在开发过程中造成混乱。8.2软件维护的特点◆软件维护的最后一个代价是生产率的大幅度下降。◆用于维护工作的劳动可以分成生产性活动和非生产性活动生产性活动:分析评价,修改设计和编写程序代码等;非生产性活动:理解程序代码的功能,解释数据结构、接口特点和性能限度等。◆下面给出维护工作量的一个模型:M=P+K×exp(c–d)其中:M是维护用的总工作量,P是生产性工作量,K是经验常数,c是复杂程度,d是维护人员对软件的熟悉程度。1.与软件维护有关的绝大多数问题,都可归因于软件定义和软件开发的方法有缺点。2.在软件生命周期的头两个时期没有严格而又科学的管理和规划,几乎必然会导致在最后阶段出现问题。8.2.3维护的问题很多◆维护过程本质上是修改和压缩了的软件定义和开发过程,◆首先,必须建立一个维护组织,◆随后,必须确定报告和评价的过程,◆而且,必须为每个维护要求规定一个标准化的事件序列。◆还应该建立一个适用于维护活动的记录保管过程,并且规定复审标准。8.3软件维护过程1.维护组织图8.1维护组织2.维护报告1)软件维护人员通常给用户提供空白的维护要求表,有时称为软件问题报告表,这个表格由要求一项维护活动的用户填写。2)如果遇到了一个错误,那么必须完整描述导致出现错误的环境,包括输入数据、全部输出数据以及其他有关信息。3)对于适应性或完善性的维护要求,应该提出一个简短的需求说明书。如前所述,由维护管理员和系统管理员评价用户提交的维护要求表。◆维护要求表是一个外部产生的文件,软件组织内部应该制定出一个软件修改报告,它给出下述信息:(1)满足维护要求表中提出的要求所需要的工作量;(2)维护要求的性质;(3)这项要求的优先次序;(4)与修改有关的事后数据。在拟定进一步的维护计划之前,把软件修改报告提交给变化授权人审查批准。3.维护的事件流图8.2维护阶段的事件流4.保存维护记录保存维护记录遇到的第一个问题就是,哪些数据是值得记录的?Swanson提出了下述内容:①程序标识;②源语句数;③机器指令条数;④使用的程序设计语言;⑤程序安装的日期;⑥自从安装以来程序运行的次数;⑦自从安装以来程序失效的次数;⑧程序变动的层次和标识;⑨因程序变动而增加的源语句数;因程序变动而删除的源语句数;每个改动耗费的人时数;程序改动的日期;软件工程师的名字;维护要求表的标识;维护类型;维护开始和完成的日期;累计用于维护的人时数;与完成的维护相联系的纯效益。5.评价维护活动根据保存的维护记录,至少可以从下述7个方面度量维护工作:(1)每次程序运行平均失效的次数;(2)用于每一类维护活动的总人时数;(3)平均每个程序、每种语言、每种维护类型所做的程序变动数;(4)维护过程中增加或删除一个源语句平均花费的人时数;(5)维护每种语言平均花费的人时数;(6)一张维护要求表的平均周转时间;(7)不同维护类型所占的百分比。◆可以把软件的可维护性定性地定义为:维护人员理解、改正、改动或改进这个软件的难易程度。8.4.1决定软件可维护性的因素1.可理解性表现为外来读者理解软件的结构、功能、接口和内部处理过程的难易程度。8.4软件的可维护性2.可测试性◆诊断和测试的容易程度取决于软件容易理解的程度。良好的文档对诊断和测试是至关重要的。◆维护人员应该能够得到在开发阶段用过的测试方案,以便进行回归测试。在设计阶段应该尽力把软件设计成容易测试和容易诊断的。◆对于程序模块来说,可以用程序复杂度来度量它的可测试性。3.可修改性◆软件容易修改的程度和讲过的设计原理和启发规则直接有关。4.可移植性◆软件可移植性指的是,把程序从一种计算环境(硬件配置和操作系统)转移到另一种计算环境的难易程度。◆把与硬件、操作系统以及其他外部设备有关的程序代码集中放到特定的程序模块中.◆可以把因环境变化而必须修改的程序局限在少数程序模块中,从而降低修改的难度。5.可重用性◆所谓重用(reuse)是指同一事物不做修改或稍加改动就在不同环境中多次重复使用。◆大量使用可重用的软件构件来开发软件,可以从下述两个方面提高软件的可维护性:1)软件中使用的可重用构件越多,软件的可靠性越高,改正性维护需求越少。2)软件中使用的可重用构件越多,适应性和完善性维护也就越容易。◆文档是影响软件可维护性的决定因素。◆软件系统的文档可以分为用户文档和系统文档两类。◆总的说来,软件文档应该满足下述要求:1)必须描述如何使用这个系统,2)必须描述怎样安装和管理这个系统;3)必须描述系统需求和设计;4)必须描述系统的实现和测试,以便使系统成为可维护的。8.4.2文档1.用户文档◆用户文档主要描述系统功能和使用方法,并不关心这些功能是怎样实现的;◆用户文档是用户了解系统的第一步,它应该能使用户获得对系统的准确的初步印象。◆用户文档至少应该包括下述5方面的内容:(1)功能描述;(4)参考手册,(2)安装文档;(5)操作员指南(3)使用手册;2.系统文档◆所谓系统文档指从问题定义、需求说明到验收测试计划这样一系列和系统实现有关的文档。◆描述系统设计、实现和测试的文档对于理解程序和维护程序来说是极端重要的。8.4.3可维护性复审◆可维护性是所有软件都应该具备的基本特点。◆在软件工程过程的每一个阶段都应该考虑并努力提高软件的可维护性。◆在每个阶段结束前的技术审查和管理复审中,应该着重对可维护性进行复审。◆配置复审:在测试结束时进行最正式的可维护性复审◆配置复审的目的是保证软件配置的所有成分是完整的、一致的和可理解的。◆在完成了每项维护工作之后,都应该对软件维护本身进行仔细认真的复审。◆维护应该针对整个软件配置,不应该只修改源程序代码。当对源程序代码的修改没有反映在设计文档或用户手册中时,就会产生严重的后果。◆用户通常根据描述软件特点和使用方法的用户文档来使用、评价软件。◆为了修改这类程序以适应用户新的或变更的需求,有以下几种做法可供选择:1)反复多次地做修改程序的尝试,以实现所要求的修改;2)通过仔细分析程序,尽可能多地掌握程序的内部工作细节,以便更有效地修改它;3)在深入理解原有设计的基础上,用软件工程方法重新设计、重新编码和测试那些需要变更的软件部分;4)以软件工程方法学为指导,对程序全部重新设计、重新编码和测试,为此可以使用CASE工具(逆向工程和再工程工具)来帮助理解原有的设计。8.5预防性维护◆预防性维护方法是由Miller提出来的,他把这种方法定义为:“把今天的方法学应用到昨天的系统上,以支持明天的需求。”◆粗看起来,在一个正在工作的程序版本已经存在的情况下重新开发一个大型程序,似乎是一种浪费。其实不然,下述事实很能说明问题:1)维护一行源代码的代价可能是最初开发该行源代码代价的14~40倍;2)重新设计软件体系结构(程序及数据结构)时使用了现代设计概念,它对将来的维护可能有很大的帮助;3)由于现有的程序版本可作为软件原型使用,开发生产率可大大高于平均水平;4)用户具有较多使用该软件的经验,因此,能够很容易地搞清新的变更需求和变更的范围;5)利用逆向工程和再工程的工具,可以使一部分工作自动化;6)在完成预防性维护的过程中可以建立起完整的软件配置。8.6软件再工程过程图8.3软件再工程过程模型1.库存目录分析◆每个软件组织都应该保存其拥有的所有应用系统的库存目录。◆该目录包含关于每个应用系统的基本信息。◆下述3类程序有可能成为预防性维护的对象:1)预定将使用多年的程序;2)当前正在成功地使用着的程序;3)在最近的将来可能要做重大修改或增强的程序。2.文档重构◆老程序固有的特点是缺乏文档。具体情况不同,处理这个问题的方法也不同:1)如果一个程序是相对稳定的,正在走向其有用生命的终点,而且可能不会再经历什么变化,那么,让它保持现状。2)为了便于今后的维护,必须更新文档,不是一下子把某应用系统的文档全部都重建起来,而是只针对系统中当前正在修改的那些部分建立完整文档。随着时间流逝,将得到一组有用的和相关的文档。3)如果某应用系统是完成业务工作的关键,而且必须重构全部文档,则仍然应该设法把文档工作减少到必需的最小量。3.逆向工程◆软件的逆向工程是分析程序以便在比源代码更高的抽象层次上创建出程序的某种表示的过程,也就是说,逆向工程是一个恢复设计结果的过程。4.代码重构◆代码重构是最常见的再工程活动。◆为了完成代码重构活动,首先用重构工具分析源代码,标注出和结构化程序设计概念相违背的部分;然后重构有问题的代码;最后,复审和测试生成的重构代码(以保证没有引入异常)并更新代码文档。5.数据重构◆与代码重构不同,数据重构发生在相当低的抽象层次上,它是一种全范围的再工程活动。◆在大多数情况下,数据重构始于逆向工程活动,分解当前使用的数据体系结构,必要时定义数据模型,标识数据对象和属性,并从软件质量的角度复审现存的数据结构。◆当数据结构较差时,应该对数据进行再工程。◆由于数据体系结构对程序体系结构及程序中的算法有很大影响,对数据的修改必然会导致体系结构或代码层的改变。6.正向工程◆正向工程也称为革新或改造;◆它不仅从现有程序中恢复设计信息,而且使用该信息去改变或重构现有系统,以提高其整体质量。◆正向工程过程应用软件工程的原理、概念、技术和方法来重新开发某个现有的应用系统。◆在大多数情况下,被再工程的软件不仅重新实现现有系统的功能,而且加入了新功能和提高了整体性能。1维护是软件生命周期的最后一个阶段,也是持续时间最长代价最大的一个阶段。2软件工程学的主要目的就是提高软件的可维护性,降低维护的代价。3软件维护通常包括4类活动:改正性维护;适应性维护;完善性维护;预防性维护。4软件的可理解性、可测试性、可修改性、可移植性和可重用性,是决定软件可维护性的基本因素8.7小结5软件重用技术是能从根本上提高软件可维护性的重要技术,而本书第9章至第12章将要讲述的面向对象的软件技术是目前最成功的软件重用技术。6文档是影响软件可维护性的决定因素,文档可分为用户文档和系统文档两大类。7预防性维护,预防性维护实质上是软件再工程。8典型的软件再工程过程模型定义了库存目录分析、文档重构、逆向工程、代码重构、数据重构和正向工程等6类活动。
本文标题:第8章软件维护.
链接地址:https://www.777doc.com/doc-2113062 .html