八、维护

软件维护的概念

定义

软件维护就是在软件已经交付使用之后,为了改正错误或满足新需要而修改软件的过程,其基本任务是保证软件在一个相当长的时期能够正常运行。

分类

(1) 改正性维护
在任何大型程序的使用期间,用户必然会发现程序错误,并且把他们遇到的问题报告给维护人员。把诊断和
改正错误的过程称为改正性维护。
(2) 适应性维护
适应性维护,也就是为了和变化了的环境适当地配合而进行的修改软件的活动,是既必要又经常的维护活动。
(3) 完善性维护
为了满足用户在使用团建过程中提出的新功能或者修改已有功能的建议,需要进行完善性维护。这项维护活
动通常占软件维护工作的大部分。
(4) 预防性维护
当为了改进未来的可维护性或可靠性,或为了给未来的改进奠定更好的基础而修改软件,这项维护活动通常
称为预防性维护。

软件维护的特点

非结构化维护

① 流程
a. 软件配置的唯一成分是程序代码,维护活动从艰苦地评价程序代码开始;
b. 由于程序内部文档不足,而对于软件结构、全程数据结构、系统接口、性能和设计约束等会产生误解;
c. 对程序代码所做的改动的后果是难于估量的;
d. 没有测试方面的文档,不可能进行回归测试。
② 特点
非结构化维护需要付出很大代价,这种维护方式是没有使用良好定义的方法学开发出来的软件的必然结果。

结构化维护

① 流程
a. 有一个完整的软件配置存在,维护工作从评价设计文档开始;
b. 确定软件重要的结构特点、性能特点以及接口特点;
c. 估量要求的改动将带来的影响,并且计划实施途径;
d. 修改设计并且对所做的修改进行仔细复查;
e. 编写相应的源程序代码;
f. 使用在测试说明书中包含的信息进行回归测试;
g. 把修改后的软件再次交付使用。
② 特点
结构化维护是在软件开发的早期应用软件工程方法学的结果。有了软件的完整配置能减少精力的浪费并且能提高维护的总体质量。

维护代价高昂

软件维护中无形的代价有:
(1)因为可用的资源必须供维护任务使用,以致耽误甚至丧失了开发的良机。

(2) 当看来合理的有关改错或修改的要求不能及时满足时将引起用户不满。
(3) 由于维护时的改动,在软件中引入了潜伏的错误,从而降低了软件的质量。
(4) 当必须把软件工程师调去从事维护工作时,将在开发过程中造成混乱。
(5) 生产率的大幅度下降。

软件维护存在的问题

与软件维护有关的绝大多数问题,都可归因于软件定义和软件开发的方法有缺点。在软件生命周期的头两个时期没有严格而又科学的管理和规划,几乎必然会导致在最后阶段出现问题。与软件维护有关的部分问题如下:
(1) 理解别人写的程序非常困难,而且困难程度随着软件配置成分的减少而迅速增加。
(2) 需要维护的软件往往没有合格的文档,或者文档资料显著不足。
(3) 当要求对软件进行维护时,不能指望由开发人员给人们仔细说明软件。
(4) 绝大多数软件在设计时没有考虑将来的修改。
(5) 软件维护不是一项吸引人的工作。

软件维护过程

维护过程本质上是修改和压缩了的软件定义和开发过程。软件维护过程可以描述为:
(1) 建立一个维护组织;
(2) 确定报告和评价的过程;

(3) 为每个维护要求规定一个标准化的事件序列;
(4) 建立一个适用于维护活动的记录保管过程;
(5) 规定复审标准。

维护报告

① 维护要求表
软件维护人员通常给用户提供空白的维护要求表(软件问题报告表),这个表格由要求一项维护活动的用户
填写。由维护管理员和系统管理员评价用户提交的维护要求表。软件要求表是一个外部产生的文件,它是计划维
护活动的基础,应该用标准化的格式表达所有软件维护要求。
② 软件修改报告
a. 满足维护要求表中提出的要求所需要的工作量。
b. 维护要求的性质。
c. 这项要求的优先次序。
d. 与修改有关的事后数据。

维护事件流

软件工程复试——八、维护

维护过程的技术工作有:

  • 修改软件设计
  • 复查
  • 必要的代码修改
  • 单元测试和集成测试
  • 验收测试
  • 复审
  • 处境复查
保存维护记录

