31
8 8 第 第第第第 第 第第第第 毛毛毛 毛毛 [email protected] 毛毛毛毛毛毛毛毛毛 602 毛毛毛 0731-(45)73649 毛毛毛毛毛毛 毛毛毛毛毛毛毛毛毛毛毛毛 毛毛毛毛毛毛毛毛毛毛毛毛

第 8 讲 软件维护

  • Upload
    kasie

  • View
    105

  • Download
    0

Embed Size (px)

DESCRIPTION

软件工程导论 之. 第 8 讲 软件维护. 毛新军 教授 [email protected] 计算机科学与技术系 602 教研室 0731-(45)73649. 用工程化的方法来开发软件. 前言. 软件在交付给用户使用后,由于应用需求、环境变化以及自身问题,对它进行维护不可避免 软件维护是一个长期过程,耗费较大. 主讲内容. 软件维护的分类 软件维护过程 软件的可维护性 维护活动 维护的副作用 逆向工程和重构工程. 1. 软件维护的分类. 纠正性维护 完善性维护 适应性维护 预防性维护. 纠正性维护. 什么是纠正性维护 纠正软件中的错误 - PowerPoint PPT Presentation

Citation preview

Page 1: 第 8 讲 软件维护

第第 88 讲 软件维护讲 软件维护

毛新军 教授[email protected]

计算机科学与技术系 602 教研室 0731-(45)73649

软件工程导论 之

用工程化的方法来开发软件用工程化的方法来开发软件

Page 2: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

2

前言前言 软件在交付给用户使用后,由于应用需求、环境变化以及自身问题,对它进行维护不可避免

软件维护是一个长期过程,耗费较大

Page 3: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

3

主讲内容主讲内容1. 软件维护的分类2. 软件维护过程3. 软件的可维护性4. 维护活动5. 维护的副作用6. 逆向工程和重构工程

Page 4: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

4

1. 1. 软件维护的分类软件维护的分类 纠正性维护 完善性维护 适应性维护 预防性维护

Page 5: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

5

纠正性维护纠正性维护 什么是纠正性维护

– 纠正软件中的错误 起因

– 用户在使用软件过程中一旦发现错误,他们会向开发人员提出纠正性维护的请求

目的– 诊断和改正软件系统中潜藏的错误

Page 6: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

6

适应性维护适应性维护 什么是适应性维护

– 对软件进行改造以便适应新的环境和平台 原因

– 软件运行于一定的环境 ( 硬件、 OS 、网络等 )之上,运行环境发展很快

目的– 适应环境变化和发展而对软件进行维护

Page 7: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

7

改善性维护改善性维护 什么是改善性维护

– 对软件进行改造以增加新的功能、修改已有的功能

原因– 在软件系统运行期间,用户可能要求增加新的功能、建议修改已有功能或提出其他改进意见

目的– 满足用户日益增长的各种需求而对软件系统进行的改善和补充

Page 8: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

8

预防性维护预防性维护 什么是预防性维护

– 对软件的结构进行改造以便提高软件的可靠性和可维护性等

原因– 为进一步改善软件系统的可维护性和可靠性,为以后的软件改进奠定基础的维护活动

目的– 获取软件结构,重新改善软件结构

Page 9: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

9

主讲内容主讲内容1. 软件维护的分类2. 软件维护过程3. 软件的可维护性4. 维护活动5. 维护的副作用6. 逆向工程和重构工程

Page 10: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

10

用户的维护请求

软件研读设计

规划方案

修改设计

重新编写代码

复审

苦读代码

重新编写代码

复审

测试并交付用户使用

软件维护形式软件维护形式

Page 11: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

11

软件维护成本软件维护成本 (1/2)(1/2)

维护成本不断增加– 70 年代( 35 %- 40 %), 80(60 % )

软件维护工作量涉及二方面– 助动性:用于理解代码功能,结构特征以及性能约束

– 生产性:用于分析和评价、修改设计和代码

Page 12: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

12

软件维护成本软件维护成本 (2/2)(2/2)

软件维护工作量模型: M = P + K * e (c-d)

– 其中 M= 维护总工作量– P= 生产性工作量– K= 经验常数– C= 复杂度(表示设计好坏和文档完整程度)– D= 对欲维护软件的熟悉程度

模型表明:如果没有好的软件开发方法或者软件开发人员不能参与维护,那么软件维护工作量会指数上升

Page 13: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

13

软件维护可能存在的问题软件维护可能存在的问题 软件版本控制 -- 重要问题 很难追踪软件的创建过程 -- 文档不齐全 理解他人的软件比较困难 人员流动大,维护人员得不到开发人员帮助 软件修改困难,易出错 缺乏成就感

Page 14: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

14

主讲内容主讲内容1. 软件维护的分类2. 软件维护过程3. 软件的可维护性4. 维护活动5. 维护的副作用6. 逆向工程和重构工程

Page 15: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

15

软件的可维护性软件的可维护性 什么是软件的可维护性

– 软件被理解、改正、调整和改进的程度 影响软件可维护性的因素

– 软件开发方法 -- 结构化、 OO 、… ...– 文档是否齐全– 开发人员素质– 软件系统结构是否清晰、易于理解– 标准的程序设计语言– 文档的结构是否标准化 … ...

Page 16: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

16

保证软件可维护性的复审保证软件可维护性的复审 (1/2)(1/2)

复审是保证软件可维护性的一项重要工作(1) 需求分析的复审

– 对将来可能修改和改进的部分加注释,对软件的可移植性加以讨论,并考虑可能影响软件维护的系统界面

(2) 设计阶段的复审– 从易于维护和提高设计总体质量的角度全面评审数据设计、总体结构设计、过程设计和人机界面设计

Page 17: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

17

保证软件可维护性的复审保证软件可维护性的复审 (2/2)(2/2)

(3) 编码阶段的复审– 强调编码风格和内部文档

(4) 阶段性测试– 必要的预防性维护

(5) 软件维护活动完成之际也要进行复审

Page 18: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

18

主讲内容主讲内容1. 软件维护的分类2. 软件维护过程3. 软件的可维护性4. 维护活动5. 维护的副作用6. 逆向工程和重构工程

Page 19: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

19

配置管理者

决策机构

维护管理员

维护人员

维护申请

系统管理员

维护组织维护组织“抓着谁就是谁”不可取,好的组织模式极为重要

Page 20: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

20

维护报告和评估维护报告和评估所有的维护申请都应以标准化的形式

– 纠正性维护:记录出错现场 (输入数据、出错信息等 )

– 适应性和完善性维护:提供简短的修改规格说明书

– 维护申请单将成为外部文档,应被视为完成维护任务 的主要依据

Page 21: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

21

维护活动事件流维护活动事件流确认用户的维护请求按关键程度将每一维护任务在任务队列中排队

对队首的维护任务开展工作状况复审

Page 22: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

22

保存维护纪录保存维护纪录 记录维护活动过程中的各种信息 目的:

– 估算维护技术的有效性– 估算维护技术的实际成本

Page 23: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

23

评价维护活动评价维护活动 度量和统计维护数据

– 软件每次运行的平均失效次数– 各类维护的成本– 维护阶段增删一个语句所花费的人时数– 各类维护的百分比

Page 24: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

24

主讲内容主讲内容1. 软件维护的分类2. 软件维护过程3. 软件的可维护性4. 维护活动5. 维护的副作用6. 逆向工程和重构工程

Page 25: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

25

维护的副作用维护的副作用 改动 --> 新的错误 维护的副作用是指由于维护或者在维护过程中其他一些不期望的行为引入的错误– 代码副作用 : 如修改或者删除程序、修改或者删除语句标号、修改逻辑符号等等。慎重,可通过回归测试发现

– 数据副作用 : 因修改信息结构而带来的不良后果,如局部和全局数据的再定义,记录或者文件格式的再定义等

– 文档副作用 : 由于在设计文档中未能准确反映软件修改情况而带来的不良后果

Page 26: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

26

主讲内容主讲内容1. 软件维护的分类2. 软件维护过程3. 软件的可维护性4. 维护活动5. 维护的副作用6. 逆向工程和重构工程

Page 27: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

27

逆向工程和重构工程逆向工程和重构工程 逆向工程和重构工程是预防性维护采用的主要技术 逆向工程:分析已有程序,寻求比源代码更高级的抽象形式;或者在软件生命周期中,将某种形式的描述转换为更高抽象形式描述的活动

重构:在同一抽象级别上的转换系统的描述形式 设计恢复:借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计的信息

重构工程:在逆向工程所获得信息的基础上修改或者重构已有的系统,产生系统一个新版本的过程

Page 28: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

28

需求规范

软件设计 1

程序

正向工程

逆向工程

软件设计 2

重构

设计恢复

逆向工程和重构工程示意图逆向工程和重构工程示意图

Page 29: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

29

小结小结1. 软件维护的分类2. 软件维护过程3. 软件的可维护性4. 维护活动5. 维护的副作用6. 逆向工程和重构工程

Page 30: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

30

思考题思考题思考题

– 为什么软件维护在整个软件生命周期中占有重要的地位?

Page 31: 第 8 讲 软件维护

©Copyright Xinjun Mao

软件维护

31

Q & AQ & AQ & AQ & A

An Introduction to Software EngineeringAn Introduction to Software Engineering

Practice, Practice, and Practice