您好,欢迎访问三七文档
2020/1/211第十五章软件维护软件维护的分类维护过程可维护性维护的副作用逆向工程与重构工程2020/1/212在软件开发过程中始终强调软件的可维护性。原因是,一个应用系统由于需求和环境的变化以及自身暴露的问题,在交付用户使用后,对它进行维护是不可避免的,统计和估测结果表明,信息技术中硬件费用一般占35%,软件占65%,而软件后期维护费用有时竟高达软件总费用的80%,所有前期开发费用仅占20%。许多大型软件公司为维护已有软件耗费大量人力、财力。因此,必须建立一套评估、控制和实施软件维护的机制,这就是本章重点讨论的内容。2020/1/21315.1软件维护的分类存周期的最后一个阶段,所有活动都发生在软件交付并投入运行之后。维护活动根据起因可分为改正性维护、适应性维护、改善性维护和预防性维护四类:改正性维护是为诊断和改正软件系统中潜藏的错误而进行的活动。适应性维护是为适应环境的变化而修改软件的活动。改善性维护是根据用户在使用过程中提出的一些建设性意见而进行的维护活动。预防性维护是为了进一步改善软件系统的可维护性和可靠性,并为以后的改进奠定基础。第十五章软件维护2020/1/21415.2维护过程软件维护与软件开发阶段的各项活动相比,直到近期才引起人们足够的重视,因此有关维护的技术和方法研究得还很不够。本节主要讨论:(1)维护阶段的主要活动及软件工程的目标、原则对这些活动的影响;(2)维护阶段的代价;(3)软件维护中经常遇到的一些问题。第十五章软件维护2020/1/21515.2.1结构化与非结构化的维护15.2维护过程2020/1/216非结构化如果软件配置中唯一可用的是源代码,那么维护只能从“苦读”代码开始。由于缺乏内部文档,读代码是一项很枯燥、很困难的工作。软件系统的许多微妙之处(例如软件总体结构、全局数据、系统接口、性能和设计方面的约束等)不是搞不清楚就是常常被误解,以致无法估量对源代码修改所产生的后果。特别是,由于没有保存测试记录,使“回归测试”无法进行。对于没有使用良好开发方法开发的软件,不得不采用非结构化的方式进行维护并为此付出高昂的代价(浪费大量人力,且让维护人员有挫折感)。15.2维护过程2020/1/217结构化如果欲维护的软件存在一个完整的软件配置,维护活动将从阅读设计文档开始。首先确定软件的重要结构、性能及接口特征,评估这次维护可能带来的影响并规划出一个具体实施方案;然后从修改设计入手(采用以前讨论过的设计技术),设计复审通过之后再修改代码,并参照测试规格说明书对软件进行回归测试,测试通过后交付用上述过程也称为结构化维护,它是采用软件工程方法学开发软件的自然结果。拥有完整的软件配置能减少维护工作量,提高维护质量。15.2维护过程2020/1/21815.2.2维护的成本过去的二十年,软件维护的成本在不断增长。七十年代,一个信息系统机构用于软件维护的费用占其软件总预算的35~40%,八十年代接近60%。若维护方式没有大的改进,未来几年,许多大型软件公司可能要将其预算的80%用于软件系统的维护上。15.2维护过程2020/1/219维护的成本其他因素也已经引起人们的注意。如:由于资源(人力、设备)优先用于维护任务,影响新软件系统的开发,可能会丧失机会;有时还要付出一些无形的代价,如某些貌似合理但实际不能满足的维护请求将引起用户不满;在软件维护过程中引入的潜在错误降低了软件的质量;从开发小组中临时抽调工程师从事维护工作冲击正在进行的开发等等。最后,维护旧程序使生产率(按每人月代码行或每人月功能点计算)大幅度下降。15.2维护过程2020/1/211015.2.3可能存在的问题软件维护中出现的大部分问题都可归咎于软件规划和开发方法的缺陷。软件开发时采用急功近利还是放眼未来的态度,对软件维护影响极大。一般说来,软件开发若不严格遵循软件开发标准,软件维护就会遇到许多困难。15.2维护过程2020/1/2111典型问题(1)很难甚至不可能追踪软件版本的进化过程,软件的变化没在相应文档中反映出来;(2)(3)理解他人的程序非常困难,当软件配置不全,仅有源代码时问题尤为严重;(4)软件人员流动性很大,维护他人软件时很难得到开发者的帮助;(5)软件没有文档、或文档不全、或文档不易理解、或与源代码不一致;(6)多数软件设计未考虑修改的需要(有些设计方法采用了功能独立和对象类型等一些便于修改的概念),软件修改不仅困难而且容易出错。(7)软件维护不是一项有吸引力的工作,从事这项工作令人缺乏成就感。15.2维护过程2020/1/211215.3可维护性软件可维护性指,软件被理解、改正、调整和改进的难易程度。可维护性是指导软件工程各个阶段工作的一条基本原则,也是软件工程追求的目标之一。第十五章软件维护2020/1/211315.3.1影响可维护性的因素软件的可维护性受各种因素的影响。设计、编码和测试时漫不经心,软件配置不全都会给维护带来困难。除了与开发方法有关的因素外,还有下列与开发环境有关的因素:①是否拥有一组训练有素的软件人员;②系统结构是否可理解;③是否使用标准的程序设计语言;④是否使用标准的操作系统;⑤文档的结构是否标准化;⑥测试用例是否合适;⑦是否已有嵌入系统的调试工具;除此之外,软件开发时的原班人马是否能参加维护也是一个值得考虑的因素。15.3可维护性2020/1/211415.3.2若干量化的测度软件可维护性与软件质量和可靠性一样是难于量化的概念,然而借助维护活动中可以定量估算的属性,能间接地度量可维护性:①察觉到问题所耗的时间;②收集维护工具所用的时间;③分析问题所需时间;⑤纠错(或修改)所用时间;⑥局部测试所用时间;⑦整体测试所用时间;⑧维护复审所用时间;⑨完全恢复所用时间。15.3可维护性2020/1/211515.3.3保证可维护性的复审可维护性是所有软件都努力追求的一个基本特性。在软件工程每一阶段的复审中,可维护性都是重要指标。在需求分析阶段的复审中,应对将来可能修改和可以改进的部分加以注释,对软件的可移植性加以讨论并考虑可能影响软件维护的系统界面;在设计阶段的复审中,应从易于维护和提高设计总体质量的角度全面评审数据设计、总体结构设计、过程设计和界面设计;代码复审主要强调编程风格和内部文档这两个直接影响可维护性的因素;最后,每一阶段性测试都应指出软件正式交付之前,应该进行的预防性维护。软件维护活动完成之际亦要进行复审。正式的可维护性复审放在测试完成之后,称为配置复审。15.3可维护性2020/1/211615.4维护活动软件维护工作在维护申请提出之前就开始了,它包括:建立维护组织,强制报告和评估的过程;为每个维护申请确定标准化的事件序列;制定保存维护活动记录的制度和有关复审及评估的标准。第十五章软件维护2020/1/211715.4.1维护组织15.4维护活动2020/1/2118维护的一种组织模式每个维护申请通过维护管理员转告给系统管理员,系统管理员一般都是对程序(某一部分)特别熟悉的技术人员,他们对维护申请及可能引起的软件修改进行评估,并向修改控制决策机构(一个或一组管理者)报告,由它最后确定是否采取行动。依照这样的组织方式开展维护活动能减少混乱和盲目性,避免因小失大的情况发生。上述各个岗位都不需要专职人员,但必须为胜任者,并且要早在维护活动开始之前就明确各自责任,避免互相推诿,急功近利的现象。15.4维护活动2020/1/211915.4.2维护的报告与评估所有的软件维护申请都应该采用标准化的格式,软件开发人员统一发放的维护申请单MRF或称为软件问题报告单,由用户根据需要填写。如果用户确实发现了错误,必须完整地记录出错现场信息(包括输入数据、列表文件和其他有关信息);如果用户提出适应性或改善性维护请求,需同时提交一个简短的修改规格说明书(即简单的需求规格说明书)。维护管理员将MRF提交给系统管理员评估。一个维护申请被核准后,MRF成为外部文档,视作规划本次维护任务的依据。15.4维护活动2020/1/2120维护修改报告单软件组织内部还要另外制定一个软件修改报告单SCR用于说明:①为满足MRF将SCR提交给修改控制决策机构,供进一步规划维护活动使用。15.4维护活动2020/1/2121状况复审当一项软件维护任务完成之后,进行一次状况复审大有益处。状况复审主要考虑下列问题:①依照当前状态,在设计、编码和测试的哪些方面还能用其他方法进行?③这次维护活动中主要(或次要)的障碍有哪些?④在维护请求中有预防性维护吗?状况复审的目的在于促进未来的维护工作,同时也为有效管理软件组织提供重要的反馈信息。15.4维护活动2020/1/212215.4.4保存维护记录维护过程中值得记录的数据包括:1程序标志;2源程序行数;3目标程序指令条数;4所用编程语言;5安装程序的日期;6自安装之日起程序运行的次数;7自安装之日起程序失败的次数;8程序修改处的层数和标志;9因程序变动而增加的源程序行数;15.4维护活动2020/1/2123保存维护记录10;11;12;13;14MRF的标志;15;16;17;1815.4维护活动2020/1/212415.4.5评价维护活动如果缺乏真实可信的数据,评估活动毫无意义。在保存了维护记录的前提下,可对维护性能进行度量,统计下列数据是必要的:①程序每次运行的平均失效次数;②各类维护耗费的总人时数;③各种程序、各种语言及各类维护的程序平均变动数;④维护阶段增删一个语句平均花费的人时数;⑤维护每种语言的程序平均花费的人时数;⑥一张MRF的平均周转时间;根据这些统计量可对开发技术、编程语言,以及对维护工作量的预测与资源分配等诸多方面的决策进行评价。15.4维护活动2020/1/212515.5维护的副作用软件修改是一项很危险的工作,对一个复杂的逻辑过程,那怕做一项微小的改动,都可能引入潜在的错误,虽然设计文档化和细致的回归测试有助于排除错误,但是维护仍然会产生副作用。软件维护的副作用指,由于维护或在维护过程中其他一些不期望的行为引入的错误,副作用大致可分为三类:(1)代码副作用(2)数据副作用(3)文档的副作用第十五章软件维护2020/1/21261.代码副作用①修改或删除子程序;②修改或删除语句标号;③修改或删除标识符;④为提高执行效率而做的修改;⑤修改文件的open、close操作;⑥修改逻辑操作符;⑦由设计变动引起的代码修改;⑧修改对边界条件的测试。15.5维护的副作用2020/1/21272.数据副作用①局部和全局常量的再定义;②记录或文件格式的再定义;③增减数据或其他复杂数据结构的体积;④修改全局数据;⑤重新初始化控制标志和指针;⑥重新排列I/O15.5维护的副作用2020/1/21283.文档的副作用维护应统一考虑整个软件配置,而不仅仅是源代码。否则,由于在设计文档和用户手册中未能准确反映修改情况而引起对软件的任何修改都应在相应的技术文档中反映出来,如果设计文档不能与软件当前的状况对应则比没有文档更糟。对用户来说,若使用说明中未能反映修改后的状况,那么用户一次维护完成之后,再次交付软件之前应仔细复审整个配置,有效地减少文档副作用。某些维护申请不必修改设计和代码,只需整理用户文档便可达到维护的目的。15.5维护的副作用2020/1/212915.6逆向工程与重构工程逆向工程与重构工程是目前预防性维护采用的主要技术。所谓软件的逆向工程就是分析已有的程序,寻求比源代码更高级的抽象表现形式。一般认为,凡是在软件生命周期内,将软件某种形式的描述转换成更为抽象形式的活动都可称为逆向工程。与之相关的概念是:重构,指在同一抽象级别上转换系统描述形式;设计恢复,指借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计的信息(不一定是原设计);重构工程,也称修复和改造工程,它是在逆向工程所获信息的基础上修改或重构已有的系统,产生
本文标题:sw15
链接地址:https://www.777doc.com/doc-3211534 .html