我们进一步从软件工程的角度来考虑这个问题,对于任何一个软件企业来说,开发出满足用户需求的、高质量的软件产品是其追求的目标,而实现这一目标的关键是建立起一个稳定、可控、可重用的软件流程。软件企业要想永葆竞争优势就必须不断地改进它的软件开发流程,而要进行软件开发流程改进就需要有明确的、量化的对现状的分析和对未来的预期,这些数据来源于对软件过程的度量,而进行度量的前提和基础就是软件配置管理。所以,软件配置管理工作是以整个软件流程的改进为目标,是为软件项目管理和软件工程的其他领域打好基础,以便于稳步推进整个软件企业的能力成熟度。
软件配置管理对于软件开发管理是如此重要,它的主要思想和具体内容在于版本控制。版本控制是软件配置管理的核心思想之一,是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变化的管理。通俗一点说,这就如我们写文章要脱稿好几次,而版本控制就是要将每一次文章的改动都记录下来,我们可以在事后随时恢复到其中的任何一次改动前的状态。版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地记录下来。每一次文件的改变,文件的版本号都将增加,比如:1.1.2,1.1.3,1.2.1。除了记录版本变更外,版本控制的另一个重要功能是并行开发。软件开发往往是多人协同作战,版本控制可以有效地解决版本的同步以及不同开发者之间的开发通讯问题,提高协同开发的效率。并行开发中最常见的不同版本软件的Bug修正问题,就可以通过版本控制中分支与合并的方法有效地解决。比如,软件已经发布了1.0版本,开发小组在为该软件添加新的功能,正在进行2.0版本的开发。而此时,如果Release 1.0中发现了Bug必须修正,我们就必须从Release 1.0中建立bugfix分支,进行必要的修正后,发布修正版Release 1.1,而这个版本的发布与2.0版本的开发没有直接关系。当2.0版本测试结束后,要与1.0版本中bugfix分支合并,从而发布2.0的版本。在这个并行开发过程中,创建分支和分支的合并起了非常重要的作用。
许多人将软件的版本控制和软件配置管理等同起来,这是非常错误的观念。版本控制虽然在软件配置管理中占据非常重要的地位,但这并不是它的全部,对开发者工作空间的管理、编译管理等都是软件配置管理不可分割、不可或缺的部分。而且,简单地使用版本控制,并不能解决开发管理中的深层问题。
软件配置管理给开发者带来的好处是显而易见的,但对于项目管理者来说,他所关心的角度与开发者是不一样的,他更关注项目的进展情况,这不是简单的版本控制能够解决的。项目管理者从管理者的角度去运用软件配置管理中的各种记录数据,将有巨大的收获。
从这些记录数据中,我们可以了解到谁在什么时候改了些什么、为什么改;我们可以了解到开发项目进展得如何、完成了多少工作量;我们可以了解到开发工程师的资源是否充分使用、工作是否平衡等。这些统计分析就是CMM2中对软件配置管理的明确要求:软件配置管理(SCM)提供软件产品的状态统计,统计包括寻找软件开发的瓶颈和解决办法,并据此衡量软件产品的成熟度。SCM的度量准则是:平均严重程度,严重程度级的分布,平均关闭时间,严重程度的图示,各配置项或子系统的图示等。如果我们真正做好软件配置管理,取得CMM2认证将是一个简单而轻松的过程。
做好软件配置管理还会给项目经理带来许多方便,有利于对整个开发团队进行管理,但管理的效果还要取决于整个开发团队成员的配合程度。所以在深入软件配置管理过程中,又提出了过程驱动的概念,这是一个更加抽象的管理思想,它更加强调管理,对整个业务流程进行预定义,将变更流程化,从而可以自动处理业务。
软件本身是思维逻辑和数据的固化,而思维逻辑和数据是无形的,软件配置管理就是对这些无形的思维逻辑和数据进行变更记录,使之可以度量、统计分析和管理。
只有做好了软件配置管理,我们才能避免在软件开发中使项目管理、风险管理、质量管理、过程管理成为空中楼阁,我们才能脚踏实地走向软件开发规范化管理的高峰。