软件工程概论软件工程概论 Software Engineering第第11章章 软件维护软件维护11.1 系统的变化系统的变化11.2 软件维护的基本内容和特点软件维护的基本内容和特点11.3 软件维护的实施软件维护的实施11.4 软件的可维护性软件的可维护性11.5 软件维护的副作用软件维护的副作用11.6 软件再工程软件再工程11.1 系统的变化系统的变化软件维护软件维护就是在软件已经交付使用之后,为了改正错误就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程或满足新的需要而修改软件的过程维护活动维护活动1.改正性维护:在任何大型程序的使用期间,用户发现程改正性维护:在任何大型程序的使用期间,用户发现程序错误,并且把问题报告给维护人员,进行诊断和改正序错误,并且把问题报告给维护人员,进行诊断和改正错误的过程错误的过程2.适应性维护:为了和变化了的环境适当地配合而进行的适应性维护:为了和变化了的环境适当地配合而进行的修改软件的活动修改软件的活动3.完善性维护:在使用软件的过程中用户提出增加新功能完善性维护:在使用软件的过程中用户提出增加新功能或修改已有功能的建议,还可能提出一般性的改进意见。
或修改已有功能的建议,还可能提出一般性的改进意见4.预防性维护:为了改进未来的可维护性或可靠性,或为预防性维护:为了改进未来的可维护性或可靠性,或为了给未来的改进奠定更好的基础而修改软件了给未来的改进奠定更好的基础而修改软件11.1 系统的变化系统的变化软件系统的变化:系统的需求越依赖于客观世界,软件系统的变化:系统的需求越依赖于客观世界,就越倾向于变化就越倾向于变化系统的类型系统的类型S-系统:有规格说明定义或来源于规格说明在系统:有规格说明定义或来源于规格说明在这些系统中特定的问题是根据它应用的整个环境这些系统中特定的问题是根据它应用的整个环境来描述的来描述的P-系统:可以用抽象的方式描述这个问题然后系统:可以用抽象的方式描述这个问题然后从抽象的观点出发书写系统的需求说明近似解从抽象的观点出发书写系统的需求说明近似解E-系统:嵌入到现实世界中的,而且随着世界的系统:嵌入到现实世界中的,而且随着世界的变化而变化逐个解决方案建立在涉及的抽象过程变化而变化逐个解决方案建立在涉及的抽象过程的模型的基础上的模型的基础上11.1 系统的变化系统的变化系统生命周期中的变化系统生命周期中的变化软件开发阶段的改变导致变化的活动 相应需要改变的手工材料 需求分析 需求说明 系统设计 架构设计说明 技术设计说明 程序设计 程序设计说明 程序实现 程序代码 程序文档 模块测试 测试计划 测试脚本 系统测试 测试计划 测试脚本 系统提交 用户文档 培训工具 操作员文档 系统指南 程序员指南 培训课程11.1 系统的变化系统的变化系统的生命范围系统的生命范围与系统的开发与维护相联系的,从创作到淘汰的一与系统的开发与维护相联系的,从创作到淘汰的一系列的全部耗费称为系列的全部耗费称为生命循环成本生命循环成本。
通常,根据比较原始系统、修改系统和新系统生命通常,根据比较原始系统、修改系统和新系统生命循环的成本来决定是维护、重建还是取而代之循环的成本来决定是维护、重建还是取而代之11.2 软件维护的基本内容和特点软件维护的基本内容和特点软件维护分类:软件维护分类:改正性维护改正性维护在软件开发阶段,由于测试技术的在软件开发阶段,由于测试技术的局限性,必然会有某些错误未被发现一些隐藏下局限性,必然会有某些错误未被发现一些隐藏下来的错误在运行过程中,在特定的条件下就会显来的错误在运行过程中,在特定的条件下就会显现出来被用户发现针对这种错误进行修改的维现出来被用户发现针对这种错误进行修改的维护就是改正性维护护就是改正性维护适应性维护适应性维护软件运行的软硬件环境随着计算机软件运行的软硬件环境随着计算机技术的飞速发展也日新月异为适应这种环境的技术的飞速发展也日新月异为适应这种环境的改变而进行的维护就是适应性维护改变而进行的维护就是适应性维护11.2 软件维护的基本内容和特点软件维护的基本内容和特点完善性维护完善性维护在软件的使用过程中,用户对软件在软件的使用过程中,用户对软件功能和性能的要求总是不断变化的。
例如快捷键功能和性能的要求总是不断变化的例如快捷键的修改、界面风格的修改为了满足这类要求进的修改、界面风格的修改为了满足这类要求进行的维护就是完善性维护行的维护就是完善性维护预防性维护预防性维护为了提高软件的可维护性和可靠性为了提高软件的可维护性和可靠性而进行的维护就是预防性维护而进行的维护就是预防性维护11.2 软件维护的基本内容和特点软件维护的基本内容和特点软件维护的特点软件维护的特点非结构化非结构化维护:维护:软件的配置中只软件的配置中只有代码部分,而有代码部分,而没有相应的文档没有相应的文档说明结构化结构化维护:软维护:软件的配置是完整件的配置是完整无缺的11.2 软件维护的基本内容和特点软件维护的基本内容和特点软件系统成本控制:软件维护费用、工作量软件系统成本控制:软件维护费用、工作量软件维护的工作量分为软件维护的工作量分为助动性助动性(理解代码、判明数(理解代码、判明数据结构、接口特性等为主的维护活动)和据结构、接口特性等为主的维护活动)和生产性生产性(分析和评价、设计修改和实现等维护活动)分析和评价、设计修改和实现等维护活动)维护总的工作量的估算公式:维护总的工作量的估算公式:M=P+Ke(C-D)式中:式中:M表示维护活动的总工作量;表示维护活动的总工作量;P表示生产性工表示生产性工作量;作量;K表示经验常数;表示经验常数;C表示软件的维护复杂度;表示软件的维护复杂度;D表示维护人员对软件的熟悉度;表示维护人员对软件的熟悉度;Ke(C-D)是助动性是助动性工作量。
工作量11.2 软件维护的基本内容和特点软件维护的基本内容和特点影响维护工作的主要因素:影响维护工作的主要因素:系统规模系统规模配套的文档配套的文档其他因素其他因素11.2 软件维护的基本内容和特点软件维护的基本内容和特点维护中的问题维护中的问题理解详细设计人员的代码是很困难的理解详细设计人员的代码是很困难的文档不规范文档不规范开发人员不能实时参与开发人员不能实时参与分析和设计的缺陷分析和设计的缺陷维护工作的乏味维护工作的乏味用户使用者苛刻的要求用户使用者苛刻的要求11.2 软件维护的基本内容和特点软件维护的基本内容和特点软件维护的过程软件维护的过程11.2 软件维护的基本内容和特点软件维护的基本内容和特点维护组织:维护人员、维护管理员、系统管理员、维护组织:维护人员、维护管理员、系统管理员、修改控制决策机构以及配置管理员是该模式维护组修改控制决策机构以及配置管理员是该模式维护组织的一般组成人员织的一般组成人员修改控制部门维护申请配置管理人员维护控制员系统管理员维护工作人员11.2 软件维护的基本内容和特点软件维护的基本内容和特点维护的报告和审核:维护的报告和审核:维护申请单(维护申请单(Maintenance Request Form,MRF):):适应性或者完善性维护。
需要附加简短的修改需求适应性或者完善性维护需要附加简短的修改需求说明,即需求规格说明书中应做哪些改动,如增加说明,即需求规格说明书中应做哪些改动,如增加功能或修改界面等功能或修改界面等软件问题报告单(软件问题报告单(Software Problem Report,SPR):改正性维护提供完整的错误情况说明,):改正性维护提供完整的错误情况说明,出错信息、错误发生环境等,包括交互数据清单和出错信息、错误发生环境等,包括交互数据清单和其他有关信息等其他有关信息等软件修改报告单(软件修改报告单(Software Change Report,SCR):):软件修改的真正依据是软件修改的真正依据是SCR包括:为满足软件问包括:为满足软件问题报告实际需要的工作量所需修改变动性质请题报告实际需要的工作量所需修改变动性质请求修改的优先级修改的时候数据求修改的优先级修改的时候数据11.2 软件维护的基本内容和特点软件维护的基本内容和特点维护过程的事件流维护过程的事件流维护申请类型类型严重性评价和分类立即进行评价优先次序评价优先次序行动通知申请者排列优先级从优先次序中选择下一任务应用软件工程方法计划组织应用资源开发新软件工作完成其他错误适应性完善性非常严重不严重否是是否11.2 软件维护的基本内容和特点软件维护的基本内容和特点保存维护记录:要将维护阶段产生的文档保存到原保存维护记录:要将维护阶段产生的文档保存到原有文档中去,完善整个软件的文档说明。
有文档中去,完善整个软件的文档说明新产生的维护记录应该包括三类信息:维护前软新产生的维护记录应该包括三类信息:维护前软件运行情况(程序行数、指令条数、运行错误信件运行情况(程序行数、指令条数、运行错误信息等)、维护对软件产生的修改情况(维护类型、息等)、维护对软件产生的修改情况(维护类型、SCR单、变动的程序行数与功能、维护周期等)单、变动的程序行数与功能、维护周期等)以及数据变更情况以及数据变更情况11.2 软件维护的基本内容和特点软件维护的基本内容和特点评价维护活动评价维护活动程序运行的平均失效次数,失效次数程序运行的平均失效次数,失效次数/运行次数运行次数每一类维护活动的总人时数每一类维护活动的总人时数每个程序、每种语言、每种维护类型所做的平均每个程序、每种语言、每种维护类型所做的平均程序变动数程序变动数维护阶段修改每条语句平均花费的人时数维护阶段修改每条语句平均花费的人时数维护每种语言平均花费的人时数维护每种语言平均花费的人时数一张一张MRF或者或者SPR的平均周转时间的平均周转时间各种维护类型所占的百分比各种维护类型所占的百分比11.2 软件维护的基本内容和特点软件维护的基本内容和特点软件维护的技术软件维护的技术按照目的的不同,软件维护的技术分为两类:按照目的的不同,软件维护的技术分为两类:面向维护的技术面向维护的技术。
面向维护的技术是软件开发阶面向维护的技术是软件开发阶段用来减少错误,提高软件可维护性的技术,它段用来减少错误,提高软件可维护性的技术,它涉及软件开发的各个阶段涉及软件开发的各个阶段维护支援技术维护支援技术维护支援技术是在软件维护阶段维护支援技术是在软件维护阶段用来提高维护作业的效率和质量的技术用来提高维护作业的效率和质量的技术11.4 软件的可维护性软件的可维护性软件的软件的可维护性可维护性是指软件被理解、改正、调整和改是指软件被理解、改正、调整和改进的容易程度进的容易程度软件的可维护性、可使用性和可靠性是衡量软件质软件的可维护性、可使用性和可靠性是衡量软件质量的量的3个主要特征,也是开发人员与用户最关心的问个主要特征,也是开发人员与用户最关心的问题但是,到目前为止还没有普遍适用的定量度量题但是,到目前为止还没有普遍适用的定量度量标准11.4 软件的可维护性软件的可维护性软件度量学的软件度量学的7个质量特性个质量特性可理解性通过阅读源代码和相关文档,了解程序功能可理解性通过阅读源代码和相关文档,了解程序功能及其如何运行,对源程序的代码容易理解及其如何运行,对源程序的代码容易理解按照用户的要求和设计目标,一个程序在给定可靠性。
按照用户的要求和设计目标,一个程序在给定的一段时间内正确执行的概率的一段时间内正确执行的概率可测试性表明论证程序正确性的容易程度可测试性表明论证程序正确性的容易程度可修改性表明程序容易修改的程度可修改性表明程序容易修改的程度可移植性表明程序转移到一个新的计算机环境的容易可移植性表明程序转移到一个新的计算机环境的容易程度的大小程度的大小表明一个程序能执行预定功能而又不浪费其资源效率表明一个程序能执行预定功能而又不浪费其资源的程度可使用性表明用户使用方便、实用及易于使用的程度可使用性表明用户使用方便、实用及易于使用的程度11.4 软件的可维护性软件的可维护性间接地度量可维护性:维护全过程中查错间接地度量可维护性:维护全过程中查错改错改错验验证的一个周期,即从检测出软件运行时出现的错误开证的一个周期,即从检测出软件运行时出现的错误开始直到错误改正完成并经回归测试验证这段时间始直到错误改正完成并经回归测试验证这段时间觉察到问题所用的时间觉察到问题所用的时间收集维护工具所用的时间收集维护工具所用的时间分析问题所需的时间分析问题所需的时间形成修改说明书所用的时间形成修改说明书所用的时间修改设计与源代码所用的时间。
修改设计与源代码所用的时间测试(部分、整体)所用的时间测试(部分、整体)所用的时间维护复审所用的时间维护复审所用的时间完全恢复所用的时间完全恢复所用的时间11.4 软件的可维护性软件的可维护性提高可维护性的方法提高可维护性的方法建立明确的软件质量目标建立明确的软件质量目标使用先进的软件开发技术和工具使用先进的软件开发技术和工具进行明确的质量保证审查进行明确的质量保证审查选择可维护的程序设计语言选择可维护的程序设计语言改进程序文档改进程序文档11.5 软件维护的副作用软件维护的副作用软件维护的副作用:因修改软件而造成的错误或其软件维护的副作用:因修改软件而造成的错误或其他不希望出现的情况他不希望出现的情况代码副作用代码副作用删除或修改一个子程序删除或修改一个子程序删除或改变一个语句标号删除或改变一个语句标号删除或改变一个标识符删除或改变一个标识符为改进执行性能所做的修改为改进执行性能所做的修改改变文件的打开或关闭改变文件的打开或关闭改变逻辑运算符改变逻辑运算符把设计修改翻译成主代码的修改把设计修改翻译成主代码的修改对边界条件的逻辑测试所做的修改对边界条件的逻辑测试所做的修改11.5 软件维护的副作用软件维护的副作用数据副作用数据副作用重新定义局部和全程常量。
重新定义局部和全程常量重新定义记录或文件格式重新定义记录或文件格式增大或减小一个数组或高阶数据结构的大小增大或减小一个数组或高阶数据结构的大小修改全程数据修改全程数据重新初始化控制标记或指针重新初始化控制标记或指针重新排列重新排列IO或子程序的自变量或子程序的自变量文档副作用文档副作用11.6 软件再工程软件再工程软件再工程软件再工程就是将新技术和新工具应用于旧的软件就是将新技术和新工具应用于旧的软件以期增强它的功能,提高其性能的一种以期增强它的功能,提高其性能的一种预防性预防性维护维护技术软件再工程不同于以完成纠错或适应需求变化为目软件再工程不同于以完成纠错或适应需求变化为目的的一般的软件维护,它是运用逆向工程、重构等的的一般的软件维护,它是运用逆向工程、重构等技术,在充分理解原有软件的基础上,进行分解、技术,在充分理解原有软件的基础上,进行分解、综合,并重新构建软件,用以提高软件的各种性能综合,并重新构建软件,用以提高软件的各种性能11.6 软件再工程软件再工程软件再工程的过程软件再工程的过程软件再工程模型,软件再工程模型,6类活动:类活动:库存目录分析库存目录分析文档重构文档重构。
逆向工程逆向工程代码重构代码重构数据重构数据重构正向工程正向工程11.6 软件再工程软件再工程软件再工程的方法软件再工程的方法“大爆炸大爆炸”方法增量方法增量方法演化方法演化方法小结小结本章主要介绍了软件维护范畴的相关知识软件维本章主要介绍了软件维护范畴的相关知识软件维护是软件生命周期中持续时间最长的一个阶段,所护是软件生命周期中持续时间最长的一个阶段,所需要的人力、费用等资源也相当大维护的内容不需要的人力、费用等资源也相当大维护的内容不仅仅是对错误的修改(改正性维护),还包括适应仅仅是对错误的修改(改正性维护),还包括适应性维护、完善性维护和预防性维护整个维护过程性维护、完善性维护和预防性维护整个维护过程需要遵循一定的顺序(软件维护的具体实施),通需要遵循一定的顺序(软件维护的具体实施),通过一系列科学严格的步骤来完成一次维护过一系列科学严格的步骤来完成一次维护。