第八章软件维护合肥工业大学理学院•在软件开发过程中始终强调软件的可维护性。原因是,一个应用系统由于需求和环境的变化以及自身暴露的问题,在交付用户使用后,对它进行维护是不可避免的,统计和估测结果表明,信息技术中硬件费用一般占35%,软件占65%,而软件后期维护费用有时竟高达软件总费用的80%,所有前期开发费用仅占20%。•许多大型软件公司为维护已有软件耗费大量人力、财力。因此,必须建立一套评估、控制和实施软件维护的机制,这就是本章重点讨论的内容。8.1软件维护的定义•软件维护是指软件系统交付使用以后,为了改正错误或满足新的需要而修改软件的过程。软件维护的类型•根据软件维护的不同原因,软件维护可以分成4种类型:–纠错性(改正性)维护–适应性维护–完善性维护–预防性维护纠错性维护•在软件交付使用后,因开发时测试的不彻底、不完全,必然会有部分隐藏的错误遗留到运行阶段。•这些隐藏下来的错误在某些特定的使用环境下就会暴露出来。•为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应当进行的诊断和改正错误的过程就叫做纠错性维护。适应性维护•在使用过程中,–外部环境(新的硬、软件配置)–数据环境(数据库、数据格式、数据输入/输出方式、数据存储介质)可能发生变化。•为使软件适应这种变化,而去修改软件的过程就叫做适应性维护。完善性维护•在软件的使用过程中,用户往往会对软件提出新的功能与性能要求。•为了满足这些要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性。•这种情况下进行的维护活动叫做完善性维护。预防性维护•预防性维护即软件再工程,是为了提高软件的可维护性、可靠性等,为以后进一步改进软件打下良好基础而修改软件的活动。•采用先进的软件工程方法对需要维护的软件或软件中的某一部分(重新)进行设计、编制和测试,称为预防性维护。各种维护类型和维护工作量的比例其它维护4%适应性维护18-25%改正性维护17-21%扩充与完善性维护50-66%改正性维护占全部维护量的比率已从80年代初的20%大幅度下降,90年代初一些公司的产品差错率已接近于零!维护占70.8%8.2软件维护的特点•结构化维护和非结构化维护差别巨大•软件维护的代价高昂•维护问题多多结构化维护VS非结构化维护•软件的开发过程对软件的维护产生较大的影响。–如果采用软件工程的方法进行软件开发,保证每个阶段都有完整且详细的文档,这样维护会相对容易,被称为结构化的维护。–反之,如果不采用软件工程方法开发软件,软件只有程序而欠缺文档,则维护工作变得十分困难,被成为非结构化的维护。结构化维护非结构化维护程序文档交付使用分析设计制定计划修改计划重新编码复审通过文件有吗苦读代码找到问题重新编码复审通过维护要求nyyyynnn结构化维护非结构化维护非结构化维护•在非结构化维护过程中,开发人员只能通过阅读、理解和分析源程序来了解系统功能、软件结构、数据结构、系统接口和设计约束等,这样做是十分困难的,也容易产生误解。要弄清楚整个系统,势必要花费大量的人力和物力,对源程序修改产生的后果难以估计。在没有文档的情况下,也不可能进行回归测试,很难保证程序的正确性。结构化维护•在结构化维护的过程中,所开发的软件具有各个阶段的文档,它对于理解和掌握软件的功能、性能、体系结构、数据结构、系统接口和设计约束等有很大的作用。•维护时,开发人员从分析需求规格说明开始,明白软件功能和性能上的改变,对设计说明文档进行修改和复查,再根据设计修改进行程序变动,并用测试文档中的测试用例进行回归测试,最后将修改后的软件再次交付使用。这种维护有利于减少工作量和降低成本,大大提高软件的维护效率。软件维护的代价高昂软件维护的费用逐年上升:1970年软件维护费用占总费用的35%——40%;1980年软件维护费用占总费用的40%——60%;1990年软件维护费用占总费用的70%——80%。•维护费用只不过是软件维护最明显的代价,其他无形的代价还有:–可用的资源被软件维护所占用,以致耽误或丧失了其他软件开发的良机。–未能及时满足...