1、概述
软件维护是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。
(1)软件维护分类
改正性维护
在软件交付使用后,因开发时测试的不彻底、不完全,必然会有部分隐藏的错误遗留到运行阶段。
隐藏下来的错误在某些特定的使用环境下就会暴露出来。
为了识别和纠正软件中的错误、改正软件性能上的缺陷、排除实施中的误用,应当进行的诊断和改正错误的过程,称为“改正性维护”。
适应性维护
软件使用过程中,可能遇到多种变化:
外部环境:新的硬、软件配置
数据环境:数据库、数据存储介质、数据格式、输入/输出方式
为了和变化了的环境适当配合,而修改软件的活动,称为“适应性维护”。
完善性维护
在软件的使用过程中,用户往往提出增加新功能或修改已有功能的建议,还可能提出一般性的改进意见,需要修改或再开发软件。
为了扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性,而进行的维护活动,称为完善性维护。
预防性维护
为了防止错误的功能,提高软件的可维护性或可靠性,给未来的改进奠定良好基础,需进行预防性维护。
采用先进的软件工程方法,对需要维护的软件或软件中的某一部分重新进行设计、编制和测试。
大部分维护工作是为了加强软件而非纠错,是有计划、有预谋的一种再开发活动。
软件在运行过程中需要不断修改,以纠正错误、适应变化、扩充功能,这些花费很多精力和时间。
(2)软件维护工作量
软件维护过程中,需要花费大量的工作量,从而直接影响了软件维护的成本。
维护工作可以分为生产性活动(分析评价、修改设计和编写代码等)和非生产性活动(理解代码功能,解释数据结构、接口特点和性能等),下面给出维护工作量的一个模型:
P是指生产性活动
k指经验常数
c指程序复杂度
d指维护人员对于程序熟悉程度
(3)软件维护的副作用
副作用是指因修改软件而造成的错误或其它不希望发生的情况,副作用有以下三种:
修改代码的副作用:修改源代码时可能引入新的错误
修改数据的副作用:可能造成数据结构与原有软件设计不匹配
文档的副作用:文档不能反映软件的当前状态
2、过程
(1)软件维护的组织
为了有效地进行软件维护,应事先开始做组织工作:
①首先建立维护的组织机构;
②申明提出维护申请报告的过程及评价过程;
③为每一个维护申请规定标准的处理步骤;
④建立维护活动的登记制度,规定评价和评审标准。
(2)程序修改的步骤及副作用
软件维护时,必然会对源程序进行修改。
不能无计划、仓促地修改源程序,为了达到正确、有效地修改,要经历以下步骤:
①分析和理解程序
②修改程序
③重新验证程序
3、软件的可维护性
许多软件的维护十分困难,原因在于这些软件的文档不全、质量差、开发过程不注意采用好的方法,忽视程序设计风格等。
为了使得软件能够易于维护,必须考虑使软件具有可维护性。
提高可维护性是软件生命周期各个时期的目标。
(1)定义
软件的可维护性是指纠正软件系统出现的错误和缺陷,为满足新的要求进行修改、扩充或压缩的容易程度。
(2)决定因素
①可理解性
表明人们通过阅读源代码和相关文档,了解软件的功能、结构、接口和内部处理过程的容易程度。
一个可理解的程序应具备以下一些特性: 模块化、风格一致 、结构化、完整性 、使用有意义的数据名和过程名、 不使用捉摸不定或含糊不清的代码等
②可测试性
表明诊断和测试程序中错误的容易程度,它取决于软件容易理解的程度。
设计合用的测试用例,取决于对程序的全面理解。一个可测试的程序首先应当是可理解的、可靠的、简单的。
对于程序模块,可用程序复杂度来度量可测试性。环路复杂度越大,路径越多,全面测试难度越大。
③可修改性
表明程序容易修改的程度。一个可修改的程序应当是可理解的、简单的、通用的、灵活的。
通用性指程序适用于各种功能变化而无需修改。
灵活性指能够容易地对程序进行修改。
测试可修改性的一种定量方法是修改练习,基本思想是通过做几个简单的修改,评价修改的难度。
④可移植性
表明程序从一种计算环境(硬件配置和操作系统)转移到另一种计算环境的难易程度。
一个可移植性的程序应该具有良好的结构、灵活性和平台无关性。
以把因环境变化而必须修改的程序代码集中放到特定的程序模块中,从而降低修改的难易程度。
⑤可重用性
重用是指同一事物不做修改或稍作改动就在不同环境中多次重复使用。
软件重用技术是能从根本上提高软件可维护性的重要技术。
面向对象技术是目前最为成功的软件重用技术。
(3)提高可维护性的方法
软件的可维护性对延长软件的生存期具有决定意义,提高软件的可维护性从以下方面着手:
①建立明确的软件质量目标和优先级
②使用提高软件质量的技术方法和工具
③进行明确的质量保证审查
④选择可维护的程序设计语言
⑤改进程序的文档