《《软件维护工程》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《软件维护工程》PPT课件.ppt(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第六章第六章 软件维护工程软件维护工程软件维护的概念软件维护的概念软件维护是在软件已交付给用户使用后,为了改正错误,或者满足用户新的需求而修改软件的过程。软件维护一般不包括重大体系结构的修改。软件维护的原因:修改软件中的错误;软件运行环境发生了变化;用户要求增加软件新的功能或提高软件的性能。软件维护分类n纠错性维护n适应性维护n完善性维护n预防性维护 三类维护所占比例三类维护所占比例:其它维护其它维护 5%5%适应性适应性维维 护护 25%25%改正性改正性维维 护护 20%20%扩充与完扩充与完善性维护善性维护 50%50%改正性维护占全部维护量的比率已从改正性维护占全部维护量的比率已从80
2、80年代初年代初的的20%20%大幅度下降大幅度下降,90,90年代初一些公司的产品年代初一些公司的产品差错率已接近于零差错率已接近于零各类维护活动的根本目的是各类维护活动的根本目的是延长软件生存期延长软件生存期其它维护其它维护 4%4%软件软件生存生存周期周期软件诞生软件诞生计计划划分分析析设设计计编编码码测测试试运行和维护运行和维护(简称维护简称维护)改善期改善期 稳定期稳定期 陈旧期陈旧期1 1年年-10-10年年2 2个月个月-2-2年年重构重构软件工程周期软件工程周期软件维护过程软件维护过程 影响软件维护工作量的因素:n系统的大小。n程序设计语言。n系统的年龄。n数据库技术的应用。n
3、先进的软件开发技术。n其他因素。例如,在程序中使用的数学模型、任务的难度、IF嵌套的深度开关和标记等等,都会对维护工作有影响。MP+Ke e=(c c-d d)M M :维护工作总工作量维护工作总工作量P P:生产性工作量生产性工作量K K :经验常数经验常数c c:复杂度复杂度d d:对该软件熟悉程度的度量对该软件熟悉程度的度量维护的成本维护的成本该模型说明,如果没有一个好的软件开发途径,原来的开发人员不能参加维护工作,则维护工作量将按指数级增加。修改修改负责人负责人维维护申请护申请系统监督员系统监督员配置管理员配置管理员维维护护组织组织 维护人员维护人员维护管理员维护管理员维护申请报告维护
4、申请报告 n内容:n(1)所需要修改的性质;n(2)申请修改的优先级;n(3)为满足某一项维护申请所需要的工作量;n(4)预计修改后的状况。软件维护流程软件维护流程 n见教材图维护记录维护记录维护过程中作应记录的数据维护过程中作应记录的数据F程序标识程序标识F源程序语句数目源程序语句数目F机器代码指令条数机器代码指令条数F.F.以收集的数据为基础构造维护数据库以收集的数据为基础构造维护数据库,供维护评价使用供维护评价使用.软件维护评价软件维护评价 n可供参考的度量值是:n(1)程序每次运行的平均失效的次数;n(2)各类维护活动所花费的总“人时”数;n(3)每个程序、每种语言、每种维护类型所做的
5、程序变动平均数;n(4)因为维护而增加或删除一个源程序语句,平均花费的“人时”数;n(5)维护每一种语言的程序所花费的“人时”数;n(6)维护申请报告的平均处理时间;n(7)各类维护申请的百分比。修改程序的副作用修改程序的副作用修改代码的副作用修改代码的副作用修改数据的副作用修改数据的副作用修改文档的副作用修改文档的副作用重新验证程序重新验证程序 n静态确认。在软件修改时,可能会产生新的错误,为此,要进行必要的检查。n计算机确认。通过计算机对修改的程序进行确认测试。例如,要确认测试的顺序,首先测试经过修改的部分,再测试没有修改的部分,然后,把它们集成起来测试;准备好标准的和有效的测试用例;充分
6、利用软件工具帮助测试;在确认测试过程中,邀请用户参加。n文档验收。经过修改的软件交付给用户前,维护主管部门要检查文档。例如,所有的文档是否完备,是否更新,文档与程序是否一致;全部的测试用例和测试结果是否都正确记载;软件配置是否都有了副本;维护的工序和责任是否已经确定。维护中的典型问题维护中的典型问题(1)(1)难以跟踪软件版本的进化过程难以跟踪软件版本的进化过程,软件的变化未在文档中反映出来软件的变化未在文档中反映出来.(2)(2)难以跟踪软件的创建过程难以跟踪软件的创建过程.(3)(3)难以读懂他人程序难以读懂他人程序.(4)(4)无文档或不全无文档或不全.(5)(5)软件人员流动性大软件人
7、员流动性大.(6)(6)设计时未考虑修改需要设计时未考虑修改需要,修改困难修改困难.(7)(7)维护工作无吸引力维护工作无吸引力,缺乏成就感缺乏成就感.软件可维护性软件可维护性软件软件可维可维护性的定义护性的定义 软件可维护性是指纠正软件系统出现的软件可维护性是指纠正软件系统出现的错误和缺陷,以及为满足新的要求进错误和缺陷,以及为满足新的要求进行修改、扩充或压缩的容易程度。行修改、扩充或压缩的容易程度。软件的可维护性度量软件的可维护性度量 n(1)可理解性n可理解性表明人们通过阅读源代码和相关的文档,了解程序功能以及如何运行的容易程度。例如,模块化、程序设计风格,程序结构化、完整性等。n(2)
8、可靠性n可靠性表明一个程序按照用户的要求和设计目标,在给定的一段时间内正确执行的概率。可靠性是度量软件整体质量的一个重要指标之一,n(3)可测试性n可测试性表明论证程序正确性的容易程度。一个可测试程序应当是可理解的、可靠的、简单的。因为程序越简单,要证明它的正确性就越容易;要设计有效的和合适的测试用例,重要的是要理解程序。n(4)可修改性n软件可修改性表明程序容易修改的程度。一个可修改的程序,应该具有可理解性、通用性、灵活性等等。通用性是指程序适用于各种功能变化而无须修改;灵活性是指能够容易地对程序进行修改。n(5)可移植性n软件可移植性表明程序能转移到另一个新环境的可能性大小,或者表明程序可
9、以容易地、有效地在各种各样的计算环境中运行的容易程度。一个可移植的程序应具有良好的结构和灵活性,即不依赖具体的硬件环境或操作系统。n(6)效率n软件的效率表明了一个程序能完成预定的功能,但又不浪费资源的程度。这些资源可以包括机器的内存容量、外存容量、通道容量等,以及执行时间。n(7)可用性n软件的可用性定义为程序方便、实用、易使用的程度。例如,界面友好、具有在线帮助功能、容错性好等,不因为用户的误操作而陷入混乱状态。可维护性的度量可维护性的度量度量程序可维护性的度量程序可维护性的7 7个特性在各类维护个特性在各类维护中的侧重点中的侧重点 改正性维护改正性维护 适应性维护适应性维护 完善性维护完
10、善性维护可理解性可理解性 可测试性可测试性 可修改性可修改性 可靠性可靠性 可移植性可移植性 可使用性可使用性 效率效率 提高可维护性的方法提高可维护性的方法F 建立明确的软件质量目标和优先级建立明确的软件质量目标和优先级F 使用提高软件质量的技术和工具使用提高软件质量的技术和工具F 进行明确的质量保证审查进行明确的质量保证审查F 选择可维护的程序设计语言选择可维护的程序设计语言F 改进程序的文档改进程序的文档F 开发软件时考虑到维护开发软件时考虑到维护软件再工程软件再工程什么是软件再工程什么是软件再工程在软件复用中在软件复用中,有问题是与现有系统密切相关的有问题是与现有系统密切相关的例如例如
11、:现有软件系统如何适应当前技术的发展及需求的变现有软件系统如何适应当前技术的发展及需求的变化化,采用更易于理解的、适应变化的、可复用的系统软采用更易于理解的、适应变化的、可复用的系统软件构架并提炼出可复用的软件构件件构架并提炼出可复用的软件构件?现存大量的遗产软件系统现存大量的遗产软件系统(Legacy Software)(Legacy Software)由于由于技术的发展技术的发展,正逐渐退出使用正逐渐退出使用,如何对这些系统进行挖掘、如何对这些系统进行挖掘、整理整理,得到有用的软件构件得到有用的软件构件?已有的软件构件随着时间的流逝会逐渐变得不可已有的软件构件随着时间的流逝会逐渐变得不可使
12、用使用,如何对它们进行维护如何对它们进行维护,以延长其生命期以延长其生命期,充分利用充分利用这些可复用构件这些可复用构件?软件再工程软件再工程(Software Reengineering)(Software Reengineering)正正是解决上述问题的主要技术手段。是解决上述问题的主要技术手段。软件再工程软件再工程是一类软件工程活动,是一类软件工程活动,是一个工程过程是一个工程过程,它将它将逆向工程逆向工程、重构重构和和正正向工程向工程组合起来组合起来,将现存系统重新构造为新将现存系统重新构造为新的形式。再工程的基础是系统理解的形式。再工程的基础是系统理解,包括对包括对运行系统、源代码、
13、设计、分析、文档等运行系统、源代码、设计、分析、文档等的全面理解。但在很多情况下的全面理解。但在很多情况下,由于各类文由于各类文档的丢失档的丢失,只能对源代码进行理解只能对源代码进行理解,即程序即程序理解。理解。它能够使我们:它能够使我们:F 增进对软件的理解;增进对软件的理解;F 提高软件自身的可维护性、复用性或演化性提高软件自身的可维护性、复用性或演化性.软件再工程过程模型软件再工程过程模型代码重构代码重构数据重构数据重构正向工程正向工程库存目录分析库存目录分析文档重构文档重构逆向工程逆向工程逆向工程逆向工程逆向工程逆向工程(反推工程反推工程reverse engineering)reve
14、rse engineering)从现有软件恢复设计信息从现有软件恢复设计信息(有用的维护信息有用的维护信息)设计的设计的恢复过程恢复过程非结构化、无文档非结构化、无文档的源代码或目标代码的源代码或目标代码软件的全部文档软件的全部文档软件再工程相关术语间关系软件再工程相关术语间关系 信信息息库库1 1类视图:类视图:非过程性描述、元描述非过程性描述、元描述例:规格说明例:规格说明再工程再工程3 3类视图:类视图:过程性描述过程性描述例:源程序例:源程序再工程再工程2 2类视图:类视图:伪过程性描述、结构性描述伪过程性描述、结构性描述例:例:DFDDFD、PDLPDL A2 A2类视图:类视图:分
15、析分析再工程再工程逆向工程逆向工程设计恢复设计恢复再工程再工程逆向工程逆向工程设计恢复设计恢复再工程再工程 A1 A1类视图:类视图:分析分析 A3 A3类视图:类视图:分析分析分解分解综合生综合生成视图成视图软件视图软件视图 Software view有关软件的一种表达形式或报告;有关软件的一种表达形式或报告;视图分类:视图分类:F1 1类视图:类视图:F2 2类视图:类视图:F3 3类视图:类视图:FA类视图:类视图:伴随上述各类的分析视图;伴随上述各类的分析视图;A1类视图是对类视图是对1 1类视图的分析信息;类视图的分析信息;A2类视图是有关类视图是有关2 2类视图的分析信息;类视图的
16、分析信息;A3类视图是由类视图是由3 3类视图得到。类视图得到。软件视图示例信息库信息库视图编辑器视图编辑器DFD视图编辑器视图编辑器Petri网网视图编辑器视图编辑器ERA图图视图编辑器视图编辑器跟踪矩阵跟踪矩阵X XX XX XReq1 Req2Prog1Prog2Prog3视图编辑器视图编辑器程序结构图程序结构图视图编辑器视图编辑器流程图流程图视图编辑器视图编辑器规格说明规格说明再工程信息库及其产品软件文档软件文档分析结果分析结果信息库设计成果设计成果规格说明规格说明各种图各种图度量值度量值分析、分解器分析、分解器源程序或其模板源程序或其模板(进入点进入点)源程序源程序自动进行再工程的过
17、程软件软件的新视图语法分析器语义分析器视图合成器信息库其他产品经过再工程经过再工程过程可获得过程可获得的信息的信息格式格式图形图形文档文档度量值度量值逻辑逻辑报告报告软件再工程技术软件再工程技术再工程课题再工程课题 相关技术相关技术重构重构文档重写、加注释、更新文档文档重写、加注释、更新文档复用工程复用工程重新划分模块重新划分模块数据再工程数据再工程业务过程再工程业务过程再工程可维护性分析、业务量分析、经济分析可维护性分析、业务量分析、经济分析理解软件理解软件改进软件改进软件获取、保存及获取、保存及扩充软件的知识扩充软件的知识分解分解逆向工程、恢复设计逆向工程、恢复设计对象恢复对象恢复程序理解
18、程序理解知识库及变换知识库及变换浏览浏览分析、度量分析、度量逆向工程、恢复设计逆向工程、恢复设计1.1.改进软件改进软件(1 1)软件重构)软件重构 对软件进行改造,使其易于理解或易于维护。对软件进行改造,使其易于理解或易于维护。重构是实现软件再工程全面自动化的第一步重构是实现软件再工程全面自动化的第一步源程序重构的源程序逻辑逻辑格式格式图形图形文档文档度量度量报告报告再构器再构器可获得可获得的信息的信息Restructurer软件重构示意图1.1.改进软件改进软件(2 2)文档重写、加注释、更新文档)文档重写、加注释、更新文档信息源:源程序源程序设计资料设计资料规格说明规格说明变更记录变更记
19、录管理人员管理人员程序人员程序人员文档:嵌入式注释嵌入式注释设计资料设计资料规格说明规格说明测试数据测试数据层次图层次图检查:再测试再测试插入注释插入注释生成图形生成图形生成报告生成报告文档重写示意图1.1.改进软件改进软件(3)(3)复用工程:复用工程:目的是修改软件,使其更易于复用目的是修改软件,使其更易于复用再说明再说明再生成再生成分类分类证明证明附加查找描述信息附加查找描述信息查找利用再工程实现软件复用的过程应用问题应用问题部件部件可复用部件可复用部件可复用库可复用库:可复用源程序可复用源程序复用复用再工程器析取析取2.2.理解软件理解软件(1 1)浏览)浏览(2 2)分析与度量)分析
20、与度量 理解程序特性理解程序特性(如复杂性如复杂性)的重要方法的重要方法.与再工程相关的技术与再工程相关的技术:程序分片程序分片 控制流复杂性度量控制流复杂性度量 耦合性度量耦合性度量(3 3)逆向工程与设计恢复)逆向工程与设计恢复逆向工程恢复信息的级别逆向工程恢复信息的级别:(1)(1)实现级实现级:程序的抽象语法程序的抽象语法 树、符号表等信息树、符号表等信息(2)(2)结构级结构级:反映程序分量之间反映程序分量之间 相互依赖关系的信相互依赖关系的信 息,如调用图、结息,如调用图、结 构图等构图等.(3)(3)功能级功能级:反映程序段功能和反映程序段功能和 段间关系的信息段间关系的信息(4
21、)(4)领域级领域级:反映程序分量与应反映程序分量与应 用领域概念间对应用领域概念间对应 关系的信息关系的信息抽抽象象级级别别低低高高信息的抽象信息的抽象级别越高级别越高,它与代码距它与代码距离越远离越远,通通过逆向工程过逆向工程恢复的难度恢复的难度越大越大,自动自动工具支持的工具支持的可能性变小可能性变小逆向工程逆向工程源程序源程序目标代码目标代码反汇编、反编译反汇编、反编译程序分析技术程序分析技术:程序结构分析工具程序结构分析工具 程序功能分析工具程序功能分析工具 源程序源程序概要设计概要设计详细设计详细设计概要设计概要设计需求分析需求分析3.3.获取、保存和扩充软件的知识获取、保存和扩充软件的知识(1 1)分解)分解 从程序中找出对象和关系从程序中找出对象和关系,存入信息库存入信息库.分解器举例分解器举例:UNIX中的中的lexlex和和yaccyacc(2 2)对象恢复)对象恢复 从源程序中取得对象从源程序中取得对象,将非面向对象程序转将非面向对象程序转 换为面向对象程序换为面向对象程序.(3 3)程序理解)程序理解(4 4)知识库和程序变换)知识库和程序变换软件再工程的风险软件再工程的风险 n(1)过程风险n(2)人员风险n(3)应用问题风险n(4)技术风险n(5)工具风险n(6)策略风险