写点什么

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

  • 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:242772
用户头像

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

关注

评论

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

洞态漏洞检出测试第二期:NoSQL & LDAP注入漏洞

火线安全

DevSecOps WEB安全 安全漏洞

Linux之chmod命令

入门小站

Linux

基于STM32设计的健康检测设备(测温心率计步)

DS小龙哥

C语言 嵌入式 单片机

年度盘点丨2021数字化转型优秀案例TOP10

ToB行业头条

看了个女装项目(doge

你?

基于STM32设计的数字电子秤

DS小龙哥

C语言 嵌入式 单片机

云智慧运维管理平台OMP荣获OSC中国开源项目评选「最受欢迎项目」奖

云智慧AIOps社区

开源项目 运维工程师 运维监控 自动化运维 运维管理

2022年石家庄等保测评公司名单(排名部分先后)

行云管家

网络安全 等保 等保测评 石家庄

QCon-OPPO大规模CV预训模型技术及实践

安第斯智能云

算法 计算机视觉 预训练模型

5步带你掌握工作流Activiti框架的使用

华为云开发者联盟

工作流 流程 任务 Activiti 静态数据

KubeMeet 新年首站成都开放报名!5 场云原生应用交付开源实践

阿里巴巴云原生

阿里云 开源 云原生 KubeMeet 线下活动

基于STM32设计的校园一卡通项目

DS小龙哥

C语言 嵌入式 单片机

基于STM32设计的计算器(实现基本运算)

DS小龙哥

C语言 嵌入式 单片机

低代码实现探索(十二)vue.config.js模块打包

零道云-混合式低代码平台

CRM系统的六大优势

低代码小观

低代码 CRM 客户关系管理 CRM系统 客户关系管理系统

青藤:东西向流量占比80%,安全如何有效搞定?

青藤云安全

全新UI西游H5决战天宫游戏详细图文架设教程

echeverra

Java 中 Jackson 的 readTree

HoneyMoose

Mithril.js:一个高性能 JavaScript MVC 框架

devpoint

typescript mvc 1月月更 Mithril.js

MongoDB高级应用之数据转存与恢复(5)

Tom弹架构

Java 分布式数据库mongodb

阿里云「低代码音视频工厂」正式上线,为企业用户打造音视频应用开发最短路径

阿里云CloudImagine

音视频 低代码 开发

谁说操作系统没有创新,这里就有一个,还是分布式的

LAXCUS分布式操作系统

云计算厂商们,你们辜负了中国的用户

Geek_2749b8

云计算 云服务

基于STM32设计的指针式电子钟与日历

DS小龙哥

C语言 嵌入式 单片机

项目经理如何有效管理项目进度?项目管理3大常见问题及解决方案

优秀

项目管理 项目管理工具

前端开发之JS中localStorage的使用

@零度

JavaScript 前端开发

采购堡垒机时候,选择开源堡垒机还是云堡垒机?

行云管家

云计算 网络安全 等保 堡垒机

如何修改Kestrel上传文件的大小

喵叔

1月月更

大数据开发之Hive调优技巧

@零度

大数据 hive调优

在线JSON转YAML工具

入门小站

json

关于熟经济和通胀--《香帅中国财富报告》摘录(2/100)

hackstoic

经济

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