软件维护(SOFTWARE MAINTENANCE)
软件开发工作的结果是交付满足用户需求的软件产品。因此,软件产品必须改变或发展。一旦投入使用,缺陷就会被发现,操作环境会发生变化,新的用户需求就会浮出水面。生命周期的维护阶段开始于保修期或实施后支持交付之后,但维护活动发生的时间要早得多。
软件维护是软件生命周期的一个组成部分。然而,它并没有得到与其他阶段同等程度的关注。从历史上看,在大多数组织中,软件开发比软件维护更受关注。这一点现在正在发生变化,因为各组织正努力通过尽可能长时间地保持软件运行来最大限度地利用其软件开发投资。开源范例进一步关注了维护由他人开发的软件构件的问题。
在本指南中,软件维护是指为软件提供经济高效的支持所需的全部活动。活动在交付前阶段和交付后阶段进行。交付前活动包括交付后操作的规划、可维护性和过渡活动的后勤确定[1*,c6s9]。交付后的活动包括软件修改、培训和操作或与服务台的接口。
软件维护知识领域(KA)与软件工程的所有其他方面相关。因此,本KA描述与指南中的所有其他软件工程KA相关联。
1. 软件维护的基本原理
第一节介绍了构成理解软件维护的角色和范围的基础的概念和术语。这些主题提供了定义并强调了为什么需要维护。软件维护的类别对于理解其基本含义至关重要。
1.1.定义和术语
软件维护的目的在国际软件维护标准ISO/IEC/IEEE 14764[1*]中定义。在软件工程的背景下,软件维护本质上是许多技术过程之一。
软件维护的目的是在保持软件完整性的同时对现有软件进行修改。国际标准还规定在软件最终交付之前进行一些维护活动(交付前活动)的重要性。值得注意的是,IEEE14764强调了交付前维护计划的重要性。
1.2.维护的性质
软件维护支持软件产品的整个生命周期(从开发到运行)。修改请求被记录和跟踪,提议的变更的影响被确定,代码和其他软件工件被修改,测试被执行,新版本的软件产品被发布。此外,还向用户提供培训和日常支持。术语维护者定义为执行维护活动的组织。在本KA中,术语有时指执行这些活动的个人,将他们与开发人员进行对比。
IEEE14764将软件维护的主要活动定义为过程实现、问题和修改分析、修改实现、维护评审/验收、迁移和退役。这些活动将在第3.2节“维护活动”中讨论。
维护人员可以从开发人员的软件知识中学习。与开发人员的联系和维护人员的早期参与有助于减少总体维护工作。在某些情况下,无法联系到最初的开发人员,或者已经转移到其他任务,这给维护人员带来了额外的挑战。维护必须从开发中获取软件工件(例如,代码或文档)并立即支持它们,然后在软件生命周期中逐步演化/维护它们。
1.3.必要的维护
维护是必要的,以确保软件继续满足用户需求。维护适用于使用任何软件生命周期模型开发的软件((例如,螺旋或线性开发)。
由于纠正性和非纠正性的软件措施而导致的软件产品变更。必须进行维护,以便
- 纠正故障;
- 改进设计;
- 实施增强功能;
- 与其他软件的接口;
- 调整程序,以便使用不同的硬件、软件、系统功能和电信设施;
- 移植遗留软件;以及
- 淘汰软件。
五个关键特征构成了维护人员的活动:
- 保持对软件日常功能的控制;
- 保持对软件修改的控制;
- 完善现有职能;
- 识别安全威胁并修复安全漏洞;以及
- 防止软件性能降低到不可接受的水平。
1.4. 大部分维护费用
维护消耗了软件生命周期中的大部分财务资源。对软件维护的一个普遍看法是,它仅仅是修复故障。然而,多年来的研究和调查表明,大多数,超过80%的软件维护被用于非纠正操作[2*,图4.1]。在管理报告中将增强和更正合并在一起会造成一些关于更正费用高的错误观念。了解软件维护的类别有助于理解软件维护成本的结构。此外,了解影响软件可维护性的因素有助于控制成本。一些环境因素及其与软件维护成本的关系包括:
- 操作环境指硬件和软件。
- 组织环境是指政策,竞争,流程,产品和人员。
1.5. 软件进化
从进化的角度来看,软件维护最早是在20世纪60年代末提出的。在二十年的时间里,研究导致了八条进化定律的形成。主要的发现包括一个建议,即