软件工程第八章
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
20
二、软件维护工作流程 必要的技术工作 修改软件需求说明 修改软件设计 设计评审 对源程序做必要修改 单元测试 集成测试(回归测 试) 确认测试 软件配置评审等。
21
§8.4 软件的可维护性
衡量软件质量的几个主要质量特性:
可维护性 可使用性 可靠性
一、软件可维护性的定义 指纠正软件系统出现的错误和缺陷, 以及为满足新的要求进行修改、扩充或 压缩的容易程度。
32
起源
• 软件工程进入再工程时代的呼声起于20世纪90 年代初,当时更多的提法是软件重用(Reuse)。 实际上可以说是用“重用”的旗帜为再工程开 道。这样引出再工程,是软件工程理论先导的 远见卓识,因为重用是软件工程的最高境界。
33
再工程(Reengineering):也称再加工 (Renovation)
12
三、软件维护的困难
由于软件维护工作通常并不由软件的设计 和开发人员来完成,维护人员首先要对软件各 阶段的文档和代码进行分析、理解。因而出现 了理解别人的程序困难、文档不齐等问题,尤 其是对大型、复杂系统的维护,更加困难和复 杂,甚至是不可能的!
13
1、结构化维护与非结构化维护 非结构化维护 — 缺乏必要的文档说明,文 档缺少或者不一制,难于确定数据结构、系统 接口等特性,这样的维护工作令人生畏,事倍 功半。
一、逆向工程(reverse engineering) 软件的逆向工程是分析程序,力图 在比源代码更高的抽象层次上建立程序 表示的过程,是 一个设计恢复的过程, 逆向工程工具可以从已有的程序中抽取 数据结构、体系结构和程序设计信息。
28
二、重构工程 在逆向工程所获得信息的基础上修改 或者重构已有的系统,产生系统一个新版 本的过程。 逆向工程和重构工程是预防性维护采 用的主要技术。
Baidu Nhomakorabea
29
正向工程(Forward Engineering)
由抽象的、逻辑性的、不依存代码 的设计逐步展开,直至具体代码实现的 开发活动,即从需求规格设计到产品初 次发布的过程或子过程。
30
逆向工程和重构工程示意图
需求规范 重构 软件设计 1 正向工程 设计恢复
逆向工程
软件设计 2
程序
31
二、软件再工程(Re-engineering)
17
§8.2.3 维护的问题很多
(1)难以跟踪软件版本的进化过程, 软件的 变化未在文档中反映出来. (2)难以跟踪软件的创建过程. (3)难以读懂他人程序. (4)无文档或不全. (5)软件人员流动性大. (6)设计时未考虑修改需要,修改困难. (7)维护工作无吸引力,缺乏成就感.
4
③ 扩充与完善性维护(Perfective Maintenance) 原因:在软件系统运行期间,用户可能要求增
加新的功能、建议修改已有功能或提出其他改 进意见。
在软件的使用过程中,用户往往会 对软件提出新的功能与性能要求。为了 满足这些要求,需要修改或再开发软件, 以扩充软件功能、增强软件性能、改进 加工效率、提高软件的可维护性。这种 情况下进行的维护活动叫做完善性维护。
是对既存软件系统进行调查,并将其重构 为新形式代码的开发过程。逆向过程从源代码 出发,旨在取得高一级抽象成果,再工程根据 对对象系统更深层次的理解将其重构为另一种 形式的软件产品。 即:再工程=逆向工程+正向工程。再工程 这一用语也常用于业务过程再工程(BPR), 有时为了与BPR相区分,通常将这里的再工程 称为软件再工程(Software Reengineering)。 再工程处于软件生存期的维护期。所以要 研究再工程首先要研究软件维护(Software Maintenance)。 34
18
§8.3 软件维护过程
一、维护组识
所有软件维护申 请应按规定的方式提 出。 维护机构通常提 供“维护申请报告”, 或称“软件问题报 告” ,由申请维护的 用户填写。 维护机构内部要 写“软件修改报告”
19
用户的维护请求
研读设计
软件
苦读代码
规划方案
?
修改设计
重新编写代码
重新编写代码
复审
复审
测试并交付用户使用
37
完善性维护的再工程
增加或修改功能,以提高系统的安 全性、处理能力等性能。
38
预防性维护的再工程
为了提高可维护性而对系统进行优化(再 结构化、再标准化等),对文档进行重构,对 数据进行重组。
39
软件维护工具
辅助软件维护过程中的活动的软件称 为“软件维护工具”,它辅助维护人员 对软件代码及其文档进行各种维护活动。 软件维护工具主要有: 1、版本控制工具; 2、文档分析工具; 3、开发信息库工具; 4、逆向工程工具; 5、再工程工具
14
太累了!受不了啦! 几万行程序怎么改 哦???
结构化维护 — 指软件开发过程是按照
软件工程方法进行的,开发各阶段的文 档齐全,软件的维护过程,有一整套完 整的方案、技术、审定过程及文档。 可以看到,维护工作的难度及工作 量的大小,明显与前期的开发工作密切 相关。
15
二、影响维护工作量的因素
1)系统大小 2)程序设计语言 3)系统年龄 4)数据库技术的应用 5)先进的软件开发技术 6)其他。例如,应用的类型、数学模型、 任务的难度、开关与标记、IF 嵌套深度、 索引或下标数等。
软件工程
Software Engineering
1
第八章
软件维护
§8.1 软件维护的定义
一、软件维护的定义和分类
软件维护是指在软件运行或维护阶段 对软件产品所进行的修改。分为四类:
2
① 改正性维护(Corrective Maintenance)
原因:用户在使用软件过程中一旦发现错误, 他们会向开发人员提出纠正性维护的请求。 在软件交付使用后,由于开发时测试得不 彻底或不完全,在运行阶段会暴露一些开发时 未能测试出来的错误。为了识别和纠正软件错 误,改正软件性能上的缺陷,避免实施中的错 误使用,应当进行的诊断和改正错误的过程, 这就是改正性维护。
可移植性:表明程序转移到一个新的计 算环境的可能性的大小。 效率:一个程序能执行预定功能而又不 浪费机器资源的程度。 可使用性:从用户观点出发,把可使用 性定义为程序方便、实用、及 易于使用的程度。
24
7个特性在各类维护中的侧重点
25
提高可维护性的方法
建立明确的软件质量目标和优先级
相互促进的特性:可理解性和可测试性 可理解性和可修改性; 相互抵触的特性:效率和可移植性 效率和可修改性 各特性的相对重要性应随着程序的用途不 同、 计算环境的不同而不同。
再工程的类型
严格地说,再工程的潜在需求尽管大得不 可估量,但目前只能说是进入了再工程时代。 其理由众所周知:一是资金不足——再工程需 要大量投资;二是软件开发人员不足。所以除 了应付尚未实施的一次软件工程外,可以有计 划地投入再工程的资源很有限。目前的再工程 主要为三类:
35
适应性维护的再工程
1. 伴随硬件和操作系统更新换代的软件维护。像小 型机换成PC机、PC机换成Unix工作站、Win95换成 WinXP所带来的软件维护。 2. 业务环境变化带来的软件维护。譬如由于企业业 务的发展和系统使用年限的增加,既存系统的存 储媒体和数据管理系统满足不了数据量及其种类 剧增的要求,需要更新数据库系统;随外部条件 变化而必须修改部分数据变量定义或算法,例如 征收消费税的法律修订、邮政编码位数改变、 2000年问题等。
16
§8.2.2 维护的代价高昂
维护活动分为生产性活动和非生产性活动。 生产性活动:分析评价、修改设计和编写程序代码等; 非生产性活动:理解程序代码功能、数据结构 、接口 特点和设计约束等。
说明: M:维护工作总工作量 P:生产性工作量 K:经验常数 c:复杂度 d:对该软件熟悉程度的度量
40
22
二、可维护性的度量(1)
可理解性:人们通过阅读源代码和相关文档,了解 程序功能及其如何运行的容易程度。 可靠性:表明一个程序按照用户的要求和设计目 标,在给定的一段时间内正确执行的概 率。 可测试性:表明论证程序正确性的容易程度。 可修改性:表明程序容易修改的程度。
23
二、可维护性的度量(2)
5
④ 预防性维护(Preventive Maintenance)
原因:为进一步改善软件系统的可维护 性和可靠性,为以后的软件改进奠定基 础的维护活动。 采用先进的软件工程方法,对需要维 护的软件或软件中的某一部分重新进行设 计、编制和测试。
6
7
软件维护策略
针对以上几种类型的维护,可采取 相应的维护策略,以提高维护效率,降 低维护成本。 1、改正性维护策略 • 开发过程中采用新技术,利用应用 软件包,提高系统结构化程度,进行周 期性维护审查等。
软件再工程是一个工程过程,它将逆向工程、 重构和正向工程组合起来,旨在对现存的大量软 件系统进行挖掘、整理,重新获得设计信息,用 这些信息改建或重构现有的系统,以改进它的综 合质量; 或者得到有用的软件构件,对已有软件构件 进行维护以延长其生存期。 再工程的基础是系统理解,包括对运行系统、 源代码、设计、分析、文档等的全面理解。但在 很多情况下,由于各类文档的丢失,只能对源代 码进行理解, 即程序理解。
10
软件维护的特性
一、时间长、工作量大、成本高 维护阶段是软件生存期中最长的一 个阶段,软件维护的工作量占整个软件 生存期的70%以上,而且还在逐年增加。 因此,如何减少软件维护的工作量,降 低软件维护的成本,就成为提高软件维 护效率和质量的关键。
其余 29% 维护 71%
维护工作比例 11
二、软件维护的副作用
改动--> 新的错误 维护的副作用是指由于维护或者在维护过程中其他 一些不期望的行为引入的错误
• 代码副作用: 如修改或者删除程序、修改或者删除语 句标号、修改逻辑符号等等。慎重,可通过回归测试 发现 • 数据副作用: 因修改信息结构而带来的不良后果,如 局部和全局数据的再定义,记录或者文件格式的再定 义等 • 文档副作用: 由于在设计文档中未能准确反映软件修 改情况而带来的不良后果
8
2、适应性维护策略 对可能变化的因素进行配置管理,将 因环境变化而必须修改的部分局部化, 即局限于某些程序模块等。 3、完善性维护策略 除了可以使用前面两类维护的策略 外,还有使用功能强、使用方便的工具, 采用原型化方法开发等,也可提高可维 护性。
9
4、预防性维护策略 常采用提前实现、软件重用等技术。
3
② 适应性维护(Adaptive Maintenance)
原因:软件运行于一定的环境(硬件、OS、 网络等)之上,运行环境发展很快。 随着计算机技术的飞速发展和更新 换代,软件系统所需的外部环境或数据 环境可能会更新和升级。为了使软件系 统适应这种变化,需要对软件进行相应 的修改,这种维护活动称为适应性维护。
使用提高软件质量的技术和工具 如:模块化、详细的设计文档、结构化设 计、 程序内部的文档和良好的高级程序设计语言
26
进行明确的质量保证审查 检查点复审、验收检查、周期性地维护 审查、对软件包进行检查。 选择可维护的程序设计语言 改进程序的文档 开发软件时考虑到维护
27
§8.6 软件再工程过程
36
3. 系统运行环境变化带来的软件修正。如由主 机方式变为客户/服务器方式,由客户/服务器 方式变为Web方式,这时的系统体系结构必须 做相应的改变。 4. 适应系统开发环境变化的软件维护。有一些 软件,主要是定制软件,如ERP软件等,其软 件再工程常伴随企业的BPR发生,所以开发环 境也需随经常性的系统完善性再工程而更新, 譬如PowerBuilder等开发环境的升级换代如同 操作系统一样频繁发生。