质量之匙:持续集成工具与实践

发表于:2009-08-12来源:作者:点击数: 标签:软件测试质量工具实践
质量 之匙:持续集成工具与实践 软件 测试 编者按:CruiseControl:简称 CC ,持续集成工具,主要提供了基 于版本管理工具(如 CVS )感知变化或每天定时的持续集成,并提供持续集成报告、Email、Jabber等等方式通知相关负责人,其要求是需要进行日构建的专桉

       质量之匙:持续集成工具与实践       软件测试

        编者按:CruiseControl:简称CC,持续集成工具,主要提供了基 于版本管理工具(如CVS)感知变化或每天定时的持续集成,并提供持续集成报告、Email、Jabber等等方式通知相关负责人,其要求是需要进行日构建的专桉已编写好全自动的专桉编译脚本(可基 于Maven或Ant)。

        记者: CruiseControl是一个开源的持续集成工具。那么开源的CruiseControl,与企业版本的Cruise, 有什么区别呢?

        Jez:主要有几个区别,但是最重要的是,Cruise新增了一个“构建管道 ”(“pipeline”)的概念。我们之后会再深入的谈,概括来说这个“pipeline”不仅可以运行构建,还可以帮助你把软件部署到产品环境里,这是很多公司在部署软件时都会遇到问题。所以说Cruise不只改进了传统持续集成工具的不足,而且还能帮助你解决部署到产品环境中时遇到的问题。

        另外,CruiseControl和CruiseControl.NET都比较难用、难设定,所以我们把Cruise设计得更容易使用。Cruise还有另外一些先进的功能,如构建网格(build grid)等,它可以让你无需太多配置就可以灵活括展,且并行你的持续集成系统。

        记者: Cruise最大的优点是什么呢?

        Jez:Cruise最大的优点包括我上面所说的先进功能:软件部署、容易使用和build grid,还有迎合企业用户需要的验证与授权(authentication & authorization),和fail-over。当一个agent停止响应时 ,server会自动把工作分配到其他的agent上面去。

        记者:你可以多谈一谈构建网格(build grid)这个概念吗?

        Jez:你的软件产品可能要在不同的platform上(e.g. Windows, Linux, and Solaris)运行,那么你就需要在几台不同的电脑上执行你的构建(build)。

        如果你的build里面的自动测试会花很长时间,你也可以把这些测试分别放在几台电脑上同时运行。

        还有,对较大的公司来讲,利用 build grid 来分工的话,几个部门就可以共用一个中央管理的server。

        记者:当你们作产品计划时,你们首先考虑的是什么?

        Jez:作为一个商业软件,我们首先考虑的当然是如何吸引客户。所以我们必须要开发出一些有吸引力的功能。Cruise一定要容易用,同时也要满足客户的需求。Cruise要做到替客户降低成本,帮助他们顺利地部署软件、把持续集成变成一件简单的事情。那么人们就自然会觉得购买Cruise是一个好的投资。

        记者:业界目前已有不少的持续集成工具,怎样能使Cruise变成持续集成工具中的第一?

        Jez:当然Cruise现在还不是,但这的确是我们的目标。现在CruiseControl是被下载最多的持续集成工具,所以Cruise试图吸取CruiseControl的优点,再加以改良和创新。

        记者:还有另外的持续集成工具,例如 Atlassian的Bamboo。你可以比较一下Bamboo和Cruise的异同吗?

        Jez:除了Bamboo,还有不少其他的持续集成工具。我不打算在Cruise 发布之前去看其他的持续集成工具。比起其他工具开发公司, Thoughtworks的特质就是它是一间咨询服务公司。在持续集成技术方面,我们有为很多不同的客户解决问题的经验。所以Cruise这个产品的理念,就是去解决我们见过的、实际的问题,而不是去抄袭或模仿其他产品的特性。

        Cruise有一些和Bamboo类似的特性(如build grid),但是最大的区别是,我们的咨询服务经验是特有的。
 
        记者:当自动测试越来越多,持续集成的build也会越来越花时间,Cruise怎样解决这个问题?

        Jez:Cruise的build grid就能缩短build的时间。只要把测试分开,就可以放在几台电脑上并行。设定Cruise的agent非常容易;安装了agent之后,输入server的IP,agent就会自动加入grid里面,无须任何配置。

        记者: Cruise是为企业而设计的软件,但是敏捷开发(Agile)在一些大公司里不大能接受。他们觉得如要应用敏捷,要很大、很难的改变。那么你会怎样说服他们去改用敏捷开发呢?

        Jez:Thoughtworks很多年以来都在面对这个问题。我们运用敏捷开发,也体验到敏捷给我们的客户带来的好处。但是要改变一个公司的制度是一件非常复杂的事情。Thoughtworks通常从一个小团队、一个项目开始,利用敏捷手段,解决它所遇到的问题。由上层把敏捷强加到团队身上是行不通的 。

        Cruise就是这样的一个工具:它可以帮助你从一个项目开始,逐步地采用敏捷的手段。相比其他敏捷的实践(如TDD,结对编程),持续集成能让你看到即时的效果:更快的找到bug,更快的获得反馈,和更容易地部署软件。不单是敏捷的团队,任何团队都可以从中获益。

        目前有一些工作流程和发布管理的工具,但价钱一般都不便宜。Cruise即将发布的1.0版本针对中小型公司,或一个大公司里面的中小型团队,可以把持续集成的好处立刻带给它们。

