第八章 软件维护
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第八章软件维护
软件投入使用后就进入软件维护阶段。维护阶段是软件生存周期中时间最长的一个阶段,所花费的精力和费用也是最多的一个阶段。
软件维护是软件工程的一个重要任务,作为理论,本章的内容比较简单,多为识记领会内容,主要应注意一些概念。其中的软件可维护性是本章的重点内容。
8.1软件维护的内容
软件维护内容有四种:校正性维护,适应性维护,完善性维护和预防性维护。
1.校正性维护
在软件交付使用后,由于在软件开发过程中产生的错误并没有完全彻底的在测试中发现,因此必然有一部分隐含的错误被带到维护阶段来。这些隐含的错误在某些特定的使用环境下会暴露出来。为了识别和纠正错误,修改软件性能上的缺陷,应进行确定和修改错误的过程,这个过程就称为校正性维护。校正性维护占整个维护工作的21%左右。
2.适应性维护
随着计算机的飞速发展,计算机硬件和软件环境也在不断发生变化,数据环境也在不断发生变化。为了使应用软件适应这种而修改软件的过程称为适应性维护。这种维护活动占整个维护活动的25%。
3.完善性维护
在软件漫长的运行时期中,用户往往会对软件提出新的功能要求与性能要求。这是因为用户的业务会发生变化,组织机构也会发生变化。为了适应这些变化,应用软件原来的功能和性能需要扩充和增强,为达到这个目的而进行的维护活动称为完善性维护,占整个维护活动的50%。
4.预防性维护
为了提高软件的可维护性和可靠性而对软件进行的修改称为预防性维护。这是为以后进一步的运行和维护打好基础,占整个维护工作的4%。
8.2 维护的特点
8.2.1非结构化维护和结构化维护
软件的开发过程对软件的维护过程有较大的影响。若不采用软件过程的方法开发软件,则软件只有程序而无文档,维护工作非常难,这就是一种非结构化的维护。若采用软件工程的方法开发软件,则各阶段都有相应的文档,这容易进行维护工作,这是一种结构化的维护。
1.非结构化维护
因为只有源程序,而文档很少或没有文档,维护活动只能从阅读、理解、分析源程序开始。这是软件工程时代以前进行维护的情况。
2.结构化维护
用软件工程思想开发的软件具有各阶段的文档,这对于理解和掌握软件功能、性能、系统结构、数据结构、系统接口和设计约束有很大作用。这种维护对减少精力、减少花费、提高软件维护效率有很大的作用。
8.2.2维护的困难性
软件维护的困难性是由于软件需求分析和开发方法的缺陷。软件生存周期中的开发阶段没有严格而又科学的管理和规划,就会引起软件运行时的维护困难。表现在以下几个方面:
1.读懂别人的程序是困难的。
2.文档的不一致性。
由于开发过程中文档管理不严所造成的,在开发过程中经常会出现修改程序却遗忘了修改与其相关的文档,使得文档前后不一致。
3.软件开发和软件维护在人员和时间上的差异
由于维护阶段持续时间很长,正在运行的软件可能是十几、二十年前开发的,开发工具、方法、技术与当前的工具、方法、技术差异很大,这又是维护困难的另一因素。
4.软件维护不是一项吸引人的事
由于维护工作的困难性,维护工作经常遭受挫折,而且很难出成果,不像软件开发工作那样吸引人。
8.2.3软件维护的费用
软件维护的费用在总费用中的比重是不断增加的。七十年代占35%~40%,八十年代上升到40%~60%,九十年代上升到70%~80%。软件维护费用不断上升,这只是软件维护有形的代价,无形的代价是要占用更多的资源,并在维护时对软件的改动,引入了潜在的故障,从而降低了软件的质量。用于软件维护工作的活动可分为生产性活动和非生产性活动两种。生产性活动包括分析评价、修改设计和编写程序代码等。非生产性活动包括理解程序代码功能、解释数据结构接口特点和设计约束。
维护活动总的工作两由下式表示:M=P+K×exp(C-D) 其中:M表示维护工作的总工作量;
P表示生产性活动工作量;
K表示经验常数;
C表示复杂性程度;
D表示维护人员对软件的熟悉程度;
上式表明,若C越大,D越小,那么维护工作量将成指数增加;C增加表示软件因未用软件工程方法开发,从而使得软件为非结构化设计,文档缺少,程序复杂性高。D表示维护人员不是原来的开发人员,对软件熟悉程度低,重新理解软件花费很多时间。
8.3维护任务的实施
8.3.1维护的组织
为了有效地进行软件维护,应事先开始组织工作,建立维护机构。这种维护机构通常以维护小组形式出现。维护小组分为临时维护小组和长期维护小组。
8.3.2维护的流程
软件维护的流程如下:
(1)制定维护申请报告。
(2)审查申请报告并批准。
(3)进行维护并做详细记录。
(4)复审。
1.制定维护申请报告
所有软件维护申请报告应按照规定的方式提出。该报告也称为软件问题报告。它是维护阶段的一种文档,由申请维护的用户填写。维护申请报告是一种由用户产生的文档,在软件维护组织内部还要制定一份软件修改报告,该报告是维护阶段的另一种文档。
提出维护申请报告之后,由维护机构来评审维护请求。评审工作很重要,通过评审回答要不要维护,从而可以避免盲目的维护。
2.维护过程
一个维护申请提出之后,经评审需要维护则按下列过程实施维护:
(1)首先确定要进行维护的类型。
(2)对校正性维护从评价错误的严重性开始。
(3)对适应性维护和完善性维护。
(4)实施维护任务。不管维护类型如何,大体上要开展相同的技术工作。这些工作包括修改软件设计、必要的代码修改、单元测试、集成测试、确认测试以及复审。每种维护类型的侧重点不一样。
(5)“救火”维护。在发生重大问题时,需要立即解决的问题。
3.维护的复审
在维护任务完成后,要对维护任务进行复审。
8.3.3维护技术
有两类维护技术,它们是面向维护的技术和维护支援技术。
1.面向维护的技术
面向维护的技术涉及软件开发的所有阶段,是在软件开发阶段用来减少错误、提高软件可维护性的技术。
2.维护支援技术
维护支援技术是在软件维护阶段用来提高维护作业的效率和质量的技术。维护支援技术包括下列方面的技术:
.信息收集;
.错误原因分析;
.维护方案评价;
.软件分析与理解;