各个工程领域都会在将产品交付给用户之后进行维护工作主要是为了保证产品的正常运转而进行使用帮助、故障解决和磨损处理等工作。
IEEE就定义软件维护为[IEEE610.12-1990]:软件维护是在交付之后修改软件系统或其部件的活动过程,以修正缺陷、提高性能或其他属性、适应变化的环境。
完善性维护(Perfective maintenance):为了满足用户新的需求、增加软件功能而进行的软件修改活动。
在软件的使用过程中,用户往往会对软件提出新的功能与性能要求。为了满足这些要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性。这种情况下进行的维护活动叫做完善性维护。
适应性维护(Adaptive maintenance):为了使软件能适应新的环境而进行的软件修改活动。
随着计算机技术的飞速发展,外部环境(新的硬、软件配置)或数据环境(数据库、数据格式、数据输入/输出方式、数据存储介质)可能发生变化,为了使软件适应这种变化,而修改软件的过程就叫做适应性维护
适应性维护不可避免,但可以控制。
(1)配置管理适应性维护时就考虑到硬件变化,以及操作系统和其他相关环境因素的可能变化,可以减少某些适应性维护的工作量。
(2)将与硬件、操作系统,以及其他外围设备有关的程序归到特定的程序模块中,也可以减少某些适应性维护的工作量。
(3)使用内部程序列表、外部文件以及处理的例行程序包,可为维护时修改程序提供参考。
改正性维护(Corrective maintenance):为了排除软件产品中遗留缺陷而进行的软件修改活动。
在软件交付使用后,由于开发时测试的不彻底、不完全,必然会有一部分隐藏的错误被带到运行阶段来。这些隐藏的错误在某些特定的使用环境中就会暴露。为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用而进行的诊断和改正错误的过程,就叫做改正性维护。
在软件开发过程中,可以通过使用新技术大大提高软件的可靠性,并减少改正性维护。这些技术包括数据库管理系统、软件开发环境、程序自动生成系统、较高级(第四代)语言,应用这些技术可产生更加可靠的代码。此外,还可利用以下方法提高软件的可靠性:
(1)利用应用软件包。利用应用软件包可开发出比完全由用户自己开发的系统可靠性更高的软件。
(2)结构化技术。用结构化技术开发的软件易于理解和测试。
(3)防错性程序设计。把自检能力引入程序,通过非正常状态的检查提供审查跟踪。
(4)周期性维护审查。通过周期性维护审查,在形成维护问题之前就可确定质量缺陷。
预防性维护(Preventive maintenance):为了让软件产品在将来可维护,提升可维护性的软件修改活动。
这种维护活动为了提高软件的可维护性、可靠性,为以后进一步改进软件打下良好基础。