《软件工程第八章(维护).ppt》由会员分享,可在线阅读,更多相关《软件工程第八章(维护).ppt(75页珍藏版)》请在优知文库上搜索。
1、软件工程导论(第5版)第第8 8章章 维护维护软件生存周期软件生存周期问题定义 软件定义 可行性研究需求分析 总体设计系统设计详细设计软件生命周期 软件开发编码和单元测试系统实现综合测试 运行维护第第8 8章章 维护维护v软件维护是软件生命周期的最后一个阶段,它处于系统投入生产性运行以后的时期中,因此不属于系统开发过程。v软件维护的基本任务是保证软件在一个相当长的时期能够正常运行。v软件维护需要的工作量非常大,虽然在不同应用领域维护成本差别很大,但是,平均说来,大型软件的维护成本高达开发成本的四倍左右。8.1.1 8.1.1 软件维护定义软件维护定义v所谓软件维护就是在软件已经交付使用之后,为
2、了改正错误或满足新的需要而修改软件的过程。v软件维护包括下述4项活动。 诊断和改正错误的过程:改正性维护 为了和变化了的环境适当地配合而进行的修改软件的活动:适应性维护 为了满足在使用软件的过程中用户的建议和改进意见而作的维护:完善性维护 为了给未来的改进奠定更好的基础而修改软件:预防性维护1、改正(纠错)性维护、改正(纠错)性维护2、适应性维护、适应性维护3、完善性维护、完善性维护3、完善性性维护、完善性性维护4、预防性维护、预防性维护 综综 述述8.1.1 8.1.1 软件维护定义软件维护定义 三类维护占 维护在软件生 总维护比例 存期所占比例8.2 8.2 维护的特点维护的特点一结构化维
3、护与非结构化维护的差别巨大1.非结构化维护 如果软件配置的唯一成分是程序代码,那么维护活动从艰苦地评价程序代码开始,而且常常由于程序内部文档不足而使评价更困难。而且对程序代码所做的改动的后果是难于估量的:因为没有测试方面的文档,所以不可能进行回归测试。 非结构化维护付出代价高昂。8.2 8.2 维护的特点维护的特点2.结构化维护如果有一个完整的软件配置存在,那么维护工作从评价设计文档开始,确定软件重要的结构特点、性能特点以及接口特点;估量要求的改动将带来的影响,并且计划实施途径。然后首先修改设计并且对所做的修改进行仔细复查。接下来编写相应的源程序代码;使用在测试说明书中包含的信息进行回归测试;
4、最后,把修改后的软件再次交付使用。 结构化维护能减少精力浪费并且能提高维护的总体质量。8.2 8.2 维护的特点维护的特点二、维护成本二、维护成本8.2 8.2 维护的特点维护的特点v维护工作量的一个模型: M M P P K K * * exp exp(c c - - d d) 其中: M是维护用的总工作量, P是生产性工作量, K是经验常数, c是因缺乏好的设计和文档而导致复杂性的度量), d是维护人员对软件的熟悉程度。v模型表明,如果软件的开发途径不好(即,没有使用软件工程方法学),而且原来的开发人员不能参加维护工作,那么维护工作量和费用将指数地增加。8.2 8.2 维护的特点维护的特点
5、三维护的问题v与软件维护有关的绝大多数问题,都可归因于软件定义和软件开发的方法有缺点。v在软件生命周期的头两个时期没有严格而又科学的管理和规划,几乎必然会导致在最后阶段出现问题。8.2 8.2 维护的特点维护的特点v和软件维护有关的部分问题:理解别人写的程序通常非常困难,而且困难程度随着软件配置成分的减少而迅速增加。如果仅有程序代码没有说明文档,则会出现严重的问题。需要维护的软件往往没有合格的文档,或者文档资料显著不足。认识到软件必须有文档仅仅是第一步,容易理解的并且和程序代码完全一致的文档才真正有价值。当要求对软件进行维护时,不能指望由开发人员给我们仔细说明软件。由于维护 “阶段持续的时间很
6、长,因此,当需要解释软件时,往往原来写程序的人已经不在附近了。8.2 8.2 维护的特点维护的特点绝大多数软件在设计时没有考虑将来的修改。除非使用强调模块独立原理的设计方法论,否则修改软件既困难又容易发生差错。软件维护不是一项吸引人的工作。形成这种观念很大程度上是因为维护工作经常遭受挫折。8.3 8.3 软件维护过程软件维护过程v维护过程本质上是修改和压缩了的软件定义和开发过程。v为了有效地进行软件维护,应事先就开始做组织工作。 首先建立一个维护组织 确定报告及评价的过程 为每一个维护要求规定一个标准化的事件序列 建立一个适用于维护活动的记录保管过程,并且规定复审标准8.3 8.3 软件维护过
7、程软件维护过程1.维护组织维护组织 维护修改建议维护修改建议 分析修改建议分析修改建议是否合理是否合理提交管理部门审查提交管理部门审查是否同意是否同意修改修改撤销撤销NYNY进行测试进行测试 提交管理部门审批提交管理部门审批是否批准是否批准更新主文档更新主文档Y 更新其他文档更新其他文档 提交使用提交使用修改修改N软件维护的管理流程软件维护的管理流程8.3 8.3 软件维护过程软件维护过程2.维护报告v应该用标准化的格式表达所有软件维护要求。n软件维护人员给用户提供空白的维护要求有时称为软件问题报告表,由要求一项维护活动的用户填写。n如果遇到了一个错误,那么必须完整描述导致出现错误的环境(包括
8、输入数据,全部输出数据,以及其他有关信息)。n对于适应性或完善性的维护要求,应该提出一个简短的需求说明书。n由维护管理员和系统管理员评价用户提交的维护要求表。8.3 8.3 软件维护过程软件维护过程3.维护的事件流8.3 8.3 软件维护过程软件维护过程4.保存维护记录v应该为每项维护工作都收集下述数据:(1)程序标识; (2)源语句数;(3)机器指令条数; (4)使用的程序设计语言;(5)程序安装的日期; (6)自从安装以来程序运行的次数;(7)自从安装以来程序失效的次数;(8)程序变动的层次和标识;(9)因程序变动而增加的源语句数;(10)因程序变动而删除的源语句数;(11)每个改动耗费的
9、人时数; (12)程序改动的日期; (13)软件工程师的名字; (14)维护要求表的标识; (15)维护类型; (l6)维护开始和完成的日期;(17)累计用于维护的人时数; (18)与完成的维护相联系的纯效益。8.3 8.3 软件维护过程软件维护过程5.评价维护活动从下述七个方面度量维护工作:(1)每次程序运行平均失效的次数;(2)用于每一类维护活动的总人时数;(3)平均每个程序、每种语言、每种维护类型所做的程序变动效;(4)维护过程中增加或删除一个源语句平均花费的人时数;(5)维护每种语言平均花费的人时数;(6)一张维护要求表的平均周转时间;(7)不同维护类型所占的百分比。 8.4 8.4程
10、序修改的步骤及修改的副作用程序修改的步骤及修改的副作用8.5 8.5 软件的可维护性软件的可维护性n许多软件的维护十分困难,原因在于这些软件的文档不全、质量差、开发过程不注意采用好的方法,忽视程序设计风格等。n许多维护要求并不是因为程序中出错而提出的,而是为适应环境变化或需求变化而提出的。n为了使得软件能够易于维护,必须考虑使软件具有可维护性。8.5 8.5 软件的可维护性软件的可维护性8.5.1 8.5.1 软件可维护性的因素软件可维护性的因素。8.5.1 8.5.1 软件可维护性的因素软件可维护性的因素8.5.2 8.5.2 软件可维护性的度量软件可维护性的度量注:系统平均不工作间隔时间注
11、:系统平均不工作间隔时间MTBD(Mean Time Between System Downs)、平均停机时间、平均停机时间MDT(Mean Down Time) 。:8.5.3 提高软件可维护性的方法提高软件可维护性的方法8.5 8.5 软件再工程过程软件再工程过程图8.3 软件再工程过程模型8.5 8.5 软件再工程过程软件再工程过程v典型的软件再工程过程模型如图8.3所示,该模型定义了6类活动。v再工程范型是一个循环模型。这意味着作为该范型的组成部分的每个活动都可能被重复,而且对于任意一个特定的循环来说,过程可以在完成任意一个活动之后终止。8.5 8.5 软件再工程过程软件再工程过程1.
12、库存目录分析v每个软件组织都应该保存其拥有的所有应用系统的库存目录。该目录包含关于每个应用系统的基本信息。v对库中每个程序都做逆向工程或再工程是不现实的。下述3类程序有可能成为预防性维护的对象: (1)预定将使用多年的程序; (2)当前正在成功地使用着的程序; (3)在最近的将来可能要做重大修改或增强的程序。8.5 8.5 软件再工程过程软件再工程过程v应该仔细分析库存目录,按照业务重要程度、寿命、当前可维护性、预期的修改次数等标准,把库中的应用系统排序,从中选出再工程的候选者,然后明智地分配再工程所需要的资源。8.5 8.5 软件再工程过程软件再工程过程2.文档重构v老程序固有的特点是缺乏文
13、档。具体情况不同,处理这个问题的方法也不同: 软件稳定或者生命周期临近结束,保持现状 首先建立起正在修改部分的文档 如果某应用系统是完成业务工作的关键,而且必须重构全部文档,则仍然应该设法把文档工作减少到必需的最小量。8.5 8.5 软件再工程过程软件再工程过程3.逆向工程v软件的逆向工程是分析程序以便在比源代码更高的抽象层次上创建出程序的某种表示的过程。v逆向工程是一个恢复设计结果的过程,逆向工程工具从现存的程序代码中抽取有关数据、体系结构和处理过程的设计信息。8.5 8.5 软件再工程过程软件再工程过程4.代码重构v重构难于理解、测试和维护的模块的代码。v为了完成代码重构活动,首先用重构工
14、具分析源代码,标注出和结构化程序设计概念相违背的部分。然后重构有问题的代码。最后,复审和测试生成的重构代码并更新代码文档。v重构并不修改整体的程序体系结构,它仅关注个体模块的设计细节以及在模块中定义的局部数据结构。v如果重构扩展到模块边界之外并涉及软件体系结构,则重构变成了正向工程。8.5 8.5 软件再工程过程软件再工程过程5.数据重构v数据重构是一种全范围的再工程活动。v数据重构始于逆向工程活动,分解当前使用的数据体系结构,必要时定义数据模型,标识数据对象和属性,并从软件质量的角度复审现存的数据结构。v当数据结构较差时,应该对数据进行再工程。v由于数据体系结构对程序体系结构及程序中的算法有很大影响,对数据的修改必然会导致体系结构或代码层的改变。8.5 8.5 软件再工程过程软件再工程过程6.正向工程v从现有程序中恢复设计信息,而且使用该信息去改变或重构现有系统,以提高其整体质量。v正向工程过程应用软件工程的原理、概念、技术和方法来重新开发某个现有的应用系统。在大多数情况下,被再工程的软件不仅重新实现现有系统的功能,而且加入了新功能和提高了整体性能。