【课前思考】
�1、什么是软件质量?软件质量反映哪三方面问题?
  2、什么是软件质量特性?在软件的质量模型中将质量特性如何分层?
  3、McCall质量模型将11种质量特性分布在三个方面,如何分布?
  4、ISO质量模型由哪3层组成?质量特性之间有什么关系?
  5、TQC的4个步骤是什么?
  6、软件维护有哪4种?各在什么情况发生?工作量 比例如何?
  7、影响维护工作量的因素有6种,说明理由。
  8、维护工作量分为生产性活动和非生产性活动,它们对总工作量有什么影响?
  9、程序修改的步骤分为3步。每一步的任务是什么?
  10、修改程序的副作用有哪3种?请举例说明。
  11、重新验证程序分静态确认和计算机确认。各检查什么问题?
  12、软件可维护性为什么是软件开发各阶段的关键目标?它用哪7种特性来衡量?
  13、提高可维护性有哪些措施?
  14、为保证软件可维护性,需要有4种类型的审查。那些审查是在开发阶段做的?哪些审查是在维护阶段做的?
  15、为什么维护阶段需要文档的帮助?历史文档有哪3种,各有什么作用?
  16、什么是软件再工程?为什么要实施软件再工程?
  17、什么是逆向工程?它的抽象层次有哪4层?各用什么表示?
  18、软件再工程的技术有3类,各有哪些技术?
  19、软件视图分为4类,每一类有哪些视图编辑器?
  20、软件再工程的风险有哪些?举例说明。

【学习目标
 �1. 了解软件质量定义和软件质量度量。
  2. 了解软件维护的类型与策略。
  3. 了解软件维护的过程与管理方法。
  4. 了解可维护性的概念。
  5. 了解提高可维护性的方法。
  6. 了解软件逆向工程与再工程的概念

学习指南
  本章主要讨论软件维护的相关问题,包括质量、维护活动、可维护性、可维护性度量、如何提高可维护性,以及通过软件再工程进行自动维护等。因为软件的维护关系到软件的生存期,为了延长软件的生存期,需要通过维护来改进软件,以适应不断变化的用户需求和环境。因此,维护在生存期中所占工作量的比例是最高的。
  本章最先讨论软件质量模型,说明可维护性在质量模型中应用什么质量特性来衡量。接下来介绍软件维护的定义,说明有4种类型的维护。根据影响维护工作量的因素,确定每一种类型的维护需要采取什么样的维护策略。
  维护的实施分为结构化维护和非结构化维护,不同的维护活动对维护结果有显著影响,这不但取决于维护的组织,还取决于开发阶段的组织。在维护中如何修改程序,必须遵循3个步骤:理解程序、修改程序、重新验证程序。必须注意的是,在修改程序时会引起程序修改的副作用。可能的副作用有3类:修改代码的副作用、修改数据的副作用和文档的副作用
  软件可维护性反映了软件在改正错误、适应新的环境及扩充功能方面的容易程度。如果软件产品的可维护性强,说明软件将来的维护容易,修改工作量小。为此必须在开发的过程中注意可维护性问题。在本章,通过7个质量特性的检查表,说明了如何才能保证软件的可维护性,并介绍了提高可维护性的5个方法:建立明确的质量目标和优先级、使用提高软件质量的技术和工具、进行明确的质量保证审查、选择可维护的程序设计语言和改进程序的文档。
  本章的最后介绍了软件再工程和逆向工程技术。它对于软件维护提供了强有力的支持。从不同层次理解软件、改进软件、获取、保护和扩充软件知识。但它也有风险,必须加以防范。

【难重点
   分层的软件质量模型定义,重点在McCall模型和ISO模型框架
  ◇ 质量特性间的竞争关系:有互相促进的、有互相抵触的
  ◇ 全面质量管理的4个步骤:开展、当然的质量、感性、有魅力的质量
  ◇ 维护的4种类型:改正性维护、适应性维护、完善性维护、预防性维护
  ◇ 程序修改的步骤:分析和理解程序、修改程序、重新验证程序
  ◇ 程序修改的副作用:修改程序副作用、修改数据副作用、文档副作用
  ◇ 衡量可维护性的7个特性:可理解性、可测试性、可修改性、可靠性、可移植性、可使用性、效率。它们在各种维护类型中的侧重点。
  ◇ 为提高软件可维护性的技术和工具有模块化、结构化程序设计、面向对象方法,以及软件再工程和逆向工程等。
  ◇ 为提高软件可维护性而进行的质量保证审查有:在检查点复审、验收审查、周期性维护审查、对软件包检查等。
  ◇ 软件再工程技术包括改进软件、理解软件、获取、保护和扩充软件知识
  ◇ 逆向工程包括4层抽象:过程性设计的表示(最低层)、程序和数据结构信息(低层)、数据和控制流模型(中层)、试题关系模型(高层)。
  ◇ 软件再工程的风险有过程风险、人员风险、应用问题风险、技术风险、工具风险、策略风险。