BT

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

结对编程 vs. 代码复查

| 作者 Chris Sims 关注 0 他的粉丝 ,译者 李剑 关注 1 他的粉丝 发布于 2009年1月20日. 估计阅读时间: 2 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

结对编程、代码复查、鼓励知识共享,这些都可以有助于提升软件质量。当敏捷 vs.精益XP vs.Scrumvi vs.Emacs的争论渐渐消隐,开发人员又对结对编程代码复查的价值所在展开了争论。Theodore Nguyen-Cao在他的文章中将代码复查者比作鸡,结对编程者比作猪。

在敏捷论文中常常会提到小鸡和猪的故事。在用熏肉和鸡蛋做的早餐中,鸡只是参与,而猪则是付出。所以,“猪”这个词用来形容对某件事情付出全部精力的人,而“鸡”虽然参与了,但是投入的程度比“猪”小。

做代码复查的时候,大家一起坐下来,看某个人的代码。每个人都会提出自己的意见,但是没人每天和那段代码一起工作。看上去每个人都参与了代码复查的过程,但是没人对它有铁定的兴趣。他们只是看看代码,互相问问:“这段代码看上去怎么样?有问题么?”这个出发点很消极。但是,结对编程的人会全心投入到手头的动作上。他们所写下的代码、做出的设计等等都会立刻被用到。每个人都在积极参与,对手头的任务持有浓厚的兴趣,因为他们在一起攻克难题。

Theodore还指出,在结对编程中的反馈环要比代码复查紧密得多。在结对编程的时候,两个人一直都在写代码、复查代码、修改代码。而代码复查就把复查代码的时间推后了一些,一般都是作者觉得代码可以用以部署以后才做代码复查。

众所周知,随着发现问题到修复问题之间的时间增加,修复的成本也会以指数级急剧攀增。所以,在结对编程中发现的问题,它的成本要远远小于代码复查中发现的问题。当然,这二者的成本也更是远远小于让bug留到发布以后才被发现。与其走到最后一步,还不如既做结对,又做代码复查。

你是喜欢结对编程,还是喜欢代码复查?两种方式都在用,还是都不用?请留下宝贵意见,与其他读者共享。

查看英文原文Pair Programming vs. Code Review

评价本文

专业度
风格

您好,朋友!

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

获得来自InfoQ的更多体验。

告诉我们您的想法

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

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

很不幸 by 白 玉京

都没有用

应考虑开发者之间的水平差异 by Song Timothy

若开发者之间水平相近,结对编程的效果应该更好!
若开发者之间水平有差距,那么进行代码复审,且高水平的开发者占据主导时,效果应该比较不错。

浅见浅见,不吝批评!Thanks!

敏捷 vs.精益,XP vs.Scrum,vi vs.Emacs by Xiang Ran

vi VS Emacs,这个和前面那俩貌似不是一路的。

Re: 很不幸 by 熊 小

为什么没有用?是在什么样的情况下没有用?

Re: 应考虑开发者之间的水平差异 by 熊 小

水平固然是一个方面,我觉得文中这样一句话应该重点注意:

做代码复查的时候……每个人都参与了代码复查的过程,但是没人对它有铁定的兴趣……他们的出发点很消极。但是,结对编程的人会全心投入到手头的动作上……每个人都在积极参与……因为他们在一起攻克难题。

也就是说,投入程度非常重要!

Re: 应考虑开发者之间的水平差异 by xiao qi

结对编程,两者在利益上是一致的,就有可能出现劣质代码的存在.代码审查,应由没有利益关联的第三方进行.在同一项目中,应该由水平较高的程序员独立进行相应的代码审核.

Re: 应考虑开发者之间的水平差异 by 帮 马

同意,开发人员之间进行代码复查时,大多发现不了什么问题;我来复查开发人员的代码时往往会发现问题。

Re: 很不幸 by Jacky Li

他的意思应该是“没有用到”吧

Re: 应考虑开发者之间的水平差异 by Gu Changsheng

高水平的人进行代码复查,可是开发人也许没有能力修改。(我在组织公司的 Code Review,这样的事情让我很难受)

我认为结对编程和代码复查需要有更详细的内容定义 by 何 铭华

我认为结对编程和代码复查需要有更详细的内容定义。
结对编程,应当存在于培训新人, 知识传播等阶段, 一般的开发,结对编程的投入和收益比比较低。
而且结对编程对人员的磨合度和自觉度有很高的要求。

在做代码审查前,应该存在代码规范, 框架规范。 对于不同水平的开发者,审查的深度应该有所不同。

正好项目使用了结对编程 by Wu David

结对编程,个人感觉确实让代码质量提高了不少,但效率并不见得提高很多。
另外,结对编程,对程序员的素质要求比较高,最好针对有较好的团队意识和编程经验的程序员才使用结对编程这种开发模式。
代码复查,以前的项目中用过,小项目,当项目上了一定规模,这种代码复查的效率和质量,会随着代码量的增加而急剧下降,建议在中小规模的产品开发中使用。
这篇文章写结对编程的不错哦,建议大家看看。
tech.it168.com/a2008/1016/208/000000208191.shtml

交流!交流! by 徐 毅

结对编程也是相互学习的一个机会,我到觉得提高代码质量是一个副产品,这个过程不能缺少交流。

两者应该不能比较 by zhang leslee

代码复查一般都在一个团队中,初级的程序员写完代码,其师傅或者项目经理会进行一次代码复查,主要以检查为主。

而结队编程,虽然可能还是同一个项目,同样2个人,一个师傅带着刚入职的“新人”,但是他们同甘共苦,一起配合完成一个目标。

我觉得完全是 就跟做导师带着学生做毕业设计,导师可能兼着两个角色,一个是指导,另外一个他可能还和你一起做核心部分的东西。
我觉得只有根据实际情况来处理,不能说哪种好,哪种不好。也没有说复查的就不投入、结队的就是劳模。只是分工不同、职责不同。:)

具体问题,具体分析 by 张 国春

结对编程,轻量易于操作,但不够严谨。代码复审,严谨但成本较高。所以实际工作中,两种方法各有侧重比较好。对于日常开发,使用结对编程以达到相互自查的目的,而代码复审则针对关键部分代码,和缺陷率较高代码,并兼有培训目的。这样对于工程师和管理层都比较容易接受。

Re: 应考虑开发者之间的水平差异 by zh jock

不一定哦 X理论和Y理论中对人们工作动机的看法是不同的 看你选择的是哪一种了 就我接触到的程序员来讲 都是愿意写出优质高效的代码的 并以此为成就

允许的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通知我

15 讨论

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


找回密码....

Follow

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

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

Like

内容自由定制

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

Notifications

获取更新

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

BT