第八章 软件维护
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6.代码重构与正向工程有何相同之处?有 何不同之处?
28
25
(9)尽量减少程序模块的规模。 (10)用数据库系统代替文件系统来存储需要长期保存的信 息。 (11)用CASE环境或程序自动生成工具来自动生成一部分 程序。 (12)尽量用可重用的软件构件来组装程序。 (13)使用先进的软件开发技术。 (14)采用防错程序设计技术,在程序中引入自检能力。 (15)把硬件及操作系统有关的代码放到某些特定的程序模 块中。
21
补充:提高可维护性的方法
建立明确的软件质量目标和优先级 相互促进的特性:可理解性和可测试性 可理解性和可修改性; 相互抵触的特性:效率和可移植性 效率和可修改性 各特性的相对重要性应随着程序的用途不同、 计算环境的不同而不同。 使用提高软件质量的技术和工具 如:模块化、详细的设计文档、结构化设计、 程序内部的文档和良好的高级程序设计语言
6
8 .2 . 2 维护的代价高昂
维护活动分为生产性活动和非生产性活动。 生产性活动:分析评价、修改设计和编写程序代 码等; 非生产性活动:理解程序代码功能、数据结构、 接口特点和设计约束等。 维护成本公式:M=P+Ke (c-d) 说明: M :维护工作总工作量 P :生产性工作量 K :经验常数 c: 是复杂度 d: 对该软件熟悉程度的度量
26
4.假设你的任务是对一个已有的软件做重 大修改,而且只允许你从下述文档中选取两 份:(a)程序的规格说明;(b)程序的详细设 计结果(自然语言描述加上某种设计工具表 示);(c)源程序清单(其中有适当数量的注 解)。 你将选取哪两份文档?为什么这样选取?
27
5.当一个十几年前开发出的程序还在为其 用户完成关键的业务工作时,是否有必要对 它进行再工程?如果对它进行再工程,经济 上是否划算?
17
8.4.3 可维护性Leabharlann Baidu审
可维护性复审的目的是:保证软件配置 的所有成分是完整、一致和可理解的,而且 为了便于修改和管理已经编目归档了。 维护应该针对整个软件配置,不应该只 修改源程序代码。如果源程序代码的修改没 出有反映在设计文档或用户文档中,则会产 生严重的后果。
18
8.5 预防性维护
预防性维护:就是主了提高未来的可维 护性或可靠性,而主动地修改软件。 把今天的方法学应用到昨天的软件系统 上,以支持明天的需求。
19
8. 6 软件再工程过程 预防性维护也称为软件再工程 一、逆向工程(reverse engineering) 软件的逆向工程是分析程序,力图在比源代
码更高的抽象层次上建立程序表示的过程, 是一个设计恢复的过程,逆向工程工具可
以从已有的程序中抽取数据结构、体系结 构和程序设计信息。 二、正向工程 应用现代软件工程的概念、原理、技术和方 法,重新开发现有的某个应用系统。
可移植性:表明把程序从一种计算环境转 移到另一种计算环境的难易程度。 可重用性:指同一个软件(或软件成份) 不做修改或稍加改动,就可以在不同环境 中多次重复使用。
16
8.4.2 文档
文档比程序代码更重要 文档分为用户文档和系统文档两类。
用户文档主要描述系统功能和使用方法,不关 心这些功能是怎样实现的。 系统文档指从问题定义、需求说明到验收测试 这样系列的有关文档。
20
三、软件再工程( Re-engineering)
软件再工程是一个工程过程,它将逆向工程、 重构和正向工程组合起来,旨在对现存的大量软 件系统进行挖掘、整理,重新获得设计信息,用 这些信息改建或重构现有的系统,以改进它的综 合质量; 或者得到有用的软件构件,对已有软件构件 进行维护以延长其生存期。 再工程的基础是系统理解,包括对运行系统、 源代码、设计、分析、文档等的全面理解。但在 很多情况下,由于各类文档的丢失,只能对源代 码进行理解,即程序理解。
软件工程
第八章 软件维护
第八章 软件维护
8 . 1 软件维护的定义 一、软件维护的定义和分类 软件维护是指在软件运行或维护阶段对软件产品所 进行的修改。分为四类: ① 改正性维护 在软件交付使用后,由于开发时测试得不彻底或不 完全,在运行阶段会暴露一些开发时未能测试出 来的错误。为了识别和纠正软件错误,改正软件 性能上的缺陷,避免实施中的错误使用,应当进 行的诊断和改正错误的过程,这就是改正性维护。
14
二、可维护性的度量(1)
可理解性:人们通过阅读源代码和相关文 档,了解程序功及其如何运行的容易程度。 可靠性:表明一个程序按照用户的要求和 设计目标,在给定的一段时间内正确执行 的概率。 可测试性:表明诊断和测试的容易程度。 可修改性:表明程序容易修改的程度。
15
二、可维护性的度量(2)
24
3.某软件公司拟采取下述措施提高他们开发出的软件产品的 可维护性。请判断哪些措施是正确的?哪些措施是不正确 的? (1)在分析用户需求时同时考虑维护问题。 (2)测试完程序后,删去程序中的注解以缩短源程序长短。 (3)在软件开发过程中尽量保证各阶段文档的正确性。 (4)编码时尽量多用全局变量。 (5)选用时间效率和空间效率尽可能高的算法。 (6)尽可能利用硬件特点以提高程序效率。 (7)尽可能使用高级语言编写程序。 (8)进行总体设计时加强模块间的联系。
22
进行明确的质量保证审查
检查点复审、验收检查、周期性地维护审查、 对软件包进行检查。
选择可维护的程序设计语言 改进程序的文档 开发软件时考虑到维护
23
相关习题 1.某些软件工程师不同意“目前国外许多 软件开发组织把60%以上的人力用于维护已 有的软件”的说法,他们争论说:“我并没 有花费我的60%的时间去改正我所开发的程 序中的错误”。 请问,你对上述争论有何看法? 2.为什么大型软件的维护成本高达开发成 本的4倍左右?
5
8.2.1 结构化维护与非结构化维护差别巨大
非结构化维护的代价很高,这种维护方式是 没有使用软件工程方法学开发出来的软件的必然 结果。 以完整的软件配置为基础的结构化维护,是 在软件开发中应用软件工程方法学的结果。虽然 有了软件的完整配置并不能保证维护时没有问题, 但是确实能减少精力的浪费并且可以提高维护的 总体质量。
3
三类维护占总的 维护比例
维护在软件生 存期所占比例
4
8.2 软件维护的特点 影响维护工作量的因素 1 )系统大小 2 )程序设计语言 3 )系统年龄 4 )数据库技术的应用 5 )先进的软件开发技术 6 )其他。例如,应用的类型、数学模型、 任务的难度、开关与标记、 IF 嵌套深度、 索引或下标数等。
9
软件维护的机构
10
软件维护 的事件流
11
12
软件维护工作流程
必要的技术工作 修改软件需求说明 修改软件设计 设计评审 对源程序做必要修改 单元测试 集成测试(回归测试) 确认测试 软件配置评审等。
13
8 .4 软件的可维护性
衡量软件质量的几个主要质量特性: 可维护性 可使用性 可靠性 一、软件可维护性的定义 指纠正软件系统出现的错误和缺陷,以及为 满足新的要求进行修改、扩充或压缩的容 易程度。
7
8.2.3 维护的问题很多 ( 1 )理解别人写的程序通常非常困难. ( 2 )需要维护的软件无文档或不全. ( 3 )软件人员流动性大. ( 4 )设计时未考虑将来修改需要,修改困难. ( 5 )维护工作无吸引力,缺乏成就感.
8
8. 3 软件维护过程
首先建立维护组织,确定报告和评价过程, 为每个维护要求规定一个标准化的事件序 列,并记录维护活动和规定复审标准。 一、维护组识 所有软件维护申请应按规定的方式提出 维护机构通常提供“维护申请报告”或称 “软件问题报告”由申请维护的用户填写。 维护机构内部要写“软件修改报告”
2
② 适应性维护 随着计算机技术的飞速发展和更新换代,软件系统所需的外 部环境或数据环境可能会更新和升级。为了使软件系统适 应这种变化,需要对软件进行相应的修改,这种维护活动 称为适应性维护。 ③扩充与完善性维护 在软件的使用过程中,用户往往会对软件提出新的功能与性 能要求。为了满足这些要求,需要修改或再开发软件,以 扩充软件功能、增强软件性能、改进加工效率、提高软件 的可维护性。这种情况下进行的维护活动叫做完善性维护。 ④ 预防性维护 采用先进的软件工程方法,对需要维护的软件或软件中的某 一部分重新进行设计、编制和测试。
28
25
(9)尽量减少程序模块的规模。 (10)用数据库系统代替文件系统来存储需要长期保存的信 息。 (11)用CASE环境或程序自动生成工具来自动生成一部分 程序。 (12)尽量用可重用的软件构件来组装程序。 (13)使用先进的软件开发技术。 (14)采用防错程序设计技术,在程序中引入自检能力。 (15)把硬件及操作系统有关的代码放到某些特定的程序模 块中。
21
补充:提高可维护性的方法
建立明确的软件质量目标和优先级 相互促进的特性:可理解性和可测试性 可理解性和可修改性; 相互抵触的特性:效率和可移植性 效率和可修改性 各特性的相对重要性应随着程序的用途不同、 计算环境的不同而不同。 使用提高软件质量的技术和工具 如:模块化、详细的设计文档、结构化设计、 程序内部的文档和良好的高级程序设计语言
6
8 .2 . 2 维护的代价高昂
维护活动分为生产性活动和非生产性活动。 生产性活动:分析评价、修改设计和编写程序代 码等; 非生产性活动:理解程序代码功能、数据结构、 接口特点和设计约束等。 维护成本公式:M=P+Ke (c-d) 说明: M :维护工作总工作量 P :生产性工作量 K :经验常数 c: 是复杂度 d: 对该软件熟悉程度的度量
26
4.假设你的任务是对一个已有的软件做重 大修改,而且只允许你从下述文档中选取两 份:(a)程序的规格说明;(b)程序的详细设 计结果(自然语言描述加上某种设计工具表 示);(c)源程序清单(其中有适当数量的注 解)。 你将选取哪两份文档?为什么这样选取?
27
5.当一个十几年前开发出的程序还在为其 用户完成关键的业务工作时,是否有必要对 它进行再工程?如果对它进行再工程,经济 上是否划算?
17
8.4.3 可维护性Leabharlann Baidu审
可维护性复审的目的是:保证软件配置 的所有成分是完整、一致和可理解的,而且 为了便于修改和管理已经编目归档了。 维护应该针对整个软件配置,不应该只 修改源程序代码。如果源程序代码的修改没 出有反映在设计文档或用户文档中,则会产 生严重的后果。
18
8.5 预防性维护
预防性维护:就是主了提高未来的可维 护性或可靠性,而主动地修改软件。 把今天的方法学应用到昨天的软件系统 上,以支持明天的需求。
19
8. 6 软件再工程过程 预防性维护也称为软件再工程 一、逆向工程(reverse engineering) 软件的逆向工程是分析程序,力图在比源代
码更高的抽象层次上建立程序表示的过程, 是一个设计恢复的过程,逆向工程工具可
以从已有的程序中抽取数据结构、体系结 构和程序设计信息。 二、正向工程 应用现代软件工程的概念、原理、技术和方 法,重新开发现有的某个应用系统。
可移植性:表明把程序从一种计算环境转 移到另一种计算环境的难易程度。 可重用性:指同一个软件(或软件成份) 不做修改或稍加改动,就可以在不同环境 中多次重复使用。
16
8.4.2 文档
文档比程序代码更重要 文档分为用户文档和系统文档两类。
用户文档主要描述系统功能和使用方法,不关 心这些功能是怎样实现的。 系统文档指从问题定义、需求说明到验收测试 这样系列的有关文档。
20
三、软件再工程( Re-engineering)
软件再工程是一个工程过程,它将逆向工程、 重构和正向工程组合起来,旨在对现存的大量软 件系统进行挖掘、整理,重新获得设计信息,用 这些信息改建或重构现有的系统,以改进它的综 合质量; 或者得到有用的软件构件,对已有软件构件 进行维护以延长其生存期。 再工程的基础是系统理解,包括对运行系统、 源代码、设计、分析、文档等的全面理解。但在 很多情况下,由于各类文档的丢失,只能对源代 码进行理解,即程序理解。
软件工程
第八章 软件维护
第八章 软件维护
8 . 1 软件维护的定义 一、软件维护的定义和分类 软件维护是指在软件运行或维护阶段对软件产品所 进行的修改。分为四类: ① 改正性维护 在软件交付使用后,由于开发时测试得不彻底或不 完全,在运行阶段会暴露一些开发时未能测试出 来的错误。为了识别和纠正软件错误,改正软件 性能上的缺陷,避免实施中的错误使用,应当进 行的诊断和改正错误的过程,这就是改正性维护。
14
二、可维护性的度量(1)
可理解性:人们通过阅读源代码和相关文 档,了解程序功及其如何运行的容易程度。 可靠性:表明一个程序按照用户的要求和 设计目标,在给定的一段时间内正确执行 的概率。 可测试性:表明诊断和测试的容易程度。 可修改性:表明程序容易修改的程度。
15
二、可维护性的度量(2)
24
3.某软件公司拟采取下述措施提高他们开发出的软件产品的 可维护性。请判断哪些措施是正确的?哪些措施是不正确 的? (1)在分析用户需求时同时考虑维护问题。 (2)测试完程序后,删去程序中的注解以缩短源程序长短。 (3)在软件开发过程中尽量保证各阶段文档的正确性。 (4)编码时尽量多用全局变量。 (5)选用时间效率和空间效率尽可能高的算法。 (6)尽可能利用硬件特点以提高程序效率。 (7)尽可能使用高级语言编写程序。 (8)进行总体设计时加强模块间的联系。
22
进行明确的质量保证审查
检查点复审、验收检查、周期性地维护审查、 对软件包进行检查。
选择可维护的程序设计语言 改进程序的文档 开发软件时考虑到维护
23
相关习题 1.某些软件工程师不同意“目前国外许多 软件开发组织把60%以上的人力用于维护已 有的软件”的说法,他们争论说:“我并没 有花费我的60%的时间去改正我所开发的程 序中的错误”。 请问,你对上述争论有何看法? 2.为什么大型软件的维护成本高达开发成 本的4倍左右?
5
8.2.1 结构化维护与非结构化维护差别巨大
非结构化维护的代价很高,这种维护方式是 没有使用软件工程方法学开发出来的软件的必然 结果。 以完整的软件配置为基础的结构化维护,是 在软件开发中应用软件工程方法学的结果。虽然 有了软件的完整配置并不能保证维护时没有问题, 但是确实能减少精力的浪费并且可以提高维护的 总体质量。
3
三类维护占总的 维护比例
维护在软件生 存期所占比例
4
8.2 软件维护的特点 影响维护工作量的因素 1 )系统大小 2 )程序设计语言 3 )系统年龄 4 )数据库技术的应用 5 )先进的软件开发技术 6 )其他。例如,应用的类型、数学模型、 任务的难度、开关与标记、 IF 嵌套深度、 索引或下标数等。
9
软件维护的机构
10
软件维护 的事件流
11
12
软件维护工作流程
必要的技术工作 修改软件需求说明 修改软件设计 设计评审 对源程序做必要修改 单元测试 集成测试(回归测试) 确认测试 软件配置评审等。
13
8 .4 软件的可维护性
衡量软件质量的几个主要质量特性: 可维护性 可使用性 可靠性 一、软件可维护性的定义 指纠正软件系统出现的错误和缺陷,以及为 满足新的要求进行修改、扩充或压缩的容 易程度。
7
8.2.3 维护的问题很多 ( 1 )理解别人写的程序通常非常困难. ( 2 )需要维护的软件无文档或不全. ( 3 )软件人员流动性大. ( 4 )设计时未考虑将来修改需要,修改困难. ( 5 )维护工作无吸引力,缺乏成就感.
8
8. 3 软件维护过程
首先建立维护组织,确定报告和评价过程, 为每个维护要求规定一个标准化的事件序 列,并记录维护活动和规定复审标准。 一、维护组识 所有软件维护申请应按规定的方式提出 维护机构通常提供“维护申请报告”或称 “软件问题报告”由申请维护的用户填写。 维护机构内部要写“软件修改报告”
2
② 适应性维护 随着计算机技术的飞速发展和更新换代,软件系统所需的外 部环境或数据环境可能会更新和升级。为了使软件系统适 应这种变化,需要对软件进行相应的修改,这种维护活动 称为适应性维护。 ③扩充与完善性维护 在软件的使用过程中,用户往往会对软件提出新的功能与性 能要求。为了满足这些要求,需要修改或再开发软件,以 扩充软件功能、增强软件性能、改进加工效率、提高软件 的可维护性。这种情况下进行的维护活动叫做完善性维护。 ④ 预防性维护 采用先进的软件工程方法,对需要维护的软件或软件中的某 一部分重新进行设计、编制和测试。