《软件工程——软件维护.ppt》由会员分享,可在线阅读,更多相关《软件工程——软件维护.ppt(30页珍藏版)》请在第壹文秘上搜索。
1、2023-3-10软件工程软件工程软件维护软件维护o 一、软件维护的概念o 二、软件维护分类o 三、维护问题o 四、维护成本o 五、维护过程o 六、维护的副作用o 七、如何做好软件维护2023-3-10o 软件维护阶段覆盖了从软件交付使用到软件被淘汰为止的整个时期。软件的开发时间可能需要一、二年,甚至更短,但它的使用时间可能要经历几年或几十年。o 在软件开发过程中始终强调软件的可维护性。原因是,一个应用系统由于需求和环境的变化以及自身暴露的问题,在交付用户使用后,对它进行维护是不可避免的,统计和估测结果表明,信息技术中硬件费用一般占35%,软件占65%,而软件后期维护费用有时竟高达软件总费用的
2、80%,所有前期开发费用仅占20%。软件维护一、软件维护的概念 o 什么是软件维护n 是指软件系统交付使用以后,为了改正错误或满足新的需要而修改软件的过程 o 国标GB/T 11457-95给出如下定义 n 在一软件产品交付使用后对其进行修改,以纠正故障;n 在一软件产品交付使用后对其进行修改,以纠正故障、改进其性能和其它属性,或使产品适应改变了的环境2023-3-10o 按照维护的起因分类四类: 纠错性维护 适应性维护 完善性维护 预防性维护二、软件维护分类 1. 纠错性维护(Corrective Maintenance) 为改正软件系统中潜藏的错误而进行的活动。 纠错性维护是指在系统开发阶
3、段已发生而系统测试阶段尚未发纠错性维护是指在系统开发阶段已发生而系统测试阶段尚未发现的错误。这方面的维护工作量占整个维护工作量的现的错误。这方面的维护工作量占整个维护工作量的17%-21%。所发现的错误有的不太重要,不影响系统的正常运行。所发现的错误有的不太重要,不影响系统的正常运行,其维护工作可随时进行;而有的错误非常重要,甚至影响整,其维护工作可随时进行;而有的错误非常重要,甚至影响整个系统的正常运行,其维护工作必须制定计划,进行修改,并个系统的正常运行,其维护工作必须制定计划,进行修改,并且要进行复查和控制。且要进行复查和控制。 这部分维护工作实际上就是软件系统运行过程中修改前期没有这部
4、分维护工作实际上就是软件系统运行过程中修改前期没有发现的发现的bug,在修改旧,在修改旧bug过程中也可能会引入新的过程中也可能会引入新的bug,这这部分工作以后会成为新的纠错性维护工作。在软件开发过程中部分工作以后会成为新的纠错性维护工作。在软件开发过程中加强测试,可以有效减少这部分的维护工作。加强测试,可以有效减少这部分的维护工作。2023-3-102. 适应性维护(Adaptive Maintenance) 为适应软件运行环境的变化而修改软件的活动。 适应性维护是指是软件适应信息技术变化和管理需求而进行的修适应性维护是指是软件适应信息技术变化和管理需求而进行的修改。这方面的维护工作量占整
5、个维护工作量的改。这方面的维护工作量占整个维护工作量的18%-25%。由。由于目前计算机硬件价格的不断下降,各类系统软件层出不穷,人于目前计算机硬件价格的不断下降,各类系统软件层出不穷,人们常常为改善系统硬件环境和运行环境而产生系统更新换代的需们常常为改善系统硬件环境和运行环境而产生系统更新换代的需求;企业的外部市场环境和管理需求的不断变化也使得各级管理求;企业的外部市场环境和管理需求的不断变化也使得各级管理人员不断提出新的信息需求。这些因素都将导致适应性维护工作人员不断提出新的信息需求。这些因素都将导致适应性维护工作的产生。的产生。2023-3-103.完善性维护(Perfective Ma
6、intenance) 根据用户在软件使用过程中提出的建设性意见而进行的维护活动。 完善性维护是为扩充功能和改善性能而进行的修改,主要是完善性维护是为扩充功能和改善性能而进行的修改,主要是指对已有的软件系统增加一些在系统分析和设计阶段中没有指对已有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征。这些功能对完善系统功能是非常必规定的功能与性能特征。这些功能对完善系统功能是非常必要的。另外,还包括对处理效率和编写程序的改进,这方面要的。另外,还包括对处理效率和编写程序的改进,这方面的维护占整个维护工作的的维护占整个维护工作的50%-60%,比重较大,也是关系,比重较大,也是关系到系
7、统开发质量的重要方面。完善性维护是软件维护工作的到系统开发质量的重要方面。完善性维护是软件维护工作的主要部分,触发这类维护工作的常常是用户业务交易增加了主要部分,触发这类维护工作的常常是用户业务交易增加了,或是业务流程改变了,需要修改软件;也可能是软件不能,或是业务流程改变了,需要修改软件;也可能是软件不能满足业务量要去,需要在性能上有所提高。满足业务量要去,需要在性能上有所提高。2023-3-104. 预防性维护(Preventive Maintenance) 为了进一步改善软件系统的可维护性和可靠性,并为以后的改进奠定基础。 预防性维护为了改进应用软件的可靠性和可维护性,为预防性维护为了改
8、进应用软件的可靠性和可维护性,为了适应未来的软硬件环境的变化,主动增加预防性的新了适应未来的软硬件环境的变化,主动增加预防性的新的功能,以使应用系统适应各类变化而不被淘汰。这方的功能,以使应用系统适应各类变化而不被淘汰。这方面的维护工作占整个维护工作量的面的维护工作占整个维护工作量的4%左右,是维护工作左右,是维护工作中占比最少的一部分工作。中占比最少的一部分工作。2023-3-10三、维护问题o 和软件维护有关的部分问题 :n理解别人的代码通常是非常困难的,而且难度随着软件配置成分的缺失而迅速增加n需要维护的软件往往没有文档、或文档资料严重不足、或软件的变化未在相应的文档中反映出来2023-
9、3-10n当软件要求维护时,不能指望由原来的开发人员来完成或提供软件的解释。由于维护持续时间很长,因此当需要解释软件时候,往往开发人员已经不在附近了n绝大多数软件在设计时没有考虑到将来的修改问题n软件维护这项工作毫无吸引力。一方面是因为软件维护,看不到什么“成果”,但工作量很大,更重要的是维护工作难度大,软件维护人员经常遭受挫折。 2023-3-10o 过去的二十年,软件维护的成本在不断增长。o 七十年代,一个信息系统机构用于软件维护的费用占其软件总预算的3540%,八十年代接近60%。o 若维护方式没有大的改进,未来几年,许多大型软件公司可能要将其预算的80%用于软件系统的维护上。四、维护成
10、本2023-3-10o 软件维护除费用外的无形代价包括n 维护活动占用了其他软件开发可用的资源,使资源的利用率降低 n 一些修复或修改请求得不到及时安排,使得客户满意率下降 n 维护的结果把一些新的潜在的错误引入软件,降低了软件质量 n 将软件人员抽调到维护工作中,使得其它软件开发过程受到干扰 2023-3-10o 维护的工作可划分成:n 生产性活动 如,分析评价、修改设计、编写程序代码等 n 非生产性活动 如,程序代码功能理解、数据结构解释、接口特点和性能界限分析等2023-3-10o 在软件维护中,影响维护工作量的因素主要有以下六种:n 系统的大小系统规模越大,其功能就越复杂,软件维护的工
11、作量也随之增大。n 程序设计语言使用功能强大的程序设计语言可以控制程序的规模。语言的功能越强,生成程序的模块化和结构化程度越高,所需的指令数就越少,程序的可读性越好。2023-3-10o 系统年龄系统使用时间越长,所进行的修改就越多,而多次的修改可能造成系统结构混乱。由于维护人员经常更换,程序变得越来越难于理解,加之系统开发时文档不齐全,或在长期的维护过程中文档在许多地方与程序实现不一致,从而使维护变得十分困难。o 数据库技术的应用使用数据库,可以简单而有效地存储、管理系统数据,还可以减少生成用户报表应用软件的维护工作量。2023-3-10o 先进的软件开发技术 在软件开发过程中,如果采用先进
12、的分析设计技术和程序设计技术,如面向对象技术、复用技术等,可减少大量的维护工作量。o 其它一些因素如应用的类型、数学模型、任务的难度、开关与标记、IF嵌套深度、索引或下标数等,对维护工作量也有影响。2023-3-10五、维护过程o 对于非纠错性维护,则首先判断维护类型,对适应性维护,按照评估后得到的优先级放入队列 o 对于改善性维护,则还要考虑是否采取行动,如果接受申请,则同样按照评估后得到的优先级放入队列,如果拒绝申请,则通知请求者,并说明原因o 对于工作安排队列中的任务,由修改负责人依次从队列中取出任务,按照软件工程方法学规划、组织、实施工程。2023-3-10维护请求维护请求类型类型类型
13、类型严重性严重性评估后按优先评估后按优先级在队列排队级在队列排队救火行动,当救火行动,当排在队列之首排在队列之首评估后分类评估后分类评估后按优先评估后按优先级在队列排队级在队列排队采取的行动采取的行动通知请求者通知请求者并说明原因并说明原因按优先级在按优先级在队列中排队队列中排队从维护请求队列之首取出一任务从维护请求队列之首取出一任务按按SESE方法学规划、组织、实施工程方法学规划、组织、实施工程队列中还有维护请求吗?队列中还有维护请求吗?资源用于开发新的软件。资源用于开发新的软件。y yn n纠错性维护纠错性维护其他其他改善性维护改善性维护适应性维护适应性维护拒绝拒绝接受接受并不严重并不严重
14、非常严重非常严重2023-3-102023-3-10六、维护的副作用n软件修改是一项很危险的工作,对一个复杂的逻辑过程,那怕做一项微小的改动,都可能引入潜在的错误,虽然设计文档化和细致的测试有助于排除错误,但是维护仍然会产生副作用。l一次修改5-10个语句,成功率50%;l一次修改40-50个语句,成功的可能性20%;l每纠正一个错误平均需修改17条指令。2023-3-10o 软件维护的副作用指,由于维护或在维护过程中其他一些不期望的行为引入的错误,副作用大致可分为三类:(1)代码副作用(2)数据副作用(3)文档的副作用2023-3-10(1)代码副作用下面的修改最易引起副作用:修改或删除子程
15、序;修改或删除语句标号;修改或删除标识符;为提高程序效率而做的修改;修改逻辑操作符;由设计变动引起的代码修改;修改分支处的判断条件; 2023-3-10(2)数据副作用l 数据副作用是由于修改数据结构带来的副作用。容易引起数据副作用的修改包括:局部和全局常量的再定义;记录或文件格式的再定义;增减数据或是由于修改数据结构的定义导致 数据结构长度的改变;修改全局数据;重新初始化控制标志和指针;重新排列I/O表或子程序参数表。2023-3-10(3)文档副作用l 由于程序修改而没有对文档进行相应的修改引起文档的副作用。o 1.爱上软件维护工作 首先要认识软件维护工作在软件生命周期中的重要性,做维护工
16、作虽然不能成为台前英雄,但却是个实实在在的幕后英雄。实际上很多所谓的开发人员所做的开发工作就为软件增加新功能,修改业务流程,这其实就是在做完善性维护工作。软件维护工作同样存在大量的挑战,同样需要创造性、灵活性、耐心、训练和良好的沟通。爱好是学习最好的老师,只要喜欢上软件维护工作,你就会在这一领域中发挥你的聪明才智,收获属于你的一片蓝天。七、如何做好软件维护o 2.熟悉软件系统 熟悉所维护软件的功能是非常重要的,也是进行软件维护工作的第一步。首先阅读现有的文档,最好能对文档中提到的内容亲自进行测试。掌握现实中软件的使用方法,确保你要知道最常用的使用情形。有时候用户会要求提供一些已经存在的功能特性,只是因为他们不知道软件中已经具有了这些功能。 最后只能研究代码了,试着去理解函数、模块和组件在软件中所扮演的角色。使用调试器单步执行程序中不同的分支,查看当代码的不同部分执行时将会发生什么。要把熟悉软件的体系结构当做一个持续进行的过程,而不是一次就能完成的事情。当你修改bug或添加新的特性时,可能对系统有更好的理解。以上过程一定要记录结果,这样对维护工作有巨大的帮助。o 3.与用户沟通 与用户沟