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