1. 软件维护简介
软件的运行维护阶段是软件生命周期的最后一个阶段,其基本任务是保证软件在一个相当长的时期能够正常运行。
软件维护工作量很大,大型软件维护成本高达开发成本的4倍左右。
软件工程的主要目的之一就是要提高软件的可维护性,减少软件维护所需要的工作量,降低软件系统的总成本。
2. 软件维护的定义
软件维护就是在软件已经交付使用之后,为了改正错误、提高性能或满足新的需要而修改软件的过程。
主要4种维护活动:
- 改正性维护:17~21%;
- 适应性维护:18~25%;
- 完善性维护:50~66%;
- 预防性维护等其他维护活动:4%左右。
4种维护活动不仅要维护软件的可执行代码,还包括软件文档的维护。
- 改正性维护。改正性维护是为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应进行的诊断和改正错误的过程。
- 适应性维护。为了适应环境的变化而修改软件的活动,是既必要又经常的维护活动。
- 完善性维护。为了满足用户新的功能与性能要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性。
- 预防性维护。为了改进未来的可维护性或可靠性,为了适应未来的软硬件环境的变化,或为了给未来的改进奠定更好的基础而修改软件。例如将专用报表功能改成通用报表生成功能,以适应将来报表格式的变化。
3. 非结构化和结构化维护
3.1 非结构化维护
软件配置的唯一成分是程序代码。
维护活动从艰苦地评价程序代码开始,常常由于程序内部文档不足而使评价更困难,对于软件结构、全程数据结构、系统接口、性能和(或)设计约束等经常会产生误解,而且对程序代码所做的改动的后果也是难于估量的。
非结构化维护需要付出很大代价,这种维护方式是没有使用良好定义的方法学开发出来的软件的必然结果。
3.2 结构化维护
存在完整的软件配置:
- 评价设计文档,确定软件重要的结构、性能以及接口等特点
- 估量要求的改动将带来的影响,并且计划实施途径
- 修改设计并且对所做的修改进行仔细复查
- 编写相应的源程序代码
- 使用测试说明书中包含的信息进行回归测试
- 修改后的软件再次交付使用
4. 软件维护的过程
4.1 建立维护组织
虽然通常并不需要建立正式的维护组织,但是,即使对于一个小的软件开发团体而言,非正式地委托责任也是绝对必要的。
4.2 确定维护报告
软件组织应根据维护申请报告制定软件修改报告:
- 满足维护要求表中提出的要求所需要的工作量。
- 维护要求的性质。
- 这项要求的优先次序。
- 与修改有关的事后数据。
4.3 规定维护事件序列
- 确定要求进行的维护类型。
- 技术工作:修改软件设计、代码、单元测试和集成测试、验收测试和复审。
4.4 保存维护记录
做好维护记录,并长期保存,以便于评估维护技术的有效程度、维护的代价(实际工作量、费用等)以及软件产品的质量。
4.5 评价维护工作
根据维护记录中保存的数据,可以从7个方面度量维护活动:
- 每次程序运行平均失效次数。
- 用于每一类维护活动的总人时数。
- 平均每个程序、每种编程语言、每种维护类型所做的程序变动数。
- 维护过程中增加或删除一个源语句平均花费的人时数。
- 维护每种编程语言平均花费的人时数。
- 一张维护要求表的平均周转时间。
- 不同维护类型所占的百分比。
根据度量结果,可以做出软件开发技术、编程语言选择、维护工作的时间分配、维护工作的人员分配以及其它资源分配等方面的评估。即,可以用于评价维护工作。