Edith's profile♀小婷子的亭子间♀PhotosBlogListsMore Tools Help

Blog


    August 02

    持续集成

    持续集成

    作者:Martin Fowler
    --------------------------------------------------------------------------------
    Martin Fowler & Matthew Foemmel著 透明 译
    英文原文版权由Martin Fowler拥有 
    Original text is copyrighted by Martin Fowler
    原文链接:
    http://martinfowler.com/articles/continuousIntegration.html 
    Martin Fowler
    Chief Scientist, ThoughtWorks 
        译者语:2002年1月23日,我们很荣幸的在UMLCHINA组织的网上交流中聆听了Martin Fowler先生的教诲。在 交流中,Martin Fowler向所有中国软件开发者推荐了这篇文章:Continuous Integration(《持续集成》)。
    初读之下,我便感觉到了它的分量,AgileChina的林星也称赞:“其中的思想非常的好,大师就是大师。”然 后,用了一周的时间,我终于把这篇文章翻译出来,以飨读者。 
        由于这是Fowler先生送给全体中国软件开发者的礼物,所以我绝对不敢独占。任何人都可以在任何地方随意 转载本文,但是在转载时请保持本文完整性——包括标题、版权声明、原文链接、译者语……总之,请不要在转 载的时候做任何改动或增删。另外,如果能在转载的时候顺手给我一个mail,我会更加高兴。 
        下面,请开始欣赏这篇精彩的文章。 
      
        在任何软件开发过程中都有一个重要的部分:得到可靠的软件创建(build)版本。尽管知道创建的重要 性,但是我们仍然会经常因为创建失败而惊讶不已。在这篇文章里,我们将讨论Matt(Matthew Foemmel)在 ThoughtWorks的一个重要项目中实施的过程,这个过程在我们的公司里日益受到重视。它强调完全自动化的、可 重复的创建过程,其中包括每天运行多次的自动化测试。它让开发者可以每天进行系统集成,从而减少了集成中 的问题。 
      ThoughtWorks公司已经开放了CruiseControl软件的源代码,这是一个自动化持续集成的工具。此外,我们还 提供CruiseControl、Ant和持续集成方面的顾问服务。如果需要更多的信息,请与Josh Mackenzie
    jmackenz@ThoughtWorks.com)联系。 
    本文有以下主要内容:
    持续集成的优点 
    集成越频繁,效果越好 
    一次成功的创建是什么样的? 
    单一代码源 
    自动化创建脚本 
    自测试的代码 
    主创建 
    代码归还 
    总结 
        在软件开发的领域里有各种各样的“最佳实践”,它们经常被人们谈起,但是似乎很少有真正得到实现的。 这些实践最基本、最有价值的就是:都有一个完全自动化的创建、测试过程,让开发团队可以每天多次创建他们 的软件。“日创建”也是人们经常讨论的一个观点,McConnell在他的《快速软件开发》中将日创建作为一个最 佳实践来推荐,同时日创建也是微软很出名的一项开发方法。但是,我们更支持XP社群的观点:日创建只是最低 要求。一个完全自动化的过程让你可以每天完成多次创建,这是可以做到的,也是完全值得的。 
        在这里,我们使用了“持续集成(Continuous Integration)”这个术语,这个术语来自于XP(极限编程) 的一个实践。但是我们认为:这个实践早就存在,并且很多并没有考虑XP的人也在使用着它。只不过我们一直用 XP作为软件开发过程的标准,XP也对我们的术语和实践产生了深远的影响。尽管如此,你还是可以只使用持续集 成,而不必使用XP的任何其他部分——实际上,我们认为:对于任何切实可行的软件开发活动,持续集成都是很 基本的组成部分。 
        实现自动化日创建需要做以下几部分的工作: 
    将所有的源代码保存在单一的地点,让所有人都能从这里获取最新的源代码(以及以前的版本)。 使创建过程完全自动化,让任何人都可以只输入一条命令就完成系统的创建。  使测试完全自动化,让任何人都可以只输入一条命令就运行一套完整的系统测试。  确保所有人都可以得到最新、最好的可执行文件。 
        所有这些都必须得到制度的保证。我们发现,向一个项目中引入这些制度需要耗费相当大的精力。但是,我 们也发现,一旦制度建立起来,保持它的正常运转就不需要花多少力气了。 
    持续集成的优点 
        描述持续集成最大的难点在于:它从根本上改变了整个开发模式。如果没有在持续集成的实践环境中工作过,你很难理解它的开发模式。实际上,在单独工作的时候,绝大多数人都能感觉到这种气氛——因为他们只需 要与自己的系统相集成。对于许多人来说,“团队开发”这个词总让他们想起软件工程领域中的一些难题。持续 集成减少了这些难题的数量,代之以一定的制度。 
        持续集成最基本的优点就是:它完全避免了开发者们的“除虫会议”——以前开发者们经常需要开这样的 会,因为某个人在工作的时候踩进了别人的领域、影响了别人的代码,而被影响的人还不知道发生了什么,于是 bug就出现了。这种bug是最难查的,因为问题不是出在某一个人的领域里,而是出在两个人的交流上面。随着时 间的推移,问题会逐渐恶化。通常,在集成阶段出现的bug早在几周甚至几个月之前就已经存在了。结果,开发 者需要在集成阶段耗费大量的时间和精力来寻找这些bug的根源。 
        如果使用持续集成,这样的bug绝大多数都可以在引入的同一天就被发现。而且,由于一天之中发生变动的 部分并不多,所以可以很快找到出错的位置。如果找不到bug究竟在哪里,你也可以不把这些讨厌的代码集成到 产品中去。所以,即使在最坏的情况下,你也只是不添加引起bug的特性而已。(当然,可能你对新特性的要求 胜过了对bug的憎恨,不过至少你可以多一种选择。) 
        到现在为止,持续集成还不能保证你抓到所有集成时出现的bug。持续集成的排错能力取决于测试技术,众 所周知,测试无法证明已经找到了所有的错误。关键是在于:持续集成可以及时抓到足够多的bug,这就已经值 回它的开销了。 
        所以,持续集成可以减少集成阶段“捉虫”消耗的时间,从而最终提高生产力。尽管现在还不知道是否有人 对这种方法进行过科学研究,但是作为一种实践性的方法,很明显它是相当有效的。持续集成可以大幅减少耗费 在“集成地狱”中的时间,实际上,它可以把地狱变成小菜一碟。 
    集成越频繁,效果越好 
        持续集成有一个与直觉相悖的基本要点:经常性的集成比很少集成要好。对于持续集成的实践者来说,这是 很自然的;但是对于从未实践过持续集成的人来说,这是与直观印象相矛盾的。 
        如果你的集成不是经常进行的(少于每天一次),那么集成就是一件痛苦的事情,会耗费你大量的时间与精 力。我们经常听见有人说:“在一个大型的项目中,不能应用日创建”,实际上这是一种十分愚蠢的观点。 
        不过,还是有很多项目实践着持续集成。在一个五十人的团队、二十万行代码的项目中,我们每天要集成二 十多次。微软在上千万行代码的项目中仍然坚持日创建。 
        持续集成之所以可行,原因在于集成的工作量是与两次集成间隔时间的平方成正比的。尽管我们还没有具体 的衡量数据,但是可以大概估计出来:每周集成一次所需的工作量绝对不是每天集成的5倍,而是大约25倍。所 以,如果集成让你感到痛苦,也许就说明你应该更频繁地进行集成。如果方法正确,更频繁的集成应该能减少你的痛苦,让你节约大量时间。 
        持续集成的关键是自动化。绝大多数的集成都可以而且应该自动完成。读取源代码、编译、连接、测试,这 些都可以自动完成。最后,你应该得到一条简单的信息,告诉你这次创建是否成功:“yes”或“no”。 如果成 功,本次集成到此为止;如果失败,你应该可以很简单地撤消最后一次的修改,回到前一次成功的创建。在整个
    创建过程中,完全不需要你动脑子。 
        如果有了这样一套自动化过程,你随便想多频繁进行创建都可以。唯一的局限性就是创建过程本身也会消耗 一定的时间。(译注:不过与捉虫所需的时间比起来,这点时间是微不足道的。) 
    一次成功的创建是什么样的? 
        有一件重要的事需要确定:怎样的创建才算是成功的?看上去很简单,但是如此简单的事情有时却会变得一 团糟,这是值得注意的。有一次,Martin Fowler去检查一个项目。他问这个项目是否执行日创建,得到了肯定 的回答。幸亏Ron Jeffries也在场,他又提了一个问题:“你们如何处理创建错误?”回答是:“我们给相关的 人发一个e-mail。”实际上,这个项目已经好几个月没有得到成功的创建了。这不是日创建,这只是日创建的尝 试。 
        对于下列“成功创建”的标准,我们还是相当自信的: 
    所有最新的源代码都被配置管理系统验证合格 
    所有文件都通过重新编译 
    得到的目标文件(在我们这里就是Java的class文件)都通过连接,得到可执行文件 
    系统开始运行,针对系统的测试套件(在我们这里大概有150个测试类)开始运行 
    如果所有的步骤都没有错误、没有人为干涉,所有的测试也都通过了,我们就得到了一个成功的创建 
        绝大多数人都认为“编译+连接=创建”。至少我们认为:创建还应该包括启动应用程序、针对应用程序运行 简单测试(McConnell称之为“冒烟测试”:打开开关让软件运行,看它是否会“冒烟”)。
    运行更详尽的测试 集可以大大提高持续集成的价值,所以我们会首选更详尽的测试。 
    单一代码源 
        为了实现每日集成,任何开发者都需要能够很容易地获取全部最新的源代码。以前,如果要做一次集成,我 们就必须跑遍整个开发中心,询问每一个程序员有没有新的代码,然后把这些新代码拷贝过来,再找到合适的插 入位置……没有什么比这更糟糕的了。 
        办法很简单。任何人都应该可以带一台干净的机器过来,连上局域网,然后用一条命令就得到所有的源文 件,马上开始系统的创建。 
        最简单的解决方案就是:用一套配置管理(源代码控制)系统作为所有代码的来源。配置管理系统通常都设 计有网络功能,并且带有让开发者轻松获取源代码的工具。而且,它们还提供版本管理工具,这样你可以很轻松 地找到文件以前的版本。成本就更不成问题了,CVS就是一套出色的开放源代码的配置管理工具。 
        所有的源文件都应该保存在配置管理系统中。我说的这个“所有”常常比人们想到的还要多,它还包括创建 脚本、属性文件、数据库调度DLL、安装脚本、以及在一台干净的机器上开始创建所需的其他一切东西。经常都 能看到这样的情况:代码得到了控制,但是其他一些重要的文件却找不到了。 
        尽量确保所有的东西都保存在配置管理系统的同一棵代码源树中。有时候为了得到不同的组件,人们会使用 配置管理系统中不同的项目。这带来的麻烦就是:人们不得不记住哪个组件的哪个版本使用了其他组件的哪些版 本。在某些情况下,你必须将代码源分开,但是这种情况出现的几率比你想象的要小得多。你可以在从一棵代码 源树创建多个组件,上面那些问题可以通过创建脚本来解决,而不必改变存储结构。 
    自动化创建脚本 
        如果你编写的是一个小程序,只有十几个文件,那么应用程序的创建可能只是一行命令的事:javac  *.java。更大的项目就需要更多的创建工作:你可能把文件放在许多目录里面,需要确保得到的目标代码都在适 当的位置;除了编译,可能还有连接的步骤;你可能还从别的文件中生成了代码,在编译之前需要先生成;测试 也需要自动运行。 
        大规模的创建经常会耗费一些时间,如果只做了一点小小的改动,当然你不会希望重新做所有这些步骤。所 以好的创建工具会自动分析需要改变的部分,常见的方法就是检查源文件和目标文件的修改日期,只有当源文件 的修改日期迟于目标文件时,才会重新编译。于是,文件之间的依赖就需要一点技巧了:如果一个目标文件发生
    了变化,那么只有那些依赖它的目标文件才会重新编译。编译器可能会处理这类事情,也可能不会。 
        取决于自己的需要,你可以选择不同的创建类型:你创建的系统可以有测试代码,也可以没有,甚至还可以 选择不同的测试集;一些组件可以单独创建。创建脚本应该让你可以根据不同的情况选择不同的创建目标。 
        你输入一行简单的命令之后,帮你挑起这副重担常常是脚本。你使用的可能是shell脚本,也可能是更复杂 的脚本语言(例如Perl或Python)。但是很快你就会发现一个专门设计的创建环境是很有用的,例如Unix下的make工具。 
        在我们的Java开发中,我们很快就发现需要一个更复杂的解决方案。Matt用了相当多的时间开发了一个用于 企业级Java开发的创建工具,叫做Jinx。但是,最近我们已经转而使用开放源代码的创建工具Ant (http://jakarta.apache.org/ant/index.html)。Ant的设计与Jinx非常相似,也支持Java文件编译和Jar封 装。同时,编写Ant的扩展也很容易,这让我们可以在创建过程中完成更多的任务。 
        许多人都使用IDE,绝大多数的IDE中都包含了创建管理的功能。但是,这些文件都依赖于特定的IDE,而且 经常比较脆弱,而且还需要在IDE中才能工作。IDE的用户可以建立自己的项目文件,并且在自己的单独开发中使 用它们。但是我们的主创建过程用Ant建立,并且在一台使用Ant的服务器上运行。 
    自测试的代码 
        只让程序通过编译还是远远不够的。尽管强类型语言的编译器可以指出许多问题,但是即使成功通过了编 译,程序中仍然可能留下很多错误。为了帮助跟踪这些错误,我们非常强调自动化测试——这也是XP提倡的另一 个实践。 
        XP将测试分为两类:单元测试和容纳测试(也叫功能测试)。单元测试是由开发者自己编写的,通常只测试 一个类或一小组类。容纳测试通常是由客户或外部的测试组在开发者的帮助下编写的,对整个系统进行端到端的 测试。这两种测试我们都会用到,并且尽量提高测试的自动化程度。 
        作为创建的一部分,我们需要运行一组被称为“BVT”(Build Verification Tests,创建确认测试)的测 试。BVT中所有的测试都必须通过,然后我们才能宣布得到了一个成功的创建。所有XP风格的单元测试都属于 BVT。由于本文是关于创建过程的,所以我们所说的“测试”基本上都是指BVT。请记住,除了BVT之外,还有一 条测试线存在(译注:指功能测试),所以不要把BVT和整体测试、QA等混为一谈。实际上,我们的QA小组根本不会看到没有通过BVT的代码,因为他们只对成功的创建进行测试。 
        有一条基本的原则:在编写代码的同时,开发者也应该编写相应的测试。完成任务之后,他们不但要归还 (check in)产品代码,而且还要归还这些代码的测试。这也跟XP的“测试第一”的编程风格很相似:在编写完 相应的测试、并看到测试失败之前,你不应该编写任何代码。所以,如果想给系统添加新特性,你首先应该编写一个测试。只有当新的特性已经实现了以后,这个测试才可能通过。然后,你的工作就是让这个测试能够通过。 
        我们用Java编写这些测试,与开发使用同样的语言,所以编写测试与编写代码没有太大的区别。我们使用JUnit(http://www.junit.org/)来作为组织、编写测试的框架。JUnit是一个简单的框架,让我们可以快速编 写测试、将测试组织为套件、并以交互或批处理的模式来运行测试套件。(JUnit是xUnit家族的Java版本 ——xUnit包括了几乎所有语言的测试框架。) 
        在编写软件的过程中,在每一次的编译之后,开发者通常都会运行一部分单元测试。这实际上提高了开发者的工作效率,因为这些单元测试可以帮助你发现代码中的逻辑错误。然后,你就没必要去调试查错,只需要注意 最后一次运行测试之后修改的代码就行了。这个修改的范围应该很小,所以寻找bug也就容易多了。 
        并非所有的人都严格遵循XP“测试第一”的风格,但是在第一时间编写测试的好处是显而易见的。它们不但 让每个人的工作效率更高,而且由这些测试构成的BVT更能捕捉到系统中的错误。因为BVT每天要运行好几次,所 以BVT检查出的任何问题都是比较容易改正的,原因很简单:我们只做了相当小范围的修改,所以我们可以在这 个范围内寻找bug。在修改过的一小块代码中排错当然比跟踪整个系统来排错要有效多了。 
        当然,你不能指望测试帮你找到所有的问题。就象人们常说的:测试不能证明系统中不存在错误。但是,尽 善尽美不是我们唯一的要求。不够完美的测试只要经常运行,也比永远写不出来的“完美测试”要好得多。 
        另一个相关的问题就是:开发者们为自己的代码编写测试。我们经常听人说:开发者不应该测试自己的代 码,因为他们很容易忽视自己工作中的错误。尽管这也是事实,但是自测试过程需要快速将测试转入代码基础 中。这种快速转换的价值超过独立测试者的价值。所以,我们还是用开发者自己编写的测试来构造BVT,但是仍 然有独立编写的容纳测试。 
        自测试另一个很重要的部分就是它通过反馈——XP的一项核心价值——来提高测试的质量。这里的反馈来自 于从BVT中逃脱的bug。自测试的规则是:除非你在BVT中加入了相应的测试,否则就不能修正任何错误。这样, 每当要修正某个错误的时候,你都必须添加相应的测试,以确保BVT不会再把错误放过去。而且,这个测试应该 引导你去考虑更多的测试、编写更多的测试来加强BVT。 
    主创建 
        创建过程的自动化对于单个开发者来说很有意义,但是它真正发光的,还是在整个系统的主创建(master  build)的生成。我们发现,主创建过程能让整个团队走到一起来,让他们及早发现集成中的问题。 
        第一步是要选择运行主创建的机器。我们选择了一台叫做“投石车”的计算机(我们经常玩“帝国时代” J),这是一台装有四个CPU的服务器,非常适合专门用来做创建。(由于完整的创建需要相当长的时间,所以这 种马力是必须的。) 
        创建进程是在一个随时保持运行的Java类中进行的。如果没有创建任务,创建进程就一直循环等待,每过几 分钟去检查一下代码仓库。如果在最后的创建之后没有人归还任何代码,进程就继续等待。如果代码仓库中有了 新的代码,就开始创建。 
        创建的第一阶段是完全提取仓库中的代码。Starteam已经为我们提供了相当好的Java API,所以切入代码仓 库也很容易。守护进程(daemon)会观察五分钟以前的仓库,看最近五分钟里面有没有人归还了代码。如果有, 守护进程就会考虑等五分钟再提取代码(以免在别人归还代码的过程中提取)。 
        守护进程将全部代码提取到投石机的一个目录中。提取完成之后,守护进程就会在这个目录里调用Ant脚 本。然后,Ant会接管整个创建过程,对所有源代码做一次完整的创建。Ant脚本会负责整个编译过程,并把得到 的class文件放进六个jar包里,发布到EJB服务器上。 
        当Ant完成了编译和发布的工作之后,创建守护进程就会在EJB服务器上开始运行新的jar,同时开始运行BVT 测试套件。如果所有的测试都能正常运行通过,我们就得到了一个成功的创建。然后创建守护进程就会回到 Starteam,将所有提取出的源代码标记上创建号。然后,守护进程会观察创建过程中是否还有人归还了代码。如 果有,就再开始一次创建;如果没有,守护进程就回到它的循环中,等待下一次的归还。 
        创建结束之后,创建守护进程会给所有向最新一次创建归还了代码的开发者发一个e-mail,汇报创建的情 况。如果把创建留在代码归还之后去做,而又不用e-mail向开发者通报创建的情况,我们通常认为这是不好的组 织形式。 
        守护进程将所有的步骤都写在XML格式的日志文件里面。投石车上会运行一个servlet,允许任何人通过它检 查日志,以观察创建的状态。(见图1) 
        屏幕上会显示出创建是否正在运行、开始运行的时间。在左边有所有创建的历史记录,成功的、失败的都记 录在案。点击其中的某一条记录,就会显示出这次创建的详细信息:编译是否通过、测试的结果、发生了哪些变 化…… 
        我们发现很多开发者都经常看看这个页面,因为它让他们看到项目发展的方向,看到随着人们不断归还代码 而发生的变化。有时我们也会在这个页面上放一些其他的项目新闻,但是需要把握好尺度。 
        要让开发者能在自己的本地机器上模拟主创建过程,这是很重要的。这样,如果集成错误出现了,开发者可 以在自己的机器上研究、调试,而不必真的执行主创建过程。而且,开发者也可以在归还代码之前先在本地执行 创建,从而降低了主创建失败的可能性。 
        这里有一个比较重要的问题:主创建应该是干净的创建(完全从源代码开始)还是增量创建?增量创建会快 得多,但是也增大了引入错误的风险,因为有些部分是没有编译的。而且我们还有无法重新创建的风险。我们的 创建速度相当快(20万行代码约15分钟),所以我们乐于每次都做干净的创建。但是,有些团队喜欢在大多数时候做增量创建,但是当那些奇怪的问题突然出现时,也经常性地做干净的创建(至少每天一次)。 

    图1:运行在投石车上的servlet 
    代码归还(Check in) 
        使用自动化创建就意味着开发者应该遵循某种节奏来开发软件,最重要的就是他们应该经常集成。我们曾经 见过一些组织,他们也做日创建,但是其中的开发者却不经常归还代码。如果开发者几周才归还一次代码,那么 日创建又有什么意义呢?我们遵循的原则是:每个开发者至少每天要归还一次代码。 
        在开始新的任务之前,开发者应该首先与配置管理系统同步。也就是说,他们应该首先更新本地机器上的源 代码。在旧的代码基础上编写代码,这只会带来麻烦和混乱。 
        然后,开发者要随时保持文件的更新。开发者可以在一段任务完成之后将代码集成到整个系统中,也可以在 任务的中途集成,但是在集成的时候必须保证所有的测试都能通过。 
        集成的第一步是要再次使开发者的本地文件与代码仓库同步。代码仓库中所有新近有改动的文件都要拷贝到 开发者的工作目录中来,当文件发生冲突时,配置管理系统会向开发者提出警告。然后,开发者需要对同步后的 工作集进行创建,对这些文件运行BVT,并得到正确的结果。 
        现在,开发者可以把新的文件提交到代码仓库中。提交完成之后,开发者就需要等待主创建。如果主创建成功,那么这次归还也是成功的。如果主创建失败了,开发者可以在本地修改。如果修改很简单,就可以直接提 交;如果修改比较复杂,开发者就需要放弃这次修改,重新同步自己的工作目录,然后继续在本地开发、调试,然后再次提交。 
        某些系统强制要求归还进程逐个进行。在这种情况下,系统中会有一个创建令牌,同一时间只有一个开发者 能拿到令牌。开发者获取创建令牌,再次同步文件,提交修改,然后释放令牌。这就确保创建过程中,最多只能 有一个开发者在更新代码仓库。不过我们发现,即使没有创建令牌,我们也很少遇到麻烦,所以我们也不用这种方法。经常会有多个人同时向同一个主创建提交代码的情况,但是这很少造成创建失败,而且这样的错误也很容 易修复。 
        同时,我们还让开发者自己来决定归还过程中的小心程度。这反映出开发者对集成错误出现几率的评估。如 果她觉得很有可能出现集成错误,那么她就会在归还之前先做一次本地创建;如果她觉得根本不可能出现集成错误,那么她可以直接归还。如果犯了错误,在主创建运行时她立刻就会发现,然后她就必须放弃自己的修改,找到出错的地方。如果错误很容易发现、很容易修补,那么这种错误也是可以接受的。 
    总结 
        发展一个制度严密的自动化创建过程对于项目的控制是很重要的。许多软件先贤都这样说,但是我们发现, 这样的过程在软件开发领域中仍然罕见。 
        关键是要让所有的事情都完全自动化,并且要经常进行集成,这样才能尽快发现错误。然后,人们可以随时 修改需要修改的东西,因为他们知道:如果他们做的修改引起了集成错误,那也是很容易发现和修补的。一旦获得了这些利益,你会发现自己再也无法放下它们

     
    July 18

    《配置项标识规范》zt

    1 定义
    配置项是受配置管理控制和管理的基本单位。配置标识是软件生命周期中划分选择各类配置项、定义配置项的种类、为它们分配标识符的过程。配置项标识的重要内容就是对配置项进行标识和命名。

    2 必要性
    配置标识是软件配置管理的基础性工作,是管理配置的前提。很难想象缺乏配置项标识的基线管理,如何去区分和定义基线;也很难想象缺乏配置项标识的变更控制,如何去标明版本的变化规迹。

    3 原则
    配置项标识可以根据项目的实际情况灵活掌握,但有一些基本的原则是需要遵从的。
        标识唯一:这是为了避免混淆
        与同类配置项不同的信息,应纳入标识:这是为了便于区分、查找
        同类配置项的标识方法统一
        容易记忆:对于经常使用的配置项,标识不宜过长

    4 标识范例
    4.1文档
    对于常见的word、excel、visio等文档而言,标识也就是文档的文件名。文档的标识可能承载好几项信息,如项目编号、文档名、撰写时间等等。标识里要包括哪些信息,是和文档的性质有关的。比如每周产生的一次周报,标识里加上撰写时间,就一目了然了,这样便于查找和整理。
    不同的信息之间,可以用下划线“_”分割,也可以用括号“()”分割,如果前后两项信息分别是字母、汉字;或汉字、数字等情况,不必加分割符号也是可以的。
    以下是常用文档的标识规范,供参考:
        次要的文档
    命名方式:[文档名]
    如:配置库使用规范
        比较正规的文档
    命名方式:[项目编号+文档名]
    如:GC21007E技术规划书
        有版本变化的
    命名方式:[文档名+版本号]
    如:GC21007E需求规格说明书V1.2
        主要区别在于时间的
    命名方式:[文档名+撰写时间]
    如:周例会会议纪要20030901
        主要区别在于人员的
    命名方式:[文档名+人员名称]
    如:工作周报_赵明
        主要区别在于系统模块的
    命名方式:[文档名+模块名]
    如:需求实现跟踪表_申报征收;
        为了能排列顺序,需要加上数字的
    命名方式:[序号+文档名]
    如,某一测试流程,不是写在一个文档里,而流程的执行是有时间顺序的:
    02银税联网的电子税票日常对帐、03现金票证汇总
        其它,加上能和同类文档区别的文字
    命名方式:[文档名+简单文字]
    如:联调环境确认_暂行;联调及修改记录_模版;GC21007E项目WBS计划_提交稿

    4.2版本号
    版本号是比较抽象的配置项。
        方式一:以版本发布日期作为版本号
    这种版本号的标识方法比较简单,虽然无法看出系统一共发布的版本数量,以及各版本之间的不同性质,但可以直观的看出版本的发布日期。也比较容易记忆。
    如果项目组成员需要对版本的情况进行统计或者沟通,不需要依靠任何记录就可以定位出某个版本发布的日期。
    适用于:小型项目、版本频繁发布的项目。
    举例:2003-9-7发布了两个版本,分别是20030907A,20030907B
    应用的项目:ctais2.0。

        方式二:采用“主版本号. 从版本号. 维护版本号. 补丁版本号”的形式
    这是大部分系统版本号的基础标识形式,每个版本号是阿拉伯数字,主版本号以1为起始数字,其他版本号以0为起始数字。可以进行裁减,类似“主版本号. 从版本号”的形式也是可以的。以这种方式来标识版本之后,当前版本的状态,以及版本发布的轨迹,都可以看得比较清楚。
    至于何谓主版本和从版本,每个项目组可以有自己的约定。比如功能的大幅度修改、正式发布给客户、上线等里程碑事件,都是应该反应在版本号的变化上的。
    适用于:比较正式的软件项目
    举例:第一个版本为 1.0.0.0,上线使用的版本为5. 11.18

        可选方式三:给版本加上前缀以区分
    方式三、四并不是一种新的软件版本标识方法,它们通常增加在方式二的基础之上,以更好的标识版本。
    我们通常在软件前面看到alpha、beta、demo、release等前缀,这些标识有它们公认的含义,主要以区别版本的性质和用途。以下是参考资料。

    Alpha版(内部测试版):一般只在软件开发公司内部运行,不对外公开。主要是开发者自己对产品进行测试,检查产品是否存在缺陷、错误,验证产品功能与说明书、用户手册是否一致。
    Beta版(外部测试版):软件开发公司为对外宣传,将非正式产品免费发送给具有典型性的用户,让用户测试该软件的不足之处及存在问题,以便在正式发行前进一步改进和完善 。一般可通过Internet免费下载,也可以向软件公司索取。
    Demo版(演示版):主要是演示正式软件的部分功能,用户可以从中得知软件的基本操作,为正式产品的发售扩大影响。如果是游戏的话,则只有一两个关卡可以玩。该版本也可以从Internet上免费下载。
    Release版(发行版):不是正式版,带有时间限制,也是为扩大影响所做的宣传策略之一。比如Windows Me的发行版就限制了只能使用几个月,可从Internet上免费下载或由公司免费奉送。
    Full Version版(完全版):也就是正式版,是最终正式发售的版本。

    举例:beta2.0,release1.02
    适用于:较正式的软件、商用软件、游戏软件等

        可选方式四:使用外部版本、内部版本两套机制
    当我们点击word帮助菜单的“关于”时,在抬头部分看到的是“word2002 (10. 2627. 2675)”。这里的2002、10. 2627. 2675分别是外部、内部版本号。因为让客户记住繁琐的内部版本号是困难的,另一方面,出于宣传等商业原因,很多商业软件不但有外部版本号,还把功能有大幅度改善的版本以不同的名称命名。比如windows98- windows Me- windows2000- windowsXP; RealPlayer8.0- RealOne Player V2.0等。
    适用于:商业软件

    4.3 其他配置项
    以下配置项没有对应实际的物理文件,但通常都由配置人员分配(特别是在小型项目中)。另一方面它们和项目组每个成员相关、经常被使用。对它们的标识需要容易记忆、规则统一,但由于涉及安全性,不能过于简单和容易猜测。
        配置机、服务器的访问密码
    例:用户名 guest;密码 ctais123(若有多台服务器,其用户名和密码最好都一致,容易记忆)

        VSS数据库、butterfly等配置工具的用户名和口令
    例:用户名 zhouyan;初始密码 zhouyan(所有人员的命名规则都相同,VSS的和butterfly的最好一致)

        数据库的SID、用户名和口令
    例:IP为10.1.120.11的服务器,在上面搭建的数据库SID为 11sid;(由于有多台服务器设有数据库,所以SID最好和服务器的IP相关)
    给测试人员使用的库,用户名 test;密码 test;
    给开发人员调试使用的库,用户名 dev;密码 dev (用户名和密码表明了其功能和作用)

    5辅助标识
    配置工具有一些辅助方法来标识配置项,这里介绍VSS和CVS的方法。
    5.1 VSS
    VSS提供以下三种方式为配置项标识
        version
    version通常是纯数字型的,它由VSS自动管理。每当用户对一个配置项进行了修改并提交变更(check-in)、分支等操作后,VSS都会将配置项的version自动加1。
    Version的最大好处是能一目了然的看出配置项的变更规迹。在计算配置项的变更次数、在比较配置项两个版本之间的差异时,发挥了较大的作用。
        user/date/time Stamp
    user/date/time Stamp也是由VSS自动管理的。和version类似,每当用户对文件做了更改、分支、删除等操作时,VSS都会自动记录操作的时间和用户名。
    严格的说user/date/time Stamp并不是标识,只是在配置项发生变化时,对修改人员、时间信息的记录。它在跟踪配置项变更、跟踪责任人方面,起到了很重要的作用。对于一个多人的团队,某一配置项可能由多人修改。如果没有user/date/time Stamp,当我们发现一个公共的源代码被更改有误之后,如何去查找修改人呢?如果没有user/date/time Stamp,如何去取得某一配置项在20日产生的版本呢?
        label
    和以上两种方式不同,label是用户自发给某个配置项、或某些配置项的当前version创建的标识信息。因为同一配置项可能经历过多次变化,有对应的version,label能对应某个具体的version是最确切的,否则就很难通过label来查找和定位配置项的某个状态了。
    Label之后, 配置项的version号自动加1,并和配置项做当次label的上一个version相对应。也就是说,我们可以选中某个label,对它进行view、get的操作,取得的内容是所选label的上一个version的内容。
    如果一个或一组配置项达到了某种里程碑状态,配置人员想标明这种状态,使用label是个不错的主意。它可以在配置项的某个版本上随意增加一些我们想保留的信息。label是最长可达31个字符的字符串,比如“beta2.1.5”,“08.25评审通过”,“客户环境第一版”等等。

    5.2 CVS
    CVS有以下两种方式来标识配置项:
        revisions
    和VSS的version一样,revision也是CVS自动分配的,通常操作人员不需要过于关心它变化的细节,只需要知道一个配置项的每个revision都是唯一,并且对应配置项的某个版本就可以了。之所以配置项的版本称作revision,是为了和软件项目的版本release区别。
    配置项的初始revision是1.1,通常情况下,CVS是以1.11.21.3这样的趋势去变化配置项的revision的。
    增加一个新文件的时候,第二个数字将为“1”, 第一个数字等于该目录中所有文件版本号第一个值的最大值。例如,当前目录包含版本号为1.7, 3.1和4.12的文件,则一个新文件的版本号应为4.1。
        tag
    和VSS的label有一些类似,tag也是用户给CVS里的某个或某些配置项创建的标识。但CVS对tag的名称控制的比较严格,一个tag必须以字母开头,后续多个字母,数字,减号和下划线,不能包括点号和空格。比如“release1-3-2”,“approvdBy Sqa”等。
    Tag的作用和VSS的label一致,也是给配置项标明一些我们想保留的信息的。

    6 总结
    从以上的标识规范可以看出,配置项标识是一件比较细致的工作,也是配置管理的基础。每个项目的具体情况不同,可以根据以上的规范进行适当裁减与修改。但遵循一定的规范是相当必要的,只有这样,才能方便配置项的查找与规类,才能较清晰的看出配置项的状态,给基线控制、变更控制工作的开展创造基础。

    解析本土化软件配置管理

    [文章信息]
    作者: 徐勉
    时间: 2004-04-17
    出处: 程序员
    责任编辑: 方舟
    [文章导读]
    版本控制,是软件开发中一项必不可少的管理手段,也是软件配置管理的一个部分
     
    配置管理的三大误区

      国内软件公司实施配置管理,已经取得了很多进步,也提高了软件的质量。但是对于软件配置管理,有很多公司对它的理解比较模糊,或者在真正的配置管理实施过程中存在着误区。从专家们的讨论中,我们了解到国内的软件配置管理主要有三个方面的误区。

      误区一:版本控制=软件配置管理

      也许很多人不承认自己对于软件配置管理的理解局限在版本控制上,但在具体实施配置管理的过程中,就只见版本控制,而不见真正的配置管理。其实版本控制只是配置管理最基本的层次和功能。当然只有进行了版本控制,其他的功能才可能会逐渐提升。就是一个基本的版本控制,在部分软件公司中也并不是一个非常正规和完善的过程。

      这种问题,归根到底在于软件公司对软件开发流程的管理在意识上不够重视。国内软件企业的开发管理不是很规范,即使在大的软件公司里面,项目组对于开发管理的关注也是有限的。另外一个原因是由于开发管理中资源的不足,比如:资金的缺乏(导致不能购买功能齐全、价格昂贵的商业产品)、人力资源(不能招聘专业的配置管理人员),因此不能在公司内部实施体系化的配置管理。

      误区二:编码水平最差=配置管理员

      配置管理人员是配置管理具体实施的人。可以说公司制定了配置管理的流程和规章只是配置管理实施的基础,而真正配置管理能否实施,能否有效,关键在于从事配置管理的人员。但国内的一个误区是:在选择配置管理人员的时候,是寻找开发团队中编码水平最差的人。比如张三写代码不行,测试也不行,那就只好去从事配置管理工作了。

      谷炼对此深有体会。谷炼有在日本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年。

      配置管理之网络资源

      国内网站:

    http://www.8848software.com/
    http://www.scmchina.net
    http://www.sawin.com.cn/satech.asp?class=SCM

      国外专业网站:

      Google上SCM讨论组:

    http://groups.google.com/groups?group=comp.software.config-mgmt
    CM Today - “Your Source for Daily Configuration Management News”:
    http://www.cmtoday.com/
    “RAVEN Configuration & Project Management”:
    http://www.configuration.org/
    A list of WWW sites for CM:http://wwwsel.iit.nrc.ca/favs/
    www.cmcrossroads.com