BT

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

通过测试驱动开发和结对编程提高生产水平

| 作者 Mike Bria 关注 0 他的粉丝 ,译者 张晓庆 关注 0 他的粉丝 发布于 2009年5月29日. 估计阅读时间: 3 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

“测试驱动开发”和“结对编程”是最著名的两个敏捷实践,然而许多敏捷团队并没有采用。通常大家找借口说“太忙”,没时间采用测试驱动开发和结对编程这样的实践;实际上,他们的意思是追求高质量的代码会降低生产效率。在这里,Mike Hill解释了这种逻辑有多么错误。

Mike告诉我们,从本质上讲,想要“更快”,必须“更好”

你牺牲质量,能换来更多的功能吗?不仅不是这样,而且恰恰相反:你追求的效率越高,你越应该提高内部质量标准。
......
想要提高生产水平,首先提高内部质量。

然后他告诉我们为什么会这样:

所以,为什么会这样呢?
  1. 因为内部质量和外部质量并不是一回事儿。
  2. 因为恰恰就是昨天的产品质量唯一决定了今天的生产水平。
  3. 因为打字现在不是,永远也不是编写代码的瓶颈所在。

Mike随后展开叙述这3个理由。首先,他用单词“质量”阐述外部质量内部质量的区别,外部质量可以认为是产品有多少功能,而内部质量指的是实现这些功能的代码。他这样加以区分,是为了说明想缩短市场投放时间,可以降低外部质量,但是决不能降低内部质量。

接下来,Mike描述了“昨天怎样决定今天”,或者说已有代码的内部质量何以影响当前的生产效率。

一整天,每当你开始动手,都要依赖已有的代码。要研究的每一行代码会降低你的速度。每一个对外开放的依赖关系会降低你的速度;每一个糟糕的变量名称会降低你的速度;每一个设计时的错误决定,不论大小,都会降低你的速度

如果你想尽可能快地工作,就需要编写干净整洁的代码。

最后,Mike对这个常见的误区进行了反驳:即很多人认为结对编程和测试驱动开发由于“只有一半的人打字,只有一半代码是产品代码”,所以会降低产出(生产效率)。为此,Mike列举了“编程”时常见的11种活动,然后说道:

请注意往电脑里打字只占列表很小的一部分,因为编程时真正有难度的是思考,而不是打字。列表中所有其它内容(可能扔东西要除外)都是关于思考的,而不是打字。

测试驱动开发可以提高生产效率,因为它有助于思考。它避免了你编写代码时从头再来和对功能的画蛇添足,减少了代码的反复研究和调试。结对编程由于同样的原因也会提高你的生产效率。两个开发者在一块并不能像分开打字那么快,但是我们并不担心:软件开发的瓶颈是思考[不是打字],而结对编程和测试驱动开发都能提高思考效率

Mike概括总结了3个建议,可以提高团队的生产效率:

如果你想提高团队的生产效率,就照这3条做:
  1. 修改任何代码前先编写一个会失败的简短测试
  2. 遵循“不结对,不干活”的原则
  3. 所有人要认识到内部质量的重要性

如果你知道有人(或者就是你自己)认为他们“没有时间结对或者测试驱动开发”。希望Mike的文章能够有所帮助。

查看英文原文How TDD and Pairing Increase Production

评价本文

专业度
风格

您好,朋友!

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

获得来自InfoQ的更多体验。

告诉我们您的想法

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

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

大部分时间在拷贝粘贴 by 一 刀

我现在编程的时候打字的时间多,思考的时间没有

Re: 大部分时间在拷贝粘贴 by 张 晓庆

以你现在的编程水平和项目水平,看来在做很多重复劳动,是不是感觉没有挑战性?
但是认真思考一下,我觉得应该还是有不少事儿可以做吧:测试的自动化水平如何,有没有地方可以改进?代码中有没有坏味道,是不是可以重构? ......

思考 by 幻想 最终

很不错的文章 学习了 以前思考的时间的确太少了 导致后来改来改去 很是头痛, 以后写代码的时候要多想想

企业给的事件机会太少 by Liu Min

国内的企业要赞同才行,否则怎么实践?这个行为不能是自发的。
而且结对也人也有要求,水平不能差太多,对内部质量也得有比较高的要求,很多人把软件开发当作一个工作而已,不关心质量,质量太好了,会减少很多就业机会的。^_^

Re: 大部分时间在拷贝粘贴 by zuqin wang

似乎要恭喜你达到了敏捷开发的顶峰

Re: 企业给的事件机会太少 by Song Sam

非常赞同该观点

Re: 企业给的事件机会太少 by 熊 小

不自发怎能自觉?
总埋怨没机会,不如自己创造机会,如果自己真的热爱写代码这份工作,业余时间没有人管吧?
P.S.:质量太好了,会减少就业机会。这是玩笑,还是认真的?严肃地说,我赞成这个观点完全相反的观点。说起来,质量要求与目标有关,不过那是另外一个话题了。

P.S.2:建议好好看看Bob大叔的视频:“软件开发的技艺与道德”www.infoq.com/presentations/craftmanship-ethics。

TDD还行,结对就免了 by Wong Peter

外部质量可以认为是产品有多少功能,而内部质量指的是实现这些功能的代码。如果想缩短市场投放时间,可以降低外部质量,但是决不能降低内部质量。因为昨天的产品质量决定了今天的生产水平。

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

8 讨论

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


找回密码....

Follow

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

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

Like

内容自由定制

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

Notifications

获取更新

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

BT