1. 软件配置和配置管理
计算机配置是说明计算机组成的一种专门术语。这种“组成”由用户的需求决定。通常,计算机系统由CPU、存储器、输入/输出设备、传输设备等组成;其中就存储器而言,除内存外,外存又分软盘、硬盘、光盘等,它们又有容量和速度之别。现在,可以将计算机配置定义为是用户根据不同用途,选择不同功能-性能的设备和部件组成的最优计算机系统的一种构建方案。推广到系统,则系统配置就是根据用户需求优选各种设备,组成最佳系统的一种建构方案(或者是按最佳性能价格比,组成系统的各种设备的一种优化组合)。
同样,软件配置也是说明软件组成的一种术语。与计算机配置中选择的部件都是现成的产品不同的是组成软件的部件通常都是要开发的。软件配置( software configuration)是指开发过程中,构成软件产品的各种 文档、程序及其数据的优化组合。该组合中的每一个元素称为配置中的一 个配置项(configuration item)。也可以把软件配置项定义是软件中可以独立进行开发的一个实体,该实体包括:程序、数据及其相应的文档和说明。
配置管理要对软件生存期内各阶段的文档、实体和最终产品的演化和变更进行管理;同时要解决变更的标识、控制和发布等问题。目的是使对设计变更的管理制度化,从而提高开发效率、减少错误,保证产品的质量。
软件配置管理主要任务有以下几方面的内容:
1.确定软件配置项;
2.定义配置项和版本的标识规则;
3.制定控制变更的权限和实施步骤;
4.记录、追踪配置项的变更状态;
5.验证配置项的正确和完整性;
6.进行版本管理和发行管理。
2. 配置管理源头:设计变更
软件设计不可能一步到位,变更是不可避免的;特别是用户需求多变 (如:组织体制、业务流程的变化)必然会引起设计的变更。如何记录这些变更,需要做二件事。一是要标识这些设计文件(即:根据文件名,确定一个唯一的标识符);二是要动态地记录这些变更文件(即:用版本的方法记录这些变更).
3. 软件配置标识规则
软件配置标识就是对每个软件配置项的标识。对一个软件项目而言,它的配置项有以下内容:需求分析文档、概要设计文档、详细设计文档、软件实体、测试文档、客户文档等。当然,这些软件实体及其相应的文档都可以按其功能进行逐级细化,被分解为:分系统、子系统和功能模块。功能分解后能单独实现的这些软件和文档都是软件配置项,都应该加以标识。与系统的逐级细化相似,软件配置项的标识也可以按层次进行,现以3层为例,叙述如下:〈第一层标识〉〈第二层标识〉〈第三层标识〉;如果第二层标识是本配置项标识的话,那么第一层标识就称为前缀(即:前一层的标识),第三层标识称为后缀(即:后一层的标识)依次类推。这样标识规则的好处是可以看出配置项的前后关系,比较直观又便于理解。有关配置项标识的实例后面还会给出。
4 版本管理
标识一个配置项变更(如:设计修改)的最好方法就是版本。版本不仅记录了配置项的当前状态,为后续开发提供依据;而且还可以根据版本追溯以前的状态。
版本标识规则 :
<配置标识>V<主版本号>·<版本号>·<次版本号>
主版本号、版本号和次版本号都可以由 1至2位的整数组成。通常,<次版本号>可省,因为二个层次的版本号就足以表示一个配置项的变化了;对于大型软件项目,其版本标识可以扩大到三层或更多的层次。
当配置项出现大的变化时(如:因需求变化,导致《功能规格书》需要增加新功能时)主版本号升级(如:从 1.**升级为2.**);当配置项出现小的变化(如:局部的完善和修改等,一般在阶段结束时,经过评审确认后)主版本号不动,次版本号升级 (如:从**.0升级为**.1)。
版本管理是指对软件生存期内各种软件实体、文档等的修改和变化的管理。它的主要的功能就是记录和追踪文件的变更,如:记录文件更改的内容、时间和更改 -审批人员等。此外,版本管理的另一个功能是并行开发,它能有效地解决版本的同步以及不同开发者之间的沟通问题,从而减少错误、保证质量、提高了效率。
根据经验,在软件开发过程中,经常需要保存多个版本。因为有时可能会发生这样的情况,即:在修改一个软件后,却发现是改错了,需要恢复到修改前的一个老版本。如果不保留多个版本,没有版本管理,会给工作带来很大的麻烦,也会浪费很多时间。
对于大型软件公司,为顺利解决用户在使用某个版本时发现的问题,须要借助版本管理工具的支持,否则要解决这类问题是很国难的。因为不是旧版软件找不到,就是原开发人员已离开了公司。但是,如果按版本管理要求,将文件的不同版本形成一条链,并将它们存储起来。那么就能解决前面提到的找不到旧版软件的问提。
5. 基本概念
在配置管理中有几个常用的基本概念是需要弄清楚它们之间的联系和区别的。这些概念是配置项、里程碑、基线、受控库、基线库、产品库等。
· 软件配置项是软件生存期内,能相对独立开发的一个程序实体或文档。
· 里程碑即通常所说的软件开发过程中的“阶段”,如果说它们之间有 区别的话,那么“阶段”强调的是过程,而“里程碑”则强调过程的终点和终点的标识。这些阶段可以是需求分析阶段、概要设计阶段、详细设计阶段等等。
· 基线 是软件开发过程中最重要的里程碑,不过基线更强调的是一个开发阶段到达里程碑时的结果及其内容,如:功能基线是 经过评审和批准的需求规格说明书;产品基线是经集成和确认测试后,经正式审批可交付客户的软件产品的全部配置项(包括:软件实体和所有的文档)。
正如清华大学郑仁杰教授所说: 在一个开发阶段结束后,要对相应的配 置项进行基线化并形成各类基线。基线就是一个配置项(或一组配置项)在其生命期的不同阶段完成时,通过评审而进入受控状态的一组文档和程序实体,这个过程被称为 “基线化”。每个基线都是其下一步开发的基点和参考 点;它们都将接受配置管理的严格控制。因此,基线必须通过评审过程建立;基线存在于基线库中,接受更高权限的控制;基线是进一步开发和修改的基准和出发点。
· 受控库 是软件开发过程中,其修改权限受到控制的文档库和程序库,其中基线库和产品库,特别是产品库的修改权限将受到严格的控制,即使是授权修改的人,在修改前还必须得到批准。
· 基线库 是受控库中一些特别重要的库,如:需求(基线)库和产品(基线)库。
· 产品库 是存放软件最终产品(即:产品基线)的库,基于它的重要性,对它的修改将受到特别的控制。 产品基线是最初批准的产品配置标识。