记者:你们开发Cruise的时候,是用什么工具呢?

        Jez:最初我们用CruiseControl,但三个月前我们就用Cruise作为我们自己的持续集成工具。

        记者:但是你们用Cruise时,也需要其他工具的配合,比方说测试、版本控制等工具。

        Jez:我们的开发最初用SVN ,但是之后我们看到整个软件开发业,有开始转向分布式版本控制系统的趋势(Distributed Version Control System, e.g.Git, Mercurial,Bitkeeper),我们选择了Mercurial。Cruise的1.0版本支持SVN和Mercurial。我们也用Ant, JUnit和Selenium作为测试和构建的工具。Cruise也支持NUnit和NAnt。

        CruiseControl, CruiseControl.NET,和 CruiseControl.rb是针对各自语言领域设计的工具。Cruise作为一个企业版软件,对于.NET, JavaRuby项目,都是“开箱即用” 。持续集成工具和 Version Control System一样,是没有理由硬把它们分开为SVN.NET、SVN.Ruby等等。

        记者:你可以介绍一下 “构建管道 ”(“pipeline”)的概念吗?

        Jez:一个 pipeline 基本上就是一个工作流程。一个build通常是从单元测试开始,之后有功能测试,之后还可能有性能测试,之后把它部署到UAT(用户验收测试 user aclearcase/" target="_blank" >cceptance testing)环境作人工测试,再把它部署到staging server,最后部署到产品环境里。 每一个build都从版本控制系统取到一个版本的代码,然后通过每一个上述的阶段(单元测试、功能测试),这个过程就是一个Pipeline。

        比方说,这个build通过了单元测试,但功能测试失败。另外的一个build通过了所有测试,可以随时将它部署。 利用这个pipeline的概念,就可以一目了然的看到你开发的软件的最新动态。

        记者:这么说来,你在写实现代码之前,需要写很多的测试?

        Jez:不错,如果你想得到持续集成带给你所有的好处,是需要写很多的测试。这个也是持续集成被广泛接受得比较慢的原因。但是这是值得的;测试可以把你的软件的质量提高,减低bug的数量,应付变化也可以比较快。这些都是对你的公司有利的。

        不过,就算你没有很多测试,Cruise也能带给你很多的得益,因为它能帮助你把软件部署的过程自动化,从而减低部署上会遇到的风险。

        记者:我觉得要从CruiseControl上获得最大的好处,就要test-first(先写测试)。我觉得它对于部署方面,不是最重要的一环。所以你需要说服人们多写测试?

        Jez:对,我也同意测试是很重要的,也要对人们多加强调这一点。

记者:Thoughtworks有一些帮助客户利用test-first的成功个案,可以跟我们分享吗?

        Jez:Thoughtworks发表了好几个个案研究。另外,Thoughtworks最近出版了一部名为“Thoughtworks Anthology”的书,内容讲述我们帮助客户时用过很多不同的技术和技巧。我们Cruise也会用视频和播客的形式,来讲述Cruise的用法和好处。

        如你所说,认知是很重要的。我们要向人们显示Cruise和持续集成带来的好处,要不然他们当然不会花这个力气。

        记者: Cruise怎样支持一个项目里的(在版本控制系统上的)多个分支?

        Jez:一般来说,一个软件系统有三方面: a)部署-把软件放在不同的环境上。b)依赖-e.g.两个模块都依赖于一个共同的框架。c) 分支。在Cruise Release 1.0,你可以用不同的pipeline来代表不同的分支,比如说把一个pipeline设定为产品分支,而把另外的pipeline设定为旧版本的分支。

        记者: Cruise将会在何时发布?

        Jez:第三季度初。

        记者:在“敏捷中国” 技术大会里, 会有Cruise的演示吗?

        Jez:有。我和我的中国同事将会一起演示Cruise。

        记者:听说Martin Fowler也会出席这次大会,你和他见过面吗?

        Jez:去年我和我们的中国同事们去了伦敦,和他,还有其他的同事,一起设计Cruise的架构。

        记者: Cruise的开发用了多少时间?

        Jez:我们去年12月开始开发。

        记者:只用了不过半年,也挺快的。

        Jez:这半年间也是非常辛劳的,但同时也非常刺激、非常快。敏捷开发的其中一个好处是可以很快的做出成果,和对客户的要求作出快捷的反应。我们当然在开发Cruise的时候也用得上敏捷带来的好处。

        记者:转到一个比较私人的问题。我知道你读过音乐学与哲学,这些学科对你的事业有帮助吗?

        Jez:有,不过不是直接性,是间接性的。Thoughtworks里有很多人都没有传统的计算机学位,而是来自很多不同的背景,不同的国家。同事之间有不同的想法,不同的见解,可以互相学习。Thoughtworks其中一个引以为傲的地方,就是雇员们的技能比较广泛,员工不是单单的developer或analyst,那么互相的交流也比较多。我们觉得这也使Thoughtworks成为一个工作的好地方。

        记者:你可以列出三个令顾客掏钱包出来买Cruise的理由吗?

        Jez:首先,Cruise帮助你减低软件部署的风险;

        其次,易用。很多人都在设定其他的持续集成工具时(包括开源的CruiseControl)遇到困难。还有我们想把持续集成推动成为一个best practice,让每一个软件开发团队都有机会可以简单地实践持续集成。

        再次,Cruise提供一个简单的中央页面,让你看到你的软件项目的状况;提高透明度,和令项目更加容易管理。

原文转自:http://www.ltesting.net