230 likes | 366 Views
软件工程. 第八章 软件维护. 第八章 软件维护. 8 . 1 软件维护的定义 一、软件维护的定义和分类 软件维护是指在软件运行或维护阶段对软件产品所进行的修改。分为四类: ① 改正性维护 在软件交付使用后,由于开发时测试得不彻底或不完全,在运行阶段会暴露一些开发时未能测试出来的错误。为了识别和纠正软件错误,改正软件性能上的缺陷,避免实施中的错误使用,应当进行的 诊断和改正错误的过程 ,这就是改正性维护。. ② 适应性维护
E N D
软件工程 第八章 软件维护
第八章 软件维护 • 8 . 1 软件维护的定义 • 一、软件维护的定义和分类 • 软件维护是指在软件运行或维护阶段对软件产品所进行的修改。分为四类: • ① 改正性维护 • 在软件交付使用后,由于开发时测试得不彻底或不完全,在运行阶段会暴露一些开发时未能测试出来的错误。为了识别和纠正软件错误,改正软件性能上的缺陷,避免实施中的错误使用,应当进行的诊断和改正错误的过程,这就是改正性维护。
② 适应性维护 • 随着计算机技术的飞速发展和更新换代,软件系统所需的外部环境或数据环境可能会更新和升级。为了使软件系统适应这种变化,需要对软件进行相应的修改,这种维护活动称为适应性维护。 • ③扩充与完善性维护 • 在软件的使用过程中,用户往往会对软件提出新的功能与性能要求。为了满足这些要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性。这种情况下进行的维护活动叫做完善性维护。 • ④ 预防性维护 • 采用先进的软件工程方法,对需要维护的软件或软件中的某一部分重新进行设计、编制和测试。
三类维护占总的维护比例 维护在软件生存期所占比例
8.2 软件维护的特点 • 影响维护工作量的因素 • 1 )系统大小 • 2 )程序设计语言 • 3 )系统年龄 • 4 )数据库技术的应用 • 5 )先进的软件开发技术 • 6 )其他。例如,应用的类型、数学模型、任务的难度、开关与标记、 IF 嵌套深度、索引或下标数等。
8.2.1 结构化维护与非结构化维护差别巨大 • 非结构化维护的代价很高,这种维护方式是没有使用软件工程方法学开发出来的软件的必然结果。 • 以完整的软件配置为基础的结构化维护,是在软件开发中应用软件工程方法学的结果。虽然有了软件的完整配置并不能保证维护时没有问题,但是确实能减少精力的浪费并且可以提高维护的总体质量。
8 .2 . 2 维护的代价高昂 • 维护活动分为生产性活动和非生产性活动。 • 生产性活动:分析评价、修改设计和编写程序代码等; • 非生产性活动:理解程序代码功能、数据结构、接口特点和设计约束等。 • 维护成本公式:M=P+Ke (c-d) • 说明: • M :维护工作总工作量 P:生产性工作量 • K:经验常数 c: 是复杂度 • d:对该软件熟悉程度的度量
8.2.3 维护的问题很多 • ( 1 )理解别人写的程序通常非常困难. • ( 2 )需要维护的软件无文档或不全. • ( 3 )软件人员流动性大. • ( 4 )设计时未考虑将来修改需要,修改困难. • ( 5 )维护工作无吸引力,缺乏成就感.
8. 3 软件维护过程 • 首先建立维护组织,确定报告和评价过程,为每个维护要求规定一个标准化的事件序列,并记录维护活动和规定复审标准。 • 一、维护组识 • 所有软件维护申请应按规定的方式提出 • 维护机构通常提供“维护申请报告”或称“软件问题报告”由申请维护的用户填写。 • 维护机构内部要写“软件修改报告”
软件维护工作流程 • 必要的技术工作 • 修改软件需求说明 • 修改软件设计 • 设计评审 • 对源程序做必要修改 • 单元测试 • 集成测试(回归测试) • 确认测试 • 软件配置评审等。
8 .4 软件的可维护性 • 衡量软件质量的几个主要质量特性: • 可维护性 • 可使用性 • 可靠性 • 一、软件可维护性的定义 • 指纠正软件系统出现的错误和缺陷,以及为满足新的要求进行修改、扩充或压缩的容易程度。
二、可维护性的度量(1) • 可理解性:人们通过阅读源代码和相关文档,了解程序功及其如何运行的容易程度。 • 可靠性:表明一个程序按照用户的要求和设计目标,在给定的一段时间内正确执行的概率。 • 可测试性:表明诊断和测试的容易程度。 • 可修改性:表明程序容易修改的程度。
二、可维护性的度量(2) • 可移植性:表明把程序从一种计算环境转移到另一种计算环境的难易程度。 • 可重用性:指同一个软件(或软件成份)不做修改或稍加改动,就可以在不同环境中多次重复使用。
8.4.2 文档 • 文档比程序代码更重要 • 文档分为用户文档和系统文档两类。 • 用户文档主要描述系统功能和使用方法,不关心这些功能是怎样实现的。 • 系统文档指从问题定义、需求说明到验收测试这样系列的有关文档。
8.4.3 可维护性复审 • 可维护性复审的目的是:保证软件配置的所有成分是完整、一致和可理解的,而且为了便于修改和管理已经编目归档了。 • 维护应该针对整个软件配置,不应该只修改源程序代码。如果源程序代码的修改没出有反映在设计文档或用户文档中,则会产生严重的后果。
8.5 预防性维护 • 预防性维护:就是主了提高未来的可维护性或可靠性,而主动地修改软件。 • 把今天的方法学应用到昨天的软件系统上,以支持明天的需求。
8. 6 软件再工程过程 • 预防性维护也称为软件再工程 • 一、逆向工程(reverse engineering) • 软件的逆向工程是分析程序,力图在比源代码更高的抽象层次上建立程序表示的过程,是一个设计恢复的过程,逆向工程工具可以从已有的程序中抽取数据结构、体系结构和程序设计信息。 • 二、正向工程 • 应用现代软件工程的概念、原理、技术和方法,重新开发现有的某个应用系统。
三、软件再工程( Re-engineering) • 软件再工程是一个工程过程,它将逆向工程、重构和正向工程组合起来,旨在对现存的大量软件系统进行挖掘、整理,重新获得设计信息,用这些信息改建或重构现有的系统,以改进它的综合质量; • 或者得到有用的软件构件,对已有软件构件进行维护以延长其生存期。 • 再工程的基础是系统理解,包括对运行系统、源代码、设计、分析、文档等的全面理解。但在很多情况下,由于各类文档的丢失,只能对源代码进行理解,即程序理解。
补充:提高可维护性的方法 • 建立明确的软件质量目标和优先级 • 相互促进的特性:可理解性和可测试性 • 可理解性和可修改性; • 相互抵触的特性:效率和可移植性 • 效率和可修改性 • 各特性的相对重要性应随着程序的用途不同、计算环境的不同而不同。 • 使用提高软件质量的技术和工具 • 如:模块化、详细的设计文档、结构化设计、程序内部的文档和良好的高级程序设计语言
进行明确的质量保证审查 • 检查点复审、验收检查、周期性地维护审查、对软件包进行检查。 • 选择可维护的程序设计语言 • 改进程序的文档 • 开发软件时考虑到维护