① 程序标识;
② 源语句数;
③ 机器指令条数;
④ 使用的程序设计语言;
⑤ 程序安装的日期;
⑥ 自从安装以来程序运行的次数;
⑦ 自从安装以来程序失效的次数;
⑧ 程序变动的层次和标识;
⑨ 因程序变动而增加的源语句数;
⑩ 因程序变动而刪除的源语句数;
⑪ 每个改动耗费的人时数;
⑫ 程序改动的日期;
⑬ 软件工程师的名字;
⑭ 维护要求表的标识;
⑮ 维护类型;
⑯ 维护开始和完成的日期;
⑰ 累计用于维护的人时数;
⑱ 与完成的维护相联系的纯效益。

评价维护活动

可以从以下七个方面评价维护活动

a. 每次程序运行平均失效的次数
b. 用于每一类维护活动的总人时数
c. 平均每个程序、每种语言、每种维护类型所做的程序变动数
d. 维护过程中增加或删除一个源语句平均花费的人时数
e. 维护每种语言平均花费的人时数
f. 一张维护要求表的平均周转时间
g. 不同维护类型所占的百分比

软件的可维护性

软件的可维护性可以理解为:维护人员理解、改正、改动或改进这个软件的难以程度。

决定软件的可维护性因素
  • 可理解性
  • 可测试性
  • 可修改性
  • 可移植性
  • 可重用性
文档

文档是影响软件可维护性的决定因素。文档比代码更重要!!!

软件系统的文档分为用户文档和系统文档两类

1、用户文档

用户文档主要描述系统功能和使用方法,并不关心这些功能是怎样实现的。文档的结构方式应该使用户能
方便地根据需要阅读有关的内容。内容包括:
a. 功能描述;
b. 安装文档;
c. 使用手册;
d. 参考手册;
e. 操作员指南。

2、系统文档
系统文档是指从问题定义、需求说明到验收测试计划这样一系列和系统实现有关的文档。描述系统设计、实
现和测试的文档对于理解程序和维护程序来说是极端重要的。

可维护性复审

在软件工程过程的每一个阶段都应该考虑并努力提高软件的可维护性,在每个阶段前的技术审查和管理复审中,应着重对可维护性进行复审。

复审的任务:

① 需求分析阶段的复审
a. 对将来要改进的部分和可能会修改的部分加以注意并指明;
b. 讨论软件的可移植性问题,并且考虑可能影响软件维护的系统界面。
② 正式的和非正式的设计阶段的复审
a. 从容易修改、模块化和功能独立的目标出发,评价软件的结构和过程;
b. 对将来可能修改的部分预作准备。
③ 编码阶段
a. 强调编码风格和内部说明文档这两个影响可维护性的因素;
b. 尽量使用可重用的软件构件,如开发新的构件,也应该注意提高构件的可重用性。
④ 测试阶段
a. 保证软件配置的所有成分是完整的、一致的和可理解的;
b. 为便于修改和管理,进行编目归档。
⑤ 维护阶段
保证维护是针对整个软件配置,不只是修改源程序代码。

预防性维护

定义

预防性维护指的是把今天的方法学应用到昨天的系统上,以支持明天的需求

方法
(1)反复多次地做修改程序的尝试,以实现所要求的修改。
(2)通过仔细分析程序尽可能多地掌握程序的内部工作细节,以便更有效地修改它。
(3)在深入理解原有设计的基础上,用软件工程方法重新设计、重新编码和测试那些需要变更的软件部分,
即局部软件再工程。
(4)以软件工程方法学为指导,对程序全部重新设计、重新编码和测试,为此可以使用CASE工具来帮助
理解原有的设计,即软件再工程。

必要性
(1)维护一行源代码的代价可能是最初开发该行源代码代价的14〜40倍。

(2)重新设计软件体系结构时使用了现代设计概念,对将来的维护可能有很大的帮助。

(3)由于现有的程序版本可作为软件原型使用,开发生产率可大大高于平均水平。

(4)用户具有较多使用该软件的经验,能够很容易地搞清新的变更需求和变更的范围。

(5)利用****和再工程的工具,可以使一部分工作自动化。

(6)在完成预防性维护的过程中可以建立起完整的软件配置。

软件工程再工程

软件工程复试——八、维护

软件工程再工程泛型是一个循环模型。

(1)库存目录分析

每个软件组织都应该保存其拥有的所有应用系统的库存目录。该目录包含关于每个应用系统的基本信息。

一般选以下程序当做逆工程的对象

  • 预定将使用多年的程序
  • 当前正在成功使用的程序
  • 在最近的将来可能要做重大修改或增强的程序

(2)文档重构

  • 建立文档非常耗费时间,选择有价值的程序重新建立文档。如果一个程序是相对稳定的,正在走向其有用生命的终点,而且可能不会再经历什么变化,那么,让它保持现状是一个明智的选择。
  • 采用“使用时建文档”的方法,只针对系统中当前正在修改的那部分建立完整文档。
  • 对于必须进行重构的关键业务,则应设法把文档工作减少到必需的最小量。

(3)****

​ 软件的****是分析程序以便在比源代码更高的抽象层次上创建出程序的某种表示的过程,即****是一个恢复设计结果的过程,****工具从现存的程序代码中抽取有关数据、体系结构和处理过程的设计信息。

(4)代码重构

​ 针对某些老程序,代码技术太古老了,可以使用一手代码重构。

​ 流程:

​ a. 用重构工具分析源代码,标注出和结构化程序设计概念相违背的部分;
​ b. 然后重构有问题的代码;
​ c. 复审和测试生成的重构代码并更新代码文档。

(5)数据重构

① 定义
数据重构发生在相当低的抽象层次上,是一种全范围的再工程活动。数据重构始于****活动,分解当前使用的数据体系结构,必要时定义数据模型,标识数据对象和属性,并从软件质量的角度复审现存的数据结构。
② 必要性
对数据体系结构差的程序很难进行适应性修改和增强。对应用系统来说,数据体系结构比源代码本身对程序的长期生存力有更大影响。

(6)正向工程
① 定义
正向工程(革新或改造)应用软件工程的原理、概念、技术和方法来重新开发某个现有的应用系统。在大多
数情况下,被再工程的软件不仅重新实现现有系统的功能,而且加人了新功能和提高了整体性能。
② 作用
正向工程不仅从现有程序中恢复设计信息,还使用该信息去改变或重构现有系统,以提高其整体质量。

课后题

1、软件的可维护性与软件的可理解性、可测试性、可修改性、可重用性、可移植性有关。

可以用以下措施提高可维护性:

(1)建立明确的软件质量目标;
(2)利用先进的软件开发技术和工具;
(3)建立明确的质量保证工作;
(4)选择可维护的程序设计语言;
(5)改进程序文档。

2、

答:应该选取(a)和(c)两份文档,理由如下:
(1) “对一个已有的软件做重大修改”意味着对软件功能做较大变更或增加较多新功能,这往往需要修改软
件的体系结构。因此,了解原有软件的总体情况是很重要的。程序的规格说明书准确地描述了对软件系统的数据要求、功能需求、性能需求、可靠性和可用性要求、出错处理需求、接口需求、约束、逆向需求及将来可能提出的需求,对了解已有软件的总体情况有很大帮助。在对已有软件做重大修改之前仔细阅读、认真研究这份文档,可以避免许多修改错误。因此,应该选取(a)程序的规格说明。
(2) 有经验的软件工程师通过阅读含有适当数量注解的源程序,不难搞清程序的实现算法,没有描述详细
档,理由如下:
(1) “对一个已有的软件做重大修改”意味着对软件功能做较大变更或增加较多新功能,这往往需要修改软
件的体系结构。因此,了解原有软件的总体情况是很重要的。程序的规格说明书准确地描述了对软件系统的数据要求、功能需求、性能需求、可靠性和可用性要求、出错处理需求、接口需求、约束、逆向需求及将来可能提出的需求,对了解已有软件的总体情况有很大帮助。在对已有软件做重大修改之前仔细阅读、认真研究这份文档,可以避免许多修改错误。因此,应该选取(a)程序的规格说明。
(2) 有经验的软件工程师通过阅读含有适当数量注解的源程序,不难搞清程序的实现算法,没有描述详细
设计结果的文档并不会给维护工作带来太大困难。此外,为了修改程序代码,原有程序的清单是必不可少的。因此,应该选取(c)源程序清单。

相关文章:

  • 2021-08-16
  • 2021-09-17
  • 2021-12-23
  • 2021-09-29
  • 2021-06-24
  • 2021-12-06
  • 2022-01-19
  • 2022-01-12
猜你喜欢
  • 2021-09-05
  • 2021-09-04
  • 2021-11-10
  • 2021-05-25
  • 2021-07-11
  • 2021-10-23
相关资源
相似解决方案