《软件工程第9章软件维护.ppt》由会员分享,可在线阅读,更多相关《软件工程第9章软件维护.ppt(36页珍藏版)》请在第壹文秘上搜索。
1、9软件维护的基本概念软件维护的基本概念 软件维护是指软件系统交付使用以后,为了改正错软件维护是指软件系统交付使用以后,为了改正错误或满足新的需求而修改软件的过程。误或满足新的需求而修改软件的过程。 软件维护工作处于软件生命期的最后阶段,维护阶软件维护工作处于软件生命期的最后阶段,维护阶段是软件生存期中最长的一个阶段,所花费的人力、物段是软件生存期中最长的一个阶段,所花费的人力、物力最多,其花费高达整个软件生命期花费的约力最多,其花费高达整个软件生命期花费的约60-7060-70。因为计算机程序总是会发生变化,对隐含错误的修改,因为计算机程序总是会发生变化,对隐含错误的修改,新功能的加入,环境变
2、化造成的程序变动等。新功能的加入,环境变化造成的程序变动等。 因此,应该充分认识到维护工作的重要性和迫切性,因此,应该充分认识到维护工作的重要性和迫切性,提高软件的可维护性,减少维护的工作量和费用,延长提高软件的可维护性,减少维护的工作量和费用,延长已经开发软件的生命期,以发挥其应有的效益。已经开发软件的生命期,以发挥其应有的效益。9 9.1.1 .1.1 软件维护的目的软件维护的目的1.1.在运行中发现在测试阶段未能发现的潜在软件错误和在运行中发现在测试阶段未能发现的潜在软件错误和设计缺陷;设计缺陷;2.2.根据实际情况,需要改进软件设计,以增强软件的功根据实际情况,需要改进软件设计,以增强
3、软件的功能,提高软件的性能;能,提高软件的性能;3.3.要求在某环境下已运行的软件能适应特定的硬件、软要求在某环境下已运行的软件能适应特定的硬件、软件、外部设备和通信设备等新的工作环境,或是要求适件、外部设备和通信设备等新的工作环境,或是要求适应已变动的数据或文件;应已变动的数据或文件;4.4.为使投入运行的软件与其它相关的程序有良好的接口,为使投入运行的软件与其它相关的程序有良好的接口,以利于协同工作;以利于协同工作;5.5.为使运行软件的应用范围得到必要的扩充。为使运行软件的应用范围得到必要的扩充。2023-3-1011软件维护的类型软件维护的类型按照不同的维护目的,维护工作可分成按照不同
4、的维护目的,维护工作可分成4 4类。类。完善性维护完善性维护(Perfective MaintenancePerfective Maintenance)扩充原有系统的功能,提高原有系统的性能,满扩充原有系统的功能,提高原有系统的性能,满足用户的实际需要。足用户的实际需要。纠错性维护纠错性维护(Corrective MaintenanceCorrective Maintenance)对在测试阶段未能发现的,在软件投入使用后才逐对在测试阶段未能发现的,在软件投入使用后才逐渐暴露出来的错误的测试、诊断、定位、纠错以及渐暴露出来的错误的测试、诊断、定位、纠错以及验证、修改的回归测试过程。验证、修改的回
5、归测试过程。 适应性维护适应性维护(Adaptive Maintenance) 要使运行的软件能适应运行环境的变动而要使运行的软件能适应运行环境的变动而修改软件的过程。修改软件的过程。 预防性维护预防性维护(Preventive Maintenance) 为了进一步改善软件的可靠性和易维护性,为了进一步改善软件的可靠性和易维护性,或者为将来的维护奠定更好的基础而对软件进或者为将来的维护奠定更好的基础而对软件进行修改。行修改。纠错性维护纠错性维护适应性维护适应性维护完善性维护完善性维护预防性维护预防性维护软件维护的特性软件维护的特性1.1.时间长、工作量大、成本高时间长、工作量大、成本高 软件的
6、维护过程是软件生存期中最长,并且相当困难软件的维护过程是软件生存期中最长,并且相当困难的阶段,软件维护的工作量占整个软件生存期的的阶段,软件维护的工作量占整个软件生存期的70%70%以上,以上,而且还在逐年增加。因此,如何减少软件维护的工作量,而且还在逐年增加。因此,如何减少软件维护的工作量,降低软件维护的成本,就成为提高软件维护效率和质量的降低软件维护的成本,就成为提高软件维护效率和质量的关键。关键。2.2.维护的副作用维护的副作用(1 1)修改代码的副作用。在修改源代码时,由于软件的内)修改代码的副作用。在修改源代码时,由于软件的内在结构等原因,任何一个小的修改都可能引起的错误。因在结构等
7、原因,任何一个小的修改都可能引起的错误。因此在修改时必须特别小心。此在修改时必须特别小心。软件维护的特性软件维护的特性(2 2)修改数据的副作用。在修改数据结构时,有可能造成)修改数据的副作用。在修改数据结构时,有可能造成软件设计与数据结构不匹配,因而导致软件出错。数据软件设计与数据结构不匹配,因而导致软件出错。数据副作用就是修改软件信息结构导致的结果。修改数据副副作用就是修改软件信息结构导致的结果。修改数据副作用可以通过详细的设计文档加以控制,此文档中描述作用可以通过详细的设计文档加以控制,此文档中描述了一种交叉作用,把数据元素、记录、文件和其他结构了一种交叉作用,把数据元素、记录、文件和其
8、他结构联系起来。联系起来。(3 3)修改文档的副作用。对软件的数据流、软件结构、模)修改文档的副作用。对软件的数据流、软件结构、模块逻辑等进行修改时,必须对相关技术文档进行相应修块逻辑等进行修改时,必须对相关技术文档进行相应修改。但修改文档过程会产生新的错误,导致文档与程序改。但修改文档过程会产生新的错误,导致文档与程序功能不匹配,缺省条件改变等错误,产生文档的副作用。功能不匹配,缺省条件改变等错误,产生文档的副作用。 为了控制因修改而引起的副作用,应该:按模块把修为了控制因修改而引起的副作用,应该:按模块把修改分组;自顶向下的安排被修改模块的顺序;每次修改改分组;自顶向下的安排被修改模块的顺
9、序;每次修改一个模块。一个模块。3 3、软件维护的困难、软件维护的困难读懂别人的程序困难。读懂别人的程序困难。文档的不一致性。文档的不一致性。软件开发人员和软件维护人员在时间上的差异。软件开发人员和软件维护人员在时间上的差异。软件维护工作是一项难出成果的工作。软件维护工作是一项难出成果的工作。结构化维护结构化维护 指软件开发过程是按照软件工程方法进指软件开发过程是按照软件工程方法进行的,开发各阶段文档齐全,软件的维护过程,有一行的,开发各阶段文档齐全,软件的维护过程,有一整套完整的方案、技术、审定过程。整套完整的方案、技术、审定过程。非结构化维护非结构化维护 只有源程序,缺乏必要的文档说明,只
10、有源程序,缺乏必要的文档说明,难于难于确确定数据结构、系统接口等特性。维护工作令人定数据结构、系统接口等特性。维护工作令人生畏,事倍功半。生畏,事倍功半。软件维护的工作量及模型软件维护的工作量及模型1.1.软件维护的工作量软件维护的工作量 软件维护的费用在整个软件开发费用的软件维护的费用在整个软件开发费用的55%-70%55%-70%,并且所占,并且所占比例在逐年上升。而且维护中还可能产生新的潜在错误。例如比例在逐年上升。而且维护中还可能产生新的潜在错误。例如1970 1970 年维护费用约占软件开发费用的年维护费用约占软件开发费用的40%40%,到,到19901990年维护费用年维护费用所占
11、比例就超过了所占比例就超过了70%70%。另外维护还包含了无形的资源占用,包。另外维护还包含了无形的资源占用,包括大量的使用很多硬件、软件和软件工程师等资源。括大量的使用很多硬件、软件和软件工程师等资源。 在软件维护时,直接影响维护成本和工作量的因素很多,在软件维护时,直接影响维护成本和工作量的因素很多,主要如下:主要如下:(1 1)系统规模大小)系统规模大小 系统规模大小直接影响维护工作量,系统规模越大,仅仅系统规模大小直接影响维护工作量,系统规模越大,仅仅看懂理解就很困难,维护的工作量就更多。系统规模主要由源看懂理解就很困难,维护的工作量就更多。系统规模主要由源代码行数、程序模块数、数据接
12、口文件数、使用数据库规模大代码行数、程序模块数、数据接口文件数、使用数据库规模大小等因素衡量。小等因素衡量。软件维护的工作量及模型软件维护的工作量及模型1.1.软件维护的工作量软件维护的工作量(2 2)程序设计语言)程序设计语言 解决相同的问题选择不同的程序设计语言,得到的程序解决相同的问题选择不同的程序设计语言,得到的程序的规模可能不同。的规模可能不同。(3 3)系统使用年限)系统使用年限 使用年限长的老系统维护比新系统所需要的工作量更多。使用年限长的老系统维护比新系统所需要的工作量更多。(4 4)软件开发新技术的应用)软件开发新技术的应用 软件开发过程中,使用先进的分析和设计技术,以及程序
13、软件开发过程中,使用先进的分析和设计技术,以及程序设计技术,如:面向对象的技术、构件技术、可视化程序设设计技术,如:面向对象的技术、构件技术、可视化程序设计技术等,可以减少维护工作量。计技术等,可以减少维护工作量。(5 5)设计过程中的技术)设计过程中的技术 在具体对软件进行维护时,影响维护工作量的其他因素还在具体对软件进行维护时,影响维护工作量的其他因素还有很多,例如设计过程中应用的类型、数学模型、任务的难有很多,例如设计过程中应用的类型、数学模型、任务的难度、开关与标记、度、开关与标记、IF IF 嵌套深度、索引或下标数等。嵌套深度、索引或下标数等。软件维护的工作量及模型软件维护的工作量及
14、模型2.2.软件维护工作量模型软件维护工作量模型 维护活动分为生产性活动和非生产性活动。生产性活动包括分析评维护活动分为生产性活动和非生产性活动。生产性活动包括分析评价、修改设计和编写程序代码等。非生产性活动包括理解程序代码,解价、修改设计和编写程序代码等。非生产性活动包括理解程序代码,解释数据结构,接口特点和设计约束等。释数据结构,接口特点和设计约束等。BeladyBelady 和和Lehman Lehman 提出软件维护工作模型:提出软件维护工作模型: M=P+K M=P+K* *EXPEXP(C-DC-D)其中:其中:M维护总工作量维护总工作量P生产性活动生产性活动K经验常数经验常数C程
15、序复杂度(由非结构化维护引起的)程序复杂度(由非结构化维护引起的)D对维护软件熟悉程度的度量。对维护软件熟悉程度的度量。 上式可以发现,上式可以发现,C C 越大,越大,D D 越小,那么维护工作量就成指数的增加。越小,那么维护工作量就成指数的增加。C C 增加主要因为软件采用非结构化设计,程序复杂性高;增加主要因为软件采用非结构化设计,程序复杂性高;D D 减小表示维减小表示维护人员不是原来的开发人员,不熟悉程序,理解程序花费太多时间。护人员不是原来的开发人员,不熟悉程序,理解程序花费太多时间。维护费用高达开发费用的维护费用高达开发费用的55% 70%,而,而且逐年上涨。且逐年上涨。维护中还
16、可能引入新的潜在错误。维护中还可能引入新的潜在错误。Belady 和和 Lehman 提出软件维护工作模型:提出软件维护工作模型:M=P+K*EXP(C - D)其中:其中:M维护总工作量维护总工作量P生产性活动生产性活动K经验常数经验常数C程序复杂度(由非结构化维护引起的)程序复杂度(由非结构化维护引起的)D对维护软件熟悉程度的度量。对维护软件熟悉程度的度量。结论结论软件维护的过程软件维护的过程1.1. 维护组织维护组织 除大的软件公司外,通常的在软件维护工作方面,并不除大的软件公司外,通常的在软件维护工作方面,并不保持一个正式的组织。在软件开发部门,确立一个非正式的保持一个正式的组织。在软件开发部门,确立一个非正式的维护组织即非正式的维护管理员来负责维护工作却是绝对必维护组织即非正式的维护管理员来负责维护工作却是绝对必要的。要的。用户用户维护人员维护人员安排改正安排改正性维护性维护确认维确认维护类型护类型维护实施维护实施评价优评价优先级先级进行问进行问题分析题分析复审复审评价错误评价错误严重程度严重程度进行问进行问题分析题分析确定更确定更改要求改要求维护维护要求要求完完 美美 性性