本文最后更新于 2025-03-13,文章内容可能已经过时。

软件工程:第七章 维护

导学目标

  • 掌握软件维护的概念以及4类维护性活动

  • 掌握软件维护的本质和过程

  • 掌握软件可维护性的定义及决定因素

  • 掌握软件再工程的定义以及6类活动

第一节 软件维护的概念

在软件产品开发出来并交付用户使用之后,就进入了软件的维护阶段

维护是软件生命周期的最后一个阶段,其基本任务是保证软件在一个相当长的时期能够正常运行

软件工程的主要目的是提高软件的可维护性,减少软件维护所需要的工作量,降低软件系统的总成本

软件维护的定义

  • 软件维护就是软件已经交付使用后,为了改正错误或者满足新的需要去修改软件的过程

4类维护

  • 改正性维护:针对原有错误

  • 适应性维护:针对环境变化

  • 完善性维护:针对功能扩展

  • 预防性维护:针对未来发展

软件维护的特点

  1. 结构化维护与非结构化维护差别巨大

    • 非结构化维护

      • 软件配置的唯一成分是程序代码

      • 缺少程序文档,难以理解源程序

      • 所有改动的后果是难以估量的

      • 缺乏测试文档,无法进行回归测试

    • 结构化维护

      • 减少精力浪费,提高维护的总体质量

  2. 维护的代价高昂

    • 1970年维护费用占总预算35%-40%,1990年上升至70%-80%

    • 无形代价:

      • 用户不满

      • 维护时引入了潜在错误,降低了软件质量

      • 造成开发过程混乱,生产率大幅度下降

  3. 维护问题很多

    • 理解别人写的程序非常困难

    • 需要维护的软件没有合格的文档

    • 维护软件时不能指望开发人员给我们仔细说明软件

    • 绝大多数软件在设计时没有考虑到将来修改

    • 软件维护不是一项吸引人的工作

第二节 软件维护的过程

本质

  • 软件维护的本质是修改和压缩了的软件定义和开发过程

软件维护的过程

  1. 维护组织

    • 在开始前就要明确责任,有维护管理员和系统管理员

  2. 维护报告

    • 软件维护人员通常给用户提供空白的维护要求表,由维护管理员和系统管理员进行评价

    • 软件组织内部指定软件修改报告

      • 满足维护要求表中提出的要求所需要的工作量

        • 维护要求的性质

        • 这项要求的优先次序

        • 与修改有关的事后数据

  3. 维护事件流

    • 确定维护的类型

      • 对于改正性维护:从估量错误的严重程度开始

        • 严 重:分派人员,立即开始问题分析处理过程

        • 不严重:和其他要求的软件开发资源任务一起统筹安排

    • 对于适应性和改善性维护的要求沿着相同的事件流通路进行

      • 维护工作主要包括修改软件设计、复查、必要的代码修改、单元测试和集成测试、验收测试和复审

        • 复查试图回答下述问题

          • 在当前处境下设计、编码、测试的哪些方面能用不同方法进行

          • 哪些维护资源是应该有而事实上还没有

          • 什么是主要障碍

          • 要求有预防性维护吗

  4. 保存维护记录

  5. 评价维护活动

第三节 软件可维护性

软件可维护性定义

  • 维护人员理解、改正、改进这个软件的难易程度

决定可维护性的因素

  • 可理解性:用户理解软件的结构、功能、接口等的难易程度

  • 可测试性:容易理解的程度、测试工具、程序复杂度

  • 可修改性:软件容易修改的程度

  • 可移植性:把程序从一种计算环境转移到另一种计算环境的难易程度

  • 可重用性:对同一事物不加或者稍作修改就可以多次重复使用

文档

  • 文档是软件可维护性的决定性因素

  • 用户文档:描述系统功能和使用方法,不关心如何实现

    • 功能描述

    • 安装文档

    • 安装手册

    • 参考手册

    • 操作员指南

  • 系统文档:描述系统的设计、实现和测试等方面的内容

可维护性复审

  • 在开发过程的每一个阶段都应该把减少今后的维护工作量作为努力的目标,不仅在开发时期要注意尽量提高软件的可维护性,在维护时期更要注意保持可维护性

  • 在每个阶段结束的技术审查和管理复查中,应该着重对可维护性进行复审

第四节 软件再工程

软件再工程:如何修改老程序以适应新需求

  1. 反复多次做修改程序的尝试

  2. 通过仔细分析程序,尽可能多的掌握内部细节,再修改

  3. 再深入理解原有基础上,采用软件工程方法重新设计、编码和测试那些需要变更的部分

  4. 以软件工程方法学为指导,对程序重新设计、编码和测试,为此可以使用CASE工具(逆向工程和在工程工具)来帮助理解原有的设计

软件再工程的过程模型

image-20240808180106125

软件再工程是一个循环模型,包括库存目录分析、文档重构、逆向工程、代码重构、数据重构和正向工程6类活动