软件工程如同一座大迷宫,道路曲折,但是却隐藏有无数的珍宝。每个探险迷宫的人在找到捷径和珠宝后,都会有对于迷宫的独特感悟。为了更好的指引有心的探险人,编辑部将从迷宫各个不同的入口,请来那些已经发掘过迷宫的先行者们,和他们一道感悟这座迷宫。假如您已经找到了迷宫的珠宝或者即将向迷宫探险,都可以和我们联系。
版本控制,是软件开发中一项必不可少的治理手段,也是软件配置治理(Software Configuration Management,SCM)的一个部分。而软件配置治理,在软件开发过程中占据着非常重要的地位,并且是CMM 2级的一个要害域。
迅速发展的软件配置治理
配置治理的概念源于美国空军,为了规范设备的设计与制造,美国空军1962年制定并发布了第一个配置治理的标准“AFSCM375-1,CM During the Development & Acquisition Phases”。
而软件配置治理概念的提出则在20世纪60年代末70年代初。当时加利福利亚大学圣巴巴拉分校的Leon Presser教授在承担美国海军的航空发动机研制合同期间,撰写了一篇名为“Change and Configuration Control”的论文,提出控制变更和配置的概念,这篇论文同时也是他在治理该项目(这个过程进行过近一千四百万次修改)的一个经验总结。
Leon Presser在1975年成立了一家名为SoftTool的公司,开发了配置治理工具:Change and Configuration Control(CCC),这是最早的配置治理工具之一。
随着软件工程的发展,软件配置治理越来越成熟,从最初的仅仅实现版本控制,发展到现在的提供工作空间治理、并行开发支持、过程治理、权限控制、变更治理等一系列全面的治理能力,已经形成了一个完整的理论体系。同时在软件配置治理的工具方面,也出现了大批的产品,如:最闻名的ClearCase;开源产品CVS;入门级工具Microsoft VSS;新秀Hansky Firefly。
在国外已经有30多年历史的软件配置治理,但在国内的发展却是在21世纪这几年的事。但是通过专家们的介绍,我们感受到,国内的软件配置治理已经取得了迅速发展,并得到了软件公司的普遍认可。
刘晓:1997年,开始在国内从事配置治理。那个时候假如和客户讲解配置治理,先要讲配置治理是干什么的,能对企业起到什么作用。到了2002年,就可以直接介绍软件配置治理的策略和使用。现在很多公司都能够自主的向工具厂商咨询,确实是已经意识到配置治理的重要性了。
思维加速是一家致力于业务架构平台研发的软件公司,有20多人的专业开发队伍。对于这样一种规模的软件公司,在国内应该是最为普遍的。也许它实施配置治理的过程就是国内企业实施配置治理的一个典范。让我们看看思维加速公司的总工宋兴烈是如何描述的。
宋兴烈:思维加速一直在从事较大规模的复杂软件开发,需要对代码、文档进行版本控制,早期采用了最简单的VSS(Visual Source Safe)进行版本控制。随着开发的深入,版本控制已经远远不能满足需要了,分支治理、权限治理的需求就出来了。但是VSS却不能满足这些要求,因此我们对VSS进行了二次开发。现在在VSS上能够基本实现分支治理、权限控制、版本发布构建治理了。但随着软件规模的增长,我们正预备用CVS等开源软件作为我们产品新版本的版本控制和治理工具。
这时,思维加速对于配置治理的理解上也有了一个较大的变化。配置治理已经不仅仅是对软件代码、文档的版本治理,而应该是需求变更、缺陷治理等的一个整合体。对于需求变更、缺陷治理,最简单的传统处理方式是采用文档记录的形式,比如用Word文档进行控制。对于一个逐渐成熟的开发团队而言,这样的传统方法已经完全不能适用。对于商业性的成熟配置治理工具,由于相对昂贵的价格,也没有采用。因此思维加速的办法是:自己进行开发,建立一个适用的治理系统。
配置治理的三大误区
国内软件公司实施配置治理,已经取得了很多进步,也提高了软件的质量。但是对于软件配置治理,有很多公司对它的理解比较模糊,或者在真正的配置治理实施过程中存在着误区。从专家们的讨论中,我们了解到国内的软渲霉芾碇饕腥龇矫娴奈笄?/P>
误区一:版本控制=软件配置治理
也许很多人不承认自己对于软件配置治理的理解局限在版本控制上,但在具体实施配置治理的过程中,就只见版本控制,而不见真正的配置治理。其实版本控制只是配置治理最基本的层次和功能。当然只有进行了版本控制,其他的功能才可能会逐渐提升。就是一个基本的版本控制,在部分软件公司中也并不是一个非常正规和完善的过程。
这种问题,归根到底在于软件公司对软件开发流程的治理在意识上不够重视。国内软件企业的开发治理不是很规范,即使在大的软件公司里面,项目组对于开发治理的关注也是有限的。另外一个原因是由于开发治理中资源的不足,比如:资金的缺乏(导致不能购买功能齐全、价格昂贵的商业产品)、人力资源(不能招聘专业的配置治理人员),因此不能在公司内部实施体系化的配置治理。
误区二:编码水平最差=配置治理员
配置治理人员是配置治理具体实施的人。可以说公司制定了配置治理的流程和规章只是配置治理实施的基础,而真正配置治理能否实施,能否有效,要害在于从事配置治理的人员。但国内的一个误区是:在选择配置治理人员的时候,是寻找开发团队中编码水平最差的人。比如张三写代码不行,测试也不行,那就只好去从事配置治理工作了。
谷炼对此深有体会。谷炼有在日本Rational和国内在配置治理领域工作的经历。相比国内低水平的配置治理人员,国外公司一般都由有丰富编程经验的人担任软件配置治理人员,有的时候配置治理部分的工作职责直接由开发经理担任。配置治理人员的级别也相当高,被认为是项目经理的左右手,拿的是双薪。
其实一个SCM人员的责任相当重大,一个团队所有的代码、文档都由其负责,国内似乎是处于一个相当尴尬的境地,认为一个什么都不懂的人担任,才能保证这些代码文档的安全。
当然国内也不泛重视配置治理的公司。据传说华为就非常重视软件配置治理,除了设置CTO、CEO,似乎还设置了一个CMO(Configuration Management Officer,或者叫配置经理)。
误区三:采用配置治理工具=有效的配置治理
配置治理工具在软件配置治理中起着不可替代的作用。没有工具的支持,实施一个完整合格的配置治理是不可想象的。也许正是因为工具的重要,造成了很多软件公司对于工具的迷信,以为只要部署了配置治理工具,尤其是一个专业的商业工具,就自以为建立了配置治理体系。
使用好的工具并不能代表就能实施好配置治理。因为工具就是工具,工具不能代替治理。否则为什么总是说配置“治理”而不单单说配置“工具”呢?一个成功的配置治理工具实施,需要两个方面的条件:一是规范的软件开发流程;二是合格的配置治理参与人员,这里的配置治理参与人员包括了配置治理员、开发人员、项目经理等。
对此,邓小年认为:“无论怎么样,没有流程和规范地使用工具,那么再强的工具也没有灵魂。比如简单的一个check in操作,不同的人用起来可不一样。有人修改后,进行build,然后check in;有人修改后,进行build,并简单的测试再check in,也有人修改后马上check in,……可看出不同的人使用工具的同一操作有不同的后果。”
人——为何如此重要?
配置治理员在配置治理中是一个比较奇妙的角色,对于一个实施了配置治理、建立了配置治理工作平台的团队来说,他是非常重要的,整个开发团队的工作成果都在他的掌管之下。假如他治理和维护的配置治理系统出现了问题,轻则影响团队其他成员的工作效率,重则可能出现丢失工作成果、发布错误版本等严重的后果。
配置治理员应该做什么
一般而言,配置治理人员在软件公司中应该具有下面的几项主要职责:
1、 提交配置治理计划;
2、 软件配置治理工具的日常治理与维护,各配置项的治理与维护;
3、 执行版本控制和变更控制方案;
4、 完成配置审计并提交报告;
5、 对开发人员进行相关的配置治理培训;
6、 识别软件开发过程中存在的问题并拟出解决方案。
你是合格的配置治理员吗
一个高水平的配置治理人员,对开发团队在整体上有非常重要的作用。假如在一个企业中实施了配置治理工具如ClearCase,但没有专业的配置治理人员治理,就像一个拖拉机安装了一个奔驰的马达,还是跑不快。早期在国内企业中,找一个合适的配置治理人员很困难,最后由系统治理人员来担任。并且使用不同的配置治理工具,对配置治理人员的要求就不一样,如VSS对配置治理人员的技术水平要求就较低。
按照配置治理的职责要求,一个合格的配置治理人员需要具备哪些素质呢?
1、职业道德是第一位的,这是由于配置治理人员负责治理软件公司最为重要的资产。
2、软件配置治理的专业知识,最好要精通一种配置治理工具,没有工具是不可能实施软件配置治理的,否则那只能是效率极其低下的纸上谈兵。
3、项目治理的知识,对于软件开发流程非常熟悉。一般而言,最好要经历几个软件项目的开发治理过程,或者担任过项目经理,对软件开发的全过程有比较清楚的了解;有软件开发经验可以增强说服力,降低实施的难度,并且能够切身以开发人员的身份去体会配置治理,才能改进配置治理过程。
4、有一定的大局观,有一定的IT背景知识,对系统(操作系统、网络、数据库等方面)比较熟悉。
除了个人素质上的要求,在性格上也有一些共性的东西。
1、沟通技巧:在部署和实施配置治理的时候,肯定会碰到一些抵触,对于程序员而言,使用配置治理之前,没有什么约束,但是在实施后,会有一些约束,认为这并不是自己的工作。假如在使用中出现了问题,就需要配置治理人员进行沟通,并且能够解决问题。
2、稳重、细心、有耐心。配置治理工作需要和开发人员、测试人员、项目经理打交道,但是他们对于遵循配置治理流程和工具不会非常的热心,因此需要配置治理人员能够稳重、有耐心。
3、能够吵架。有的时候,假如沟通不行,就需要采取强迫的手段来保证具体配置工作的要求得到执行。记得在网上见到这样的一句话:搞配置治理原来很好玩,就是要——凶~!
配置治理员的困惑
用友软件工程公司的耿延煜现在担任一个项目的配置治理员,她对于软件配置治理人员的看法更有代表性。在用友软件工程公司,采取的是一个项目设置一个配置治理人员,主要工作是项目产品的版本治理,并配合项目经理对项目中的文档、代码进行检查。但是这个配置治理人员并不是专职的,在承担配置治理职责之外,还会承担一些项目的开发、测试工作。作为一个兼职的SCM人员,耿延煜认为,有两个问题需要注重:
一是如何在工作任务紧张的时候保证配置治理工作?
作为一个配置治理人员,并不是仅仅从事配置治理工作,很多时候,会接受项目经理指派的开发工作,这个时候如何处理配置治理工作和开发工作的权重就非常重要,尤其是在一个项目处于紧要关头的时候,开发进度紧,很多公司就忽视了配置治理,但是往往这个时候,配置治理才是最为重要的,并且这个时候出了问题,对于项目的影响会更大。因此在很多情况下,必须付出时间从事配置治理工作,如加班。出现了问题,配置治理人员必须立即进行修复。
二是定位模糊。很多SCM人员对自己的定位都比较模糊,没有将自身置于一个项目治理者的角色。感觉自己只是项目组的一个无关紧要的角色。国内软件开发中,向来就重开发人员,轻视测试人员,配置治理人员就更得不到重视了。然而,配置人员应该是一个项目经理的Backup,应该向项目经理发展。
配置治理员的最佳实践
对于配置治理人员的部门设置,邓小年认为,一般国内大中型软件公司在配置治理部门可以设置如下的三个职位:
1、配置治理经理:负责公司全面的配置治理方面的工作;
2、创建发布工程师:主要负责创建和发布,部署产品;
3、工具治理工程师:主要负责开发、维护配置治理工具,对工具的使用进行培训。
考虑到我国的现实情况,在一个软件公司中的每个项目专门设置一个SCM人员还不现实。
从上面可以看出,配置治理员的最佳实践和推广方式可以采用是“兼职+专职”的形式来进行。具体而言,可以这样安排:
1、软件公司在公司级必须有一个整体的配置治理解决方案和策略,对于各个具体开发的项目也有一个适合项目需要的配置治理策略。
2、公司级的SCM策略上,设置专职的配置治理人员,一般由水平较高的人员担任,符合上面提到的配置治理员的素质要求。
3、项目级的SCM策略上,设置兼职的配置治理人员,一般可以由开发人员或者质量人员来兼任。
4、专职SCM人员和兼职SCM人员之间的沟通协调。并且对于SCM工具,如ClearCase,一般在前期部署的时候,任务比较紧张,在实施以后,操作就比较简单,只需要一个兼职人员就可以了。通过专职SCM人员和兼职SCM人员之间不断地反复沟通,才能将一个SCM过程具体实施好。