笔者在ISO9001认证和SW-CMM评估的实践过程中发现,软件配置管理在项目管理中的作用十分关键。
软件配置管理是项目运作的一个支撑平台,简单示意如下图所示。它将项目所有成员(包括公司中对项目负责的高层经理)的工作协同起来,实现高效的团队沟通,使工作成果及时共享。当然,这种支撑是贯穿项目的整个生命周期的。
一般来讲,软件配置管理人员应该完成以下几个主要任务:
任务一配置标识
要配置标识,首先必须明确项目生命周期内所要产生的工作产品,然后确定工作产品的名称和标识规则。总体原则是,保证配置管理工具检索便利,让项目组成员容易记住标识规则,同时要确保组织一级的标识规则的一致性。
任务二版本管理
版本管理一般是使用工具来完成的,如Rational ClearCase、Merant PVCS Version Manager、Microsoft Visual SourceSafe等。使用这些工具时,容易被忽视的一点是制定所使用工具的版本规则。如果直接采用工具的内部版本号,会给产品发布带来一些困难。通常采用“X.Y.Z”方式进行版本标识,明确X、Y和Z各位数字递增的规则,然后结合工具标签(Label)功能,便可实现高效的版本管理。
任务三变更管理
变更管理是项目管理的一个重点和难点,涉及的范围很广。实施高效的变更管理至少应该包括两个部分:“定义合理的变更管理流程”、“采用自动化工具作为支持”。在具体的实践中,应该对变更进行分类和分层,建立起处理不同变更的“变更控制委员会”(CCB),既保证项目组成员有一定的自主权,又不会耽误高层经理对关键问题的把握。
任务四配置审核
配置审核包括两方面的内容:“配置管理活动审核”、“基线审核”。“配置管理活动审核”用于确保项目组成员的所有配置管理活动,遵循已批准的软件配置管理方针和规程,如检入(Check in)/检出(Check Out)的频度、工作产品成熟度提升原则等。实施“基线审核”,要保证基线化软件工作产品的完整性和一致性,并且满足其功能要求。基线的完整性可从以下几个方面考虑:基线库是否包括所有计划纳入的配置项?基线库中配置项自身的内容是否完整?(如,文档中所提到的参考或引用是否存在?)此外,对于代码,要根据代码清单检查是否所有源文件都已存在于基线库。同时,还要编译所有的源文件,检查是否可产生最终产品。一致性主要考察需求与设计以及设计与代码的一致关系,尤其在有变更发生时,要检查所有受影响的部分是否都做了相应的变更。审核发现的不符合项要进行记录,并跟踪直到解决。
在实际操作过程中,一般认为审核是一种事后活动,很容易被忽视。但是“事后”也是有相对性的,在项目初期审核发现的问题,对项目后期工作总是有指导和参考价值的。为了提高审核的效果,应该充分准备好检查单,如表1所示。
支撑平台示意图
任务五报告配置状态
报告配置状态的目的,是向项目所有成员提供基线内容和状态、基线变更信息(如表2所示),这也是实现资源共享的前提。此外,在项目生命周期中进行对配置项的变更数据统计分析,有利于评估项目风险,有效控制项目的执行。在变更请求被批准、基线版本发生变化及项目组提出任何需要时,可以采用Email等方式进行报告。
任务六发布管理
实施了规范的配置管理,发布就显得很从容了。但是必须要注意的是:发布的产品应该是从软件基线库中提取出来的;在软件发布给最终用户之前,要准备发布记录,为软件产品分配发布版本号,同时要对它进行发布评审并确认其得到批准。一般来说,高层经理、项目经理、软件质量保证人员和测试组都应该参加发布评审。
在项目启动的初期,将这些活动和策略有机组织起来,便形成一个配置管理计划。然后建立配置管理环境(比如安装版本管理和变更管理工具、建立用户和权限分配等),并根据项目组成员的具体情况,实施必要的有效培训(确保项目组成员真正清楚配置管理方针和规程,并熟练使用配置管理的相关工具)。最后,执行计划——等待精彩体验吧。
检查项 | yes | no | na | 说明 |
是否及时提升工作产品? | | | | |
是否执行配置库定期备份? | | | | |
是否定期执行配置管理系统病毒检查? | | | | |
是否评估配置管理系统满足实际需要? | | | | |
上次审核中发现的问题是否已全部解决? | | | | |
…… | | | | |
基线审核
配置项名称 | 标识 | 版本 | 一致性 | 完整性 | 说明 |
需求规格说明书 | companyname-prj-doc-srs | 1.0.0 | yes | yes | …… |
| | | | | |
| | | | | |
审核跟踪
问题id | 问题概要描述 | 状态 | 责任人 | 说明 |
| | | | |
| | | | |
| | | | |
表2 配置状态报告基线状态
配置项名称 | 配置项标识 | 状态 | 文件名 | 版本号 | 存放位置 |
| | | | | |
| | | | | |
变更请求一览表
变更请求id | 变更请求主题 | 状态 | 提交者 | 当前责任人 |
| | | | |
| | | | |