BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

文章:“持续集成”也需要重构——持续集成实践在Cruise开发过程中的演进

| 作者 乔梁 关注 7 他的粉丝 发布于 2009年4月16日. 估计阅读时间: 2 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

持续集成是极限编程十二实践之一(1999年Kent Beck编写的《解析极限编程》),最初被使用极限编程方法的开发人员所推捧,并在过去的几年中得到广泛应用,成为业界广为人知的软件开发实践。该实践用于解决软件开发过程中一个具体且重要的问题,即“确保当某个开发人员完成新的功能或修改代码后,整个软件仍旧能正常工作。”

然而,持续集成并非像大多数人想像的那样,首次部署好持续集成环境后就大功告成,一劳永逸了。恰恰相反,它与你项目中的其它产品代码一样,需要改进与重构,否则,就会使你进入一种“持续闹心”的状态,甚至可能让你觉得这件事根本不应该做,如何解决这一问题呢?对“持续集成”应用“Retrospective”和“重构”。本文将结合Cruise团队一年多的实际历程,讲述持续集成实践在软件开发过程中的演进。

作者将持续集成的演进分成如下步骤:

1. 基本持续集成——万里长征第一步
2. 阶段化持续集成——平衡的艺术
3. 过程化持续集成——消除浪费
4. 管道式持续集成——企业级持续集成的解决方案
5. 并发执行——时间就是金钱,资源也是金钱

查看文章全文:“持续集成”也需要重构——持续集成实践在Cruise开发过程中的演进

相关阅读

[ ThoughtWorks实践集锦(1)] 我和敏捷团队的五个约定

[ ThoughtWorks实践集锦(2)] 如何在敏捷开发中做好数据迁移

[ ThoughtWorks实践集锦(3)] RichClient/RIA原则与实践(上)(下)

[ ThoughtWorks实践集锦(4)] 为什么我们要放弃Subversion

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

管道式持续集成 by liu andy

对于“管道式持续集成”,开发人员的每次提交都会创建一个“管道”吗?这样是不是太多了?

Re: 管道式持续集成 by 乔 梁

对于“管道式持续集成”,开发人员的每次提交都会创建一个“管道”吗?这样是不是太多了?


我认为并不多,而且这正是持续集成的基本点.

由于各环节之间即可以是手工触发,也可以是自动触发.完全取决于您所在项目中对于持续集成的理解深度.目前在Cruise团队中,任何人的一次提交都可能自动触发一次构建.至于这些构建是否能够走到管道的另一头(交付),首先取决于代码的质量.如果质量足够好,为什么不可以呢.

Re: 管道式持续集成 by liu andy

对于“管道式持续集成”,开发人员的每次提交都会创建一个“管道”吗?这样是不是太多了?


我认为并不多,而且这正是持续集成的基本点.

由于各环节之间即可以是手工触发,也可以是自动触发.完全取决于您所在项目中对于持续集成的理解深度.目前在Cruise团队中,任何人的一次提交都可能自动触发一次构建.至于这些构建是否能够走到管道的另一头(交付),首先取决于代码的质量.如果质量足够好,为什么不可以呢.


多谢您的回复, 我还有两个问题
(1)对于开发人员的每次提交,提交的代码量大概是多少, 开发人员基于什么来确定是否提交代码,提交哪些代码? 如果只是做了简单的变量rename的重构,我觉得创建一个管道,并且走到头,代价的确是大了。
(2) 对于手工触发,是不是开发人员提交代码的时候,都能够选择对本次提交做“单元测试”,“功能测试”,“部署到生产环境” 等等?

Re: 管道式持续集成 by 乔 梁

首先,我无法回答您"您应该怎么做",因为我不知道您所在团队与公司的具体情况.以下是Cruise团队的做法.


(1)对于开发人员的每次提交,提交的代码量大概是多少, 开发人员基于什么来确定是否提交代码,提交哪些代码?

根据具体团队的情况自行决定.在Cruise的开发团队中,原则是尽早提交.因为代码共有,后提交的人要自己处理代码冲突.
个人认为,如果开发人员自己都不知道是否要提交,还要别人来规定的话,开发情况可想而知.

如果只是做了简单的变量rename的重构,我觉得创建一个管道,并且走到头,代价的确是大了。


(1)多人同时提交的话,Cruise会把所有提交放在一起构建.
(2) 全部是自动化过程;
(3) 现在硬件(计算机)很便宜;
(4) 如果在像华为那样需要昂贵设备来测试的话,至少可以想办法在昂贵设备上运行测试之前,增加低成本测试.
(5) 至于"如何走到头",Cruise提供自动触发和手工触发,这完全取决于用户自身的环境.


(2) 对于手工触发,是不是开发人员提交代码的时候,都能够选择对本次提交做“单元测试”,“功能测试”,“部署到生产环境” 等等?


(1)在Cruise团队,包括功能测试之前的所有阶段都是自动触发.
(2)在Cruise团队,开发人员提交之前要在本地运行单元测试,而且必须通过.
(3)在cruise团队,"是否部署到生产环境"需要团队决定,而非单个开发人员.

关于cruise by zhilong cheng

乔工好:
一直关注ThouhtWorks的产品,今天有幸拜读了文章,受益匪浅,有几个疑问不甚清楚,请乔工解惑;
1、ThouhtWorks出品了多个持续集成工具,CruiseControl、CruiseControl.rb、CruiseControl.Net和Cruise,其中除Cruise外其他都是开源的,上述四款工具使用了不同的语言进行开发,那么请问,上述四款工具区别的重点是在哪里呢(除去配置的建议繁琐性)?目前公司项目使用C++进行开发,哪个工具更适合我们项目呢?为什么?
2、针对我们的具体项目,由四个模块组成,模块间有交互,每个模块是单独的进程,项目进行持续集成,在项目的开始阶段,四个模块的代码相对较少时,应如何集成呢?是否可以理解持续集成偏重于针对某个模块的单元测试?
3、测试代码与产品代码的组织方式不甚清楚,在没有使用任何测试工具的情况下,开发人员将产品代码提交至svn服务器,不知测试代码与产品代码如何结合起来
4、上述持续构工具的发布关注的是构建结果的展示,如果发布关注的是"项目产品的对外发布,而不是简单的构建结果的通知“,持续构建工具有没有额外的支持呢?

谢谢!

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

5 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT