软件工程导论——8软件维护

在这里插入图片描述

软件维护的概念

软件维护是指由于软件产品出现问题或需要改进而对代 码及相关文档的修改,其目的是对现有软件产品进行修改的同时保持其完整性。

软件维护的类型

纠错性维护

• 在软件交付使用后,因开发时测试的不彻底、不完全,必然会有部分隐藏的错误遗留到运行阶段
• 这些隐藏下来的错误在某些特定的使用环境下就会暴露出来
• 为了识别和纠正软件错误、改正软件性能上的缺陷、排除 实施中的误使用,应当进行错误诊断和改正
• 这种情况下进行的维护活动叫做纠错性维护

适应性维护

• 在软件使用过程中,环境可能发生变化
– 外部环境:新的硬件、软件配置
– 数据环境:数据库、数据格式、数据输入/输出方式、 数据存储介质
• 为使软件适应这种变化,需要修改软件
• 这种情况下进行的维护活动叫做适应性维护

完善性维护

• 软件使用过程中,用户往往会对软件提出新的功能与性能要求
• 为满足这些要求,需要修改或再开发软件,以扩充软件功 能、增强软件性能、改进加工效率、提高软件的可维护性
• 这种情况下进行的维护活动叫做完善性维护
• 完善性维护不一定是救火式的紧急维修,而可以是有计划 、有预谋的一种再开发活动
• 实践表明,在几种维护活动中,完善性维护所占的比重最 大,即大部分维护工作是改变和加强软件,而不是纠错
• 事实证明,来自用户要求扩充、加强软件功能、性能的维 护活动约占整个维护工作的50%

预防性维护

• 预防性维护定义为:采用先进的软件工程方法对需要维护 的软件或软件中的某一部分(重新)进行设计、编制和测试
• 预防性维护是为了提高软件的可维护性、可靠性等,为以后进一步改进软件打下良好基础

统计数字表明
– 完善性维护占全部维护活动的50%~66%
– 改正性维护占17%~21%
– 适应性维护占18%~25%
– 其它维护活动只占4%左右

软件可维护性及影响因素

软件可维护性

– 对软件进行维护的容易程度
可维护的软件表现为:
– 有效的模块性
– 采用易于理解的设计模式
– 采用明确定义的编码标准和约定
– 源代码能够自身文档化且易于理解
– 应用质量保证技术,软件交付之前已找到潜在维护问题

影响可维护性的因素

  1. 可理解性
  2. 可测试性
  3. 可修改性
  4. 可靠性
  5. 可移植性
  6. 可使用性
  7. 效率

软件维护过程及IEEE维护模型

软件维护过程

在这里插入图片描述

IEEE维护模型

在这里插入图片描述

软件维护技术

程序理解

以软件维护、升级和再工程为目的,在不同的抽象级别上建立基本软件的概念模型,包括从代码本身的模型到基本应用领域的模型,即建立从问题/应用域到程序设计/实现 域的映射清晰。

程序理解的任务

• 通过检查单个的程序设计结构,程序被表示成抽象语法树 、符号表或普通源文本
• 尽量做到程序隐含信息的显性表示及程序内部关系的可视化
• 从源代码中提取信息,并存放在通用的数据库中,然后通过查询语言对数据库进行查询
• 检查程序构造过程中的结构关系,明确表示程序组成部分之间的依赖关系
• 识别程序的高层概念,如标准算法、数据结构、语法及语义匹配等

软件再工程

指对现有软件进行仔细审查和改造,对其进行重新 构造,使之成为一个新的形式,同时包括随之产生的对新形式的实现

软件再工程模型

在这里插入图片描述

库存目录分析

在这里插入图片描述

文档重构

• 老程序固有的特点是缺乏文档,根据具体情况可采用下述 三种方法之一来处理这个问题:
– 如果一个程序是相对稳定的,正在走向生命的终点, 而且可能不会再修改它,则不必为它建立文档;
– 为了便于今后的维护,必须更新文档,但是由于资源 有限,应该采用“使用时建立文档”的方法;
– 如果某应用系统是用户完成业务工作的关键,而且必 须重构全部文档,则仍然应该尽量把文档工作减少到 必需的最小量。

逆向工程

软件逆向工程是分析目标系统,识别系统的构件及其交互关系,并且通过高层抽象或其它形式来展现目标系统的过程
逆向工程的过程
在这里插入图片描述
逆向工程主要内容

  1. 数据的逆向工程
    – 内部数据结构的逆向工程、数据库结构的逆向工程
  2. 处理的逆向工程
    – 需要在不同的抽象级别(系统级、程序级、构件级、模 式级和语句级)分析代码
    – 对大型系统,通常用半自动方法完成逆向工程
  3. 用户界面的逆向工程
    – 界面必须处理的基本动作是什么?
    – 系统对这些动作的行为反应的简要描述是什么?
代码重构

• 某些老程序的体系结构比较合理,但是,一些模块的编码方 式却难于理解、测试和维护
• 在这种情况下,可以重构这些模块的代码
• 通常,代码重构并不修改程序的体系结构,它只关注个体模 块的设计细节以及在模块中定义的局部数据结构
• 如果重构扩展到模块边界之外并涉及软件体系结构,则重构 成了正向工程

数据重构

• 对数据体系结构差的程序很难进行适应性和完善性维护
• 因此,数据体系结构比源代码对程序的长期生存力有更大的影响
• 由于数据结构对程序体系结构及程序中的算法有很大影响 ,对数据的修改必然会导致程序体系结构或代码层的改变
• 数据重构是一种全范围的再工程活动

正向工程

• 正向工程也称为革新或改造
• 正向工程过程应用现代软件工程的概念、原理、技术和方 法,重新开发现有的某些应用系统
• 在大多数情况下,经过正向工程后,软件不仅重新实现了 现有系统的功能,而且增加了新功能,提高了整体性能

考纲

软件维护
重点是软件维护的分类、软件的可维护性的决定因素和软件维护技术。掌握软件维护的基本类型、软件的可维护性的决定因素、IEEE软件维护的过程模型;理解软件维护的基本概念、软件维护在技术上的要点、维护费用的估算、软件逆向工程的概念及主要内容。主要知识点:

  1. 软件维护的基本概念
  2. 理解软件维护的四个基本类型:纠错性、适应性、完善性、预防性维护。哪种占比重最大?哪种最小?
  3. 可维护性的决定因素
  4. 软件维护过程模型、软件再工程、逆向工程的概念
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值