配置(configuration)一词在计算机领域已有广泛的应用。所谓“计算机系统配置”,是指计算机系统或计算机部件按其组成的零件数量、性质及相互联系所确定的安排。软件配置的含意与此类似,但在管理对象和方法上还是有一些差别。

  软件配置管理是软件管理的重要内容。近年来,软件项目的规模越来越大,复杂性越来越高,管理失误给我们的教训也越来越深刻,这使得人们不得不重视配置管理。

  软件开发过程中的变更以及相应的返工会对产品的质量造成很大的影响。有统计表明,变更及其返工可能耗费50%的开发工作量,如果不从配置管理方面加以控制,必将导致严重的后果。软件配置管理的一个重要内容就是对变更加以控制,将变更对成本、工期和质量的影响降到最小。

图为作者郑人杰近影

  一、软件配置管理的概念

  1.软件配置项(software configuration item)

  (1)软件开发的过程中,会得到许多工作产品或阶段产品,还会用到许多工具软件,这可能是外购软件,也可能是用户提供的软件。所有这些独立的信息项都要得到妥善的管理,绝不能出现混乱,以便在提出某些特定的要求时,能将其进行约定的组合来满足使用的目的。

  这些信息项是配置管理的对象,称为软件配置项。例如,需求规格说明、设计规格说明、用户手册、维护使用手册都属于此。

  (2)软件配置

  如果说软件配置项是一个独立存在的信息项,我们可以把它看成一个元素。单独的一个元素发挥不了什么作用,但随着工作的进展,出于不同的要求,需要将这些元素进行不同的组合。软件配置是一个软件产品在生存期各个阶段的不同形式(记录特定信息的不同媒体)和不同版本的程序、文档及相关数据的集合,或者说是配置项的集合。

  这里以交付给不同用户的某一软件产品为例,进一步说明软件配置的含意。如果我们开发的软件产品是具有一定功能和性能的初始系统,但最终的产品应能满足用户的需求,为此,我们必须认真研究用户的真正需求。经调查,了解到“用户1”代表了一些用户,这个用户群使用的计算机为“机型1”,所用的操作系统是“操作系统1”;而“用户2”所代表的用户群使用着“机型2”和“操作系统2”(参看图1)。就是说,不同用户有不同的工作环境,我们的软件产品必须考虑到这些差异,并且充分地使其满足各个用户的使用要求。为做到这一点,产品的设计可能做成这样的安排(如图2所示),两类产品分别针对两个用户群,产品内部设计的模块(按上面的说法是配置项)

  用户1:A、B、C、D、E和F

  用户2:A、B、C、D、E和G、H

  两者的差别不仅表现在一个含有F,另一个含有G和H,而且即使两者的A在逻辑上是同一个内容,但在物理上仍然可能因两类用户需求的不同而有差异,例如,两个A分别以不同的媒体出现。

  为实现这两种不同的软件配置,在实际工作中,我们完全可以将各个配置项分别开发出来,再根据需要,组合成针对不同用户使用要求的不同产品,正如图3所示。

  2.软件配置管理(software configuration management)

  (1)什么是软件配置管理

  软件配置管理主要是对软件生存期过程中的各种阶段产品和最终产品演化和变更的管理,它是软件质量管理的重要组成部分。如果从变更的意义讲,软件配置管理要解决软件的变更标识、变更控制以及变更发布的问题。

  (2)软件配置管理的任务

  通常,软件配置管理的实施包括以下几个方面的任务: 制订软件配置管理计划;确定配置标识规则;实施变更控制;报告配置状态;进行配置审核;进行版本管理和发行管理。

  3.软件配置管理的意义

  (1)软件项目的特点

  ①软件产品是逻辑实体,是不可见的、抽象的智力产品。

  ②软件项目的规模日益庞大和复杂。

  ③参与项目的人员数量增加,人员间的沟通渠道数量也倍增。若团组中人员数为n,则人员间存在着n*(n-1)/2个需要互相沟通的渠道。

  ④软件产品易于被拷贝。

  ⑤软件时时处在演化和变更状态。这包括:技术的快速发展;业务环境的不断演变;不同用户的不同需求;软件需求在开发中的频繁变更;开发人员对阶段产品的灵活、易变更等。

  ⑥开发人员的离去对项目有较大的影响。

  (2)忽视软件配置管理可能导致的混乱现象

  举例如下:发给用户的软件产品的用户手册是老版本;某个软件已开发完成,可是安装后就是不工作;在北京能正常工作的软件,到上海就出问题;上个月已解决的缺陷,现在又出现;公司内部发现个别程序员将自己开发的产品拿出去自己出售;最新修改的源程序找不到;上个月用户让做某个变更,这个月又不要了……