软件工程犹如一座大迷宫,道路曲折,但是却隐藏有无数的珍宝。每个探险迷宫的人在找到捷径和珠宝后,都会有对于迷宫的独特感悟。为了更好的指引有心的探险人,编辑部将从迷宫各个不同的入口,请来那些已经发掘过迷宫的先行者们,和他们一道感悟这座迷宫。
如果您已经找到了迷宫的珠宝或者即将向迷宫探险,都可以和我们联系。
版本控制,是软件开发中一项必不可少的管理手段,也是软件配置管理(Software Configuration Management,SCM)的一个部分。而软件配置管理,在软件开发过程中占据着非常重要的地位,并且是CMM 2级的一个关键域。
2004年3月3日,本刊有机会请到了六位业内软件配置管理的专家,组织了一次专门的研讨会。通过讨论,我们也许可以为中国的软件配置管理作一个有益的点评。
迅速发展的软件配置管理
配置管理的概念源于美国空军,为了规范设备的设计与制造,美国空军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文档进行控制。对于一个逐渐成熟的开发团队而言,这样的传统方法已经完全不能适用。对于商业性的成熟配置管理工具,由于相对昂贵的价格,也没有采用。因此思维加速的办法是:自己进行开发,建立一个适用的管理系统。
配置管理的三大误区
国内软件公司实施配置管理,已经取得了很多进步,也提高了软件的质量。但是对于软件配置管理,有很多公司对它的理解比较模糊,或者在真正的配置管理实施过程中存在着误区。从专家们的讨论中,我们了解到国内的软件配置管理主要有三个方面的误区。
误区一:版本控制=软件配置管理
也许很多人不承认自己对于软件配置管理的理解局限在版本控制上,但在具体实施配置管理的过程中,就只见版本控制,而不见真正的配置管理。其实版本控制只是配置管理最基本的层次和功能。当然只有进行了版本控制,其他的功能才可能会逐渐提升。就是一个基本的版本控制,在部分软件公司中也并不是一个非常正规和完善的过程。
这种问题,归根到底在于软件公司对软件开发流程的管理在意识上不够重视。国内软件企业的开发管理不是很规范,即使在大的软件公司里面,项目组对于开发管理的关注也是有限的。另外一个原因是由于开发管理中资源的不足,比如:资金的缺乏(导致不能购买功能齐全、价格昂贵的商业产品)、人力资源(不能招聘专业的配置管理人员),因此不能在公司内部实施体系化的配置管理。
误区二:编码水平最差=配置管理员
配置管理人员是配置管理具体实施的人。可以说公司制定了配置管理的流程和规章只是配置管理实施的基础,而真正配置管理能否实施,能否有效,关键在于从事配置管理的人员。但国内的一个误区是:在选择配置管理人员的时候,是寻找开发团队中编码水平最差的人。比如张三写代码不行,测试也不行,那就只好去从事配置管理工作了。
谷炼对此深有体会。谷炼有在日本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过程具体实施好。
实施——从老板的角度思考
配置管理应该如何实施?软件配置管理活动是一项支持性、保障性的工作,它本身并不直接为企业产生直接赢利的工作成果,它每一项活动都需要消耗企业的资源,还需要购置配置管理工具,这些都会导致企业生产成本的增加。因此对一个软件公司来说,实施配置管理就需要从老板的角度进行思考。
什么是成功的配置管理
一个没有实施配置管理的软件项目,常常出现的问题有:版本混乱、文档不统一、工件遗缺等。这些问题归根到底是软件质量的问题。因此对于什么是成功的软件配置管理,一个最简单的方法是比较配置管理实施活动前后,软件产品的质量是不是得到了提高、开发团队是不是能够工作在一个有助于提高整体工作效率的配置管理平台上。
具体到配置管理中的每项活动,是否成功的标准是:这项活动是不是真正有助于我们实施配置管理的活动?它对于提高我们产品的质量有多大的帮助?能否帮助开发团队更高效地工作?
配置管理流程再造
软件配置管理的实施首先需要有一个规范的软件开发流程,因此对于一个软件公司而言,要实施配置管理,首先是需要对自身的软件开发流程进行再造。再造水平的好坏决定了配置管理是否仅仅是版本控制,是否能够有效的实施配置管理。流程不好,也许就仅仅到达版本控制的水平,不能达到变更控制、过程管理等“配置管理”的较高水平上。
选择合适的配置管理工具
有了配置管理流程,为了保证配置管理的效果、范围和质量,就需要应用配置管理工具。对于如何选择一个合适的配置管理工具,在这次的研讨会上也是我们讨论的热点。我们认为,公司在选择SCM工具的时候,可以遵循下面四个原则。
首先是工具的价格。一般国内中小型软件企业都没有足够的资金来实施一些商业工具。因此就只能退而求其次了,采用一些变通的方法来实施。比如:对于变更管理,采用签发变更单解决。有些公司采用一些简单的MIS来管理,数据保存到数据库,能够做到查询、保存等目的。
二是在功能上,满足需要就可以,太过复杂的产品使用也麻烦,对配置管理人员的要求也高,价格也昂贵。工具只要符合需要就行,不必追求功能齐全。
三是性能。由于配置管理的都是开发中最为重要的资源,一旦崩溃,损失就会很大。因此配置管理工具的运行需要非常稳定,不出故障,出了故障应该有补救措施。
四是实施的过程是否顺利,售后服务和技术支持是否完善。
正确实施配置管理工具
在实施配置管理工具的时候,工具必须和开发管理流程良好的结合起来,这样才能保证工具的正确实施。而这点也是目前软件公司在使用各种工具时一个最大的难点。
谷炼:一个规范的公司,实施软件配置管理的时候,只是将他书面的东西电子化就可以了。而一个不规范的公司,第一步就是先要对流程就行规划化,然后才是电子化的过程。
刘晓:工具和管理流程之间的关系是辨正的,其实我们更看重的是公司是否形成了一套有效的管理规范,是否有一个配置管理的流程和思想。工具只是起到一个辅助作用,当规范建立起来以后,采用工具就能够事半功倍。没有规范,使用什么工具都是没有用处的。厂商一般都是采用工具结合现有的咨询服务。就像:给你一支好笔,不一定写出好的字,如果你字写不好的话。但是如果你能够写一手好字,什么笔都没有关系。工具只是起到一个辅助的作用,关键是开发流程。作配置管理,厂商的作用主要是将企业的流程进行规划化,然后配置管理工具将开发过程进行质量的提升。最后能够为用户培养一些配置管理方面的专家,也才是最大的价值。同时当一个不规范的软件企业中采用配置管理工具的时候,一个强制性的工具是否可以有效的实施下去呢?这对于企业流程、企业的员工都是一个非常关键的考验。工具一般是强制性的,能否和软件公司员工的工作过程相符合,他对软件工程的了解能否满足这种需要呢?
谷炼:在实施配置管理工具时,有一个软件工程部署曲线,在工具实施后的一段时间内,软件开发的流程会有一个震动,质量会有大幅下滑,这个时期是非常关键并且重要的。
宋兴烈:我们就非常担心这一点,有些许震动不要紧,但是震动过程必须可控。
梁峰:一般在公司中实施配置管理工具时,可以采取先试点后推广的过程。先是一两个项目或者一两个开发模块,通过实施配置管理工具的过程,为公司规范配置过程,培养配置管理人才;然后再推广到整个公司的开发过程中。
配置管理的未来
软件危机一直都存在着,软件工程也一直都在不断发展。对于软件配置管理,未来究竟会如何发展呢?
刘晓:质量问题是软件开发的根本问题,不仅仅和配置管理有关,还和设计、测试、代码等有关。如果能够有一个协同开发平台,从需求,到代码、测试用例都有一个对应,这样的一个整体过程将会是发展的趋势。以前,很多工具之间都是零散的,之间难以进行系统的集成化。Hansky的做法是有一个协同的开发平台,将各个工具整合在一起,这是一个方向。
宋兴烈:我希望整个配置管理能够为软件开发全过程形成一个开发的知识库。从需求分析、讨论;任务的制定、分工;详细设计;软件测试;缺陷管理等等都有一个详细的管理过程。在配置管理中,如何做到将版本管理、测试、构建、发布等过程完整的结合在一起,做到自动化和程序化。同时我希望有这样一个协同平台,能够将所有的开发过程集合起来。
谷炼:质量关乎每个环节,一个环节的好坏并不能提高质量,各个分开的环节也难以保证质量。只有一个整体的过程才能提高质量。软件开发有一个IDE,对于软件开发过程的管理也应该有一个IDE,这应该是必然的趋势。Rational公司,已经有这样一个整体的解决方案。以后也会以一个单独的产品出现,包括需求、建模、自动化测试、配置管理等都整合在一起。
梁峰:在贝尔,配置管理和变更管理从来就是一个整体,没有严格的将它们区分,是一个整合的管理过程。
刘晓:配置管理的发展趋势是一个整合的过程。配置管理工具将会集成变更管理工具、需求管理工具、软件建模工具等,形成一个统一的IDE,在使用上也会越来越简单(主要体现在用户界面和功能上)。当软件公司在开发软件的时候,一个完整的软件开发生命流程管理工作将会在一个统一的软件平台上进行,这样将会带来软件开发管理水平的提高,最终能够提高软件的质量。
而上海的邓小年对于配置管理的发展,则有着自己的见解。
1、配置管理应该更自动化
变更管理应该支持从项目开始到维护整个生命周期不同的变更类型;代码的版本管理到发布应该一气呵成;版本的配置关系可以简单表现出来。这些方面虽然配置管理工具涉及到,但没有一个工具能够完全的自动化。很多时候,我们需要额外的工作来维护配置管理系统本身。可以说:项目总的复杂度不变,实施配置管理后,降低了软件开发的复杂度,却增加了管理的复杂度。因此配置管理的自动化非常重要。
2、配置管理应该基于流程
没有流程来执行配置管理是不切实际的,而现有的配置管理工具大多支持流程的管理,但是流程不一定适合于每个公司。如ClearCase的UCM流程,虽然很好,但是很难定制,我们只能让公司项目环境来适应这个工具,而不是让工具来适应现有的开发环境,这样的做法并不少最好的。配置管理工具不仅要支持流程,并且能够定制流程。
3、策略和标准化更加容易使用
实施配置管理的时候,需要定义许多的标准,比如版本名称规则、文档命名规则、什么时候check in、什么时候创建分支等。目前的一些配置工具,都没有提供这方面的专门定义,需要配置管理员另外写脚本或者程序来限制执行。这些地方都是需要改进的。
配置管理专家简介
刘晓 1995年在西北工业大学获工学硕士,后任职于Rational公司并参与Rational(中国)公司的组建。现就职于Hansky(中国)公司,任咨询与服务总监,全面负责国内客户的软件开发管理咨询、项目实施和维护工作。
谷炼 获得工学硕士后到日本,曾经在富士通株式会社担任项目经理,在Rational Japan担任资深技术顾问。2002年回国,在Rational中国担任资深技术顾问,现在Rational/IBM中国有限公司软件部担任资深信息工程师。
宋兴烈 1996至1999年,在西南石油学院任教。其间,参与主持了多个软件和科研项目。2000年开始,作为思维加速公司(www.justep.com)技术和产品的最高负责人,主持业务架构平台的产品整体设计和技术架构工作。
梁峰 2000年在北方交通大学获工学硕士学位,现供职于朗讯科技(中国)有限公司无线研发部,从事软件开发环境和软件配置管理相关工作。2002年创办软件配置管理专业站点SCMCHINA:www.scmchina.net。
耿延煜 在北京用友工程有限公司担任软件配置管理工程师,并参与公司级配置管理过程的制定与改进。
邓小年 在上海一家通信公司负责配置管理工作。在CM方面有三年的实际工作经验,熟悉CMM、RUP等现代软件工程领域知识,熟悉ClearCase、ClearQuest、CVS等工具。
配置管理之好书推荐
《软件配置管理策略与Rational ClearCase》:Brian A.White的软件配置管理的经典书籍,透彻的阐述了软件配置管理的思想。
《软件过程管理》:Watts S. Humphrey著,是能力成熟度模型(CMM)奠基之作,其中有两个章节讲配置管理。
《配置管理原理与实践》:Anne Mette Jonassen Hass著,清华大学出版社在2003年出版了该书的影印版和中文版。
《Software Configuration Management》,被誉为软件配置管理的圣经,作者是Wayne A. Babich,出版商:Addison-Wesley,出版日期:1986年。
配置管理之网络资源