写点什么

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

  • 2009-05-28
  • 本文字数:1116 字

    阅读完需:约 4 分钟

“测试驱动开发”和“结对编程”是最著名的两个敏捷实践,然而许多敏捷团队并没有采用。通常大家找借口说“太忙”,没时间采用测试驱动开发和结对编程这样的实践;实际上,他们的意思是追求高质量的代码会降低生产效率。在这里,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

2009-05-28 21:242522
用户头像

发布了 37 篇内容, 共 11.5 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

Vue3知识点之数据侦测

yyds2026

Vue

React生命周期深度完全解读

夏天的味道123

React

【LeetCode】验证栈序列Java题解

Albert

算法 LeetCode 11月月更

React源码中的dom-diff

夏天的味道123

React

React中常见的TypeScript定义实战

xiaofeng

React

大数据培训自学怎么样?

小谷哥

java程序员培训和自学的区别

小谷哥

Wallys/industrial wifi6 router/Support OpenWRT /2×2 2.4G&5G

Cindy-wallys

Webpack中的plugin插件机制

Geek_02d948

webpack

【云服务器】云服务器哪家好用便宜服务好?

行云管家

云计算 企业上云 云服务器 行云管家

React核心技术浅析

夏天的味道123

React

热备与冷备分别是什么意思?怎么通俗理解?

行云管家

高可用 热备 冷备

web前端培训有哪些比较好?

小谷哥

React-diff原理及应用

xiaofeng

React

Vue3, setup语法糖、Composition API全方位解读

yyds2026

Vue

Sprint产品待办列表的优先级要怎么排?

敏捷开发

项目管理 敏捷开发

分享10个降低PCB成本的技巧!可收藏

华秋PCB

PCB PCB打样 PCB设计

从延迟处理讲起,JavaScript 也能惰性编程?

掘金安东尼

前端 11月月更

从算力突破到应用全面开花,英特尔与阿里云那些不可不提的合作

科技之家

想开发DAYU200,我教你

华为云开发者联盟

开发 华为云 开发板 企业号十月 PK 榜 富设备

React-hooks+TypeScript最佳实战

xiaofeng

React

可观测实践|如何利用 Prometheus 精细化观测云产品

阿里巴巴云原生

阿里云 云原生 Prometheus

Webpack中的高级特性

Geek_02d948

webpack

那些年面挂的js手写题

helloworld1024fd

JavaScript

深入浅出文件系统新形态

焱融科技

云计算 高性能 文件存储

前端培训机构学习比较好的方法

小谷哥

前端线下培训和线上培训学习哪个更好?

小谷哥

Vue3必会技巧-自定义Hooks

yyds2026

Vue

现在加入写作社区,惊喜等你开启!

InfoQ写作社区官方

热门活动

9个GaussDB常用的对象语句

华为云开发者联盟

数据库 后端 华为云 企业号十月 PK 榜

为何大企业都纷纷选择低代码做数字化转型?

优秀

数字化 低代码开发

通过测试驱动开发和结对编程提高生产水平_研发效能_Mike Bria_InfoQ精选文章