(Software Engineering)
▪ 8. 软件维护
8.1 软件变更更
8.2 软件维护
8.3 软件再⼯工程
1. 软件变更更
•
软件变更更是不不可避免的
–软件在使⽤用过程中,新的需求不不断出现 –商业环境在不不断地变化
–软件中的缺陷需要进⾏行行修复
–计算机硬件和软件环境的升级需要更更新现有的系统 –软件的性能和可靠性需要进⼀一步改进
•
关键问题
–采取适当的策略略,有效地实施和管理理软件的变更更
2. 软件演化
软件演化是⼀一种循环过程
–环境变化产⽣生软件修改,软件修改⼜又继续促进环境变化
软件的不不断修改会导致软件退化
–软件修改会引⼊入新的错误,造成故障率的升⾼高
软件开发的效率与⼈人员的数量量⽆无关
–⼈人员数量量的增加会使项⽬目的有效交流变得⼗十分困难,从⽽而导致开发效率的降低
软件新功能的添加会产⽣生新的缺陷
–往往在新功能版本发布后,下⼀一个版本主要是修补缺陷
软件演化
软件变更更的处理理策略略
–软件维护和软件再⼯工程
软件维护
–为了了修改软件缺陷或增加新的功能⽽而对软件进⾏行行的变更更 –软件变更更通常发⽣生在局部,不不会改变整个结构
软件再⼯工程
–为了了避免软件退化⽽而对软件的⼀一部分进⾏行行重新设计、编码和测试,提⾼高软件的可维护性 和可靠性等
8.1 软件变更更
8.2 软件维护
8.3 软件再⼯工程
1. 软件维护的概念
软件维护的成本
• 软件维护阶段一般要消耗软件生命周期中经费开支
的大部分。
软件维护的成本
软件维护的成本是很昂贵的
–业务应⽤用系统:维护费⽤用与开发成本⼤大体相同
–嵌⼊入式实时系统:维护费⽤用是开发成本的四倍以上
不不同年年代⽤用于维护已有软件的费⽤用占软件总预算成本情况
70%~80%
40%~60%
35%~40%
90年代 80年代
70年代
2. 软件维护的基本类型
02 01
03
完善性维护 04
占全部维护活动 的 50%~66%
纠错性维护
占全部维护活动的 17%~21%
适应性维护
占全部维护活动 的 18%~25%
预防性维护
只占全部维护活
动的 4%左 右
1 )完善性维护
• 在软件的使⽤用过程中,⽤用户往往会对软件提出新的功能与性能要求。
• 为了了满⾜足这些要求,需要修改或再开发软件,以扩充软件功能、增强 软件性能、改进加⼯工效率、提⾼高软件的可维护性。
• 这种情况下进⾏行行的维护活动叫做完善性维护。
实践证明:
• ⼤大部分维护⼯工作是改变和加强软件,⽽而不不是纠错。
• 完善性维护不不⼀一定是救⽕火式的紧急维修,⽽而可以是有 计划、有预谋的⼀一种再开发活动。
• 来⾃自⽤用户要求扩充、加强软件功能、性能的维护活动
约占整个维护⼯工作的 50 %。
2 )纠错性维护
• 在软件交付使⽤用后,因开发时测试的不不彻底、不不完全,必然会有部分 隐藏的错误遗留留到运⾏行行阶段。
• 这些隐藏下来的错误在某些特定的使⽤用环境下就会暴暴露露出来。
• 为了了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误
⽤用,应当进⾏行行的诊断和改正错误的过程就叫做纠错性维护。
3 )适应性维护
• 在使⽤用过程中,
o 外部环境(新的硬、软件配置)
o 数据环境(数据库、数据格式、数据输⼊入/输出⽅方式、数据存储介质)
可能发⽣生变化。
• 为使软件适应这种变化,⽽而去修改软件的过程就叫做
适应性维护。
4 )预防性维护
• 预防性维护是为了了提⾼高软件的可维护性、可靠性等,为以后进
⼀一步改进软件打下良好基础。
• 预防性维护定义为:采⽤用先进的软件⼯工程⽅方法对需要维护的软
件或软件中的某⼀一部分(重新)进⾏行行设计、编制和测试。
3. 影响维护成本的因素
• 团队稳定性
– 系统移交后开发团队会解散,⼈人员分配到其他项⽬目中,负责维护的⼈人员通常不不是原开发
⼈人员,需要花时间理理解系统。
• 合同责任
– 维护合同⼀一般独⽴立于开发合同,这样开发⼈人员有可能缺少为⽅方便便维护⽽而写软件的动⼒力力。
• ⼈人员技术⽔水平
– 维护⼈人员有可能缺乏经验,⽽而且不不熟悉应⽤用领域。
• 程序年年龄与结构
– 程序结构随年年龄的增加⽽而受到破坏,不不易易理理解和变更更。
维护的困难性(why)
许多软件的可读性差
任务紧、时间急的情况下 处理维护请求
配置管理工作不到位
人员变动造成的影响
变更更预测
• 变更更预测
–预测变更更请求数⽬目应了了解系统和外部环境之间的关系
–许多系统与外部环境之间存在着复杂的关系,对环境所做的改变不不可避免地导致系统 变更更的发⽣生
• 变更更预测的影响因素
–系统接⼝口的数⽬目和复杂性
–本质上易易变的系统需求的数⽬目 –系统所处的业务过程
复杂性度量量
• 预测可维护性
–需要了了解在系统不不同组件和这些组件的固有复杂性之间的关系类型和关系数⽬目 –系统或组件越复杂,其维护费⽤用就越⾼高
• 复杂性依赖于
–控制结构的复杂性 –数据结构的复杂性
–对象、⽅方法和模块⼤大⼩小
4. 软件维护过程
5. 软件维护中应注意的问题
(一)技术方面
▪ 程序的理解
▪ 测试
▪ 影响分析
▪ 可维护性
▪ (1) 可理解性
▪ (2) 可测试性
▪ (3) 可修改性
▪ (4) 可移植性
▪ (5) 可重用性
决定软件可维护性的主要因素 影响软件可维护性的维护 环境的因素
▪ (1) 软件维护的文档
▪ (2) 软件的运行环境
▪ (3) 软件的维护组织
▪ (4) 软件维护质量
软件维护中应注意的问题
(二)管理方面
▪ 契合组织的目标
▪ 人力资源
▪ 过程
▪ 如何组织维护活动
▪ 外包
软件维护中应注意的问题
(三)维护费用估算
▪ 参数模型
▪ M = P + K × exp (c‐d)
▪ M是维护用的总工作量,P是生产性工作量,K是经验常数,
▪ exp是以e为底的指数函数
▪ c是复杂程度,d是维护人员对软件的熟悉程度
▪ 基于经验
▪ 专家判断、类推、工作分解结构
软件维护过程模型
• IEEE 维护模型图
分类与鉴别阶
段 分析阶段
设计阶段
实现阶段 系统测试
验收测试 阶段
阶段
交付阶段
8.1 软件变更更
8.2 软件维护
8.3 软件再⼯工程
1. 软件再⼯工程
▪ 定义
▪ 软件再工程(R e-engineering)指对现有软件进行仔细审查和
改造,对其进行重新构造,使之成为一个新的形式,同时包括
随之产生的对新形式的实现。
软件再⼯工程
• 软件再⼯工程
– 重新构造或编写现有系统的⼀一部分或全部,但不不改变其功能 – 在⼤大型系统中某些部分需要频繁维护时,可应⽤用软件再⼯工程
– 软件再⼯工程的⽬目的是努⼒力力使系统更更加易易于维护,系统需要被再构造和再⽂文档化
• 优势
– 减少⻛风险:重新开发⼀一个在⽤用的系统具有很⾼高的⻛风险,可能会有开发问题、⼈人员问题和规格说 明问题 – 降低成本:再⼯工程的成本⽐比重新开发软件的成本要⼩小得多
2. 正向⼯工程与再⼯工程
再⼯工程活动
• 源代码转换
– 代码从原有的程序设计语⾔言转换到⼀一种新语⾔言
• 逆向⼯工程
– 分析程序并抽取信息记录其结构和功能
• 程序结构改善
– 分析和修改程序的控制结构,使其更更易易读和好理理解
• 程序模块化
– 重新组织程序的结构
• 数据再⼯工程
– 改变程序处理理的数据以反映程序的变更更
3. 软件逆向⼯工程
▪ 软件逆向⼯工程(Software Reverse Engineering)
▪ 是分析⽬目标系统,识别系统的构件及其交互关系,并且通过⾼高 层抽象或其他形式来展现⽬目标系统的过程。
▪ 对逆向⼯工程⽽而⾔言,抽象的层次、完备性、⼯工具与分析⼈人员协同
⼯工作的程度、过程的⽅方向性等因素是需要考虑的。
逆向⼯工程主要内容
逆向工程 处理的
逆向工程 数据的
用户界面的 逆向工程
逆向工程的 工具
为了了理理解过程抽象,需要在 不不同的抽象级别(系统级、
程序级、构件级、模式级和 语句句级)分析代码
弄弄清⼏几个问题:
界⾯面必须处理理的基本动作是 什什么?
系统对这些动作的⾏行行为反应 的简要描述是什什么?
有哪些界⾯面的等价概念是相 关的?
发⽣生在不不同的抽象层次:
内部数据结构的逆向⼯工程 数据库结构的逆向⼯工程
静态模型逆向⼯工具
Rational Rose Rigi
JBPAS
动态模型逆向⼯工具
SCED ISVis Borland Together