2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

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

关注

评论

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

Amazon SageMaker Data Wrangler 简化数据准备过程,助力机器学习

亚马逊云科技 (Amazon Web Services)

AI/ML

在亚马逊云科技Marketplace上的SaaS架构设计——如何支持多产品使用单一账户中心

亚马逊云科技 (Amazon Web Services)

AI/ML

Amazon DeepRacer训练日志分析范例与强化学习Reward Function设计

亚马逊云科技 (Amazon Web Services)

AI/ML

2021年的感悟生活

卢卡多多

盘点2021

手把手教程 | 使用无服务器模板部署机器学习模型

亚马逊云科技 (Amazon Web Services)

AI/ML

在Amazon SageMaker上快速、灵活构建Amazon TensorFlow模型的在线推理服务

亚马逊云科技 (Amazon Web Services)

AI/ML

手把手教程 | 基于Amazon Kinesis Video Streams实现IP Camera云存项目

亚马逊云科技 (Amazon Web Services)

IoT

网易云音乐广告CTR预估模型演进过程

网易数帆

机器学习 CTR 网易云音乐

2022 全栈开发值得关注的技术产品

开源之巅

ide Web 云服务

54 K8S之Prometheus介绍

穿过生命散发芬芳

k8s 28天写作 12月日更

Amazon SageMaker新玩法——定制你的语音识别模型

亚马逊云科技 (Amazon Web Services)

AI/ML

直播预告 | 拍乐云与你相约RTSCon2021开发者沙龙

拍乐云Pano

WebRTC RTC

模块七作业

21°Char

Dubbo 框架学习笔记十一

风翱

dubbo 12月日更

如何将您的自定义容器镜像导入Amazon SageMaker Studio Notebooks

亚马逊云科技 (Amazon Web Services)

AI/ML

基于Amazon Machine Learning Bot 的 Named-entity Recognition 快速解决方案

亚马逊云科技 (Amazon Web Services)

AI/ML

【12月日更】深度解析redis分布式锁,那些你不知道的秘密!

小梁编程汇

redis 分布式 RedLock redis分布式锁

虎符上线“圣诞狂欢 没礼不行”活动 邀你瓜分等值66,666 USDT的圣诞礼包

区块链前沿News

区块链 节日 Hoo 虎符交易所 圣诞

从350ms到80ms,打造新零售场景下 iOS 短视频的极致丝滑体验

阿里巴巴终端技术

ios App 短视频 移动开发

Amazon Marketplace上的SaaS架构设计 ——如何支持跨多账户对接

亚马逊云科技 (Amazon Web Services)

AI/ML

利用 Amazon IoT Greengrass 在边缘 DIY 自动浇花系统

亚马逊云科技 (Amazon Web Services)

IoT

CRM 和 C4C product category hierarchy的可编辑性控制逻辑

汪子熙

中间件 CRM 28天写作 ERP 12月日更

优酷弱网平台落地实践

阿里巴巴终端技术

弱网 弱网环境高可用

使用Amazon SageMaker部署CVAT AI自动图像标注系统

亚马逊云科技 (Amazon Web Services)

AI/ML

Java 中的 xx ≠ null 是什么新语法?

CRMEB

实力超越,绝对领先——Amazon SageMaker 在企业 MLOps 平台报告中获得高度肯定

亚马逊云科技 (Amazon Web Services)

AI/ML

语音信号处理7:语音信号的非线性产生模型

轻口味

28天写作 12月日更

无监督欺诈检测|基于iForest异常值检测法的反欺诈研究

索信达控股

算法 模型 反欺诈 iForest 金融交易欺诈检测

自然语言处理实战——巧用 Amazon Comprehend 分析社交媒体数据

亚马逊云科技 (Amazon Web Services)

AI/ML

“腾源会”成立一周年:助力 40+ 开源项目成长,集结 50+ 位导师大使

腾源会

开源 开源社区 腾源会

使用 Amazon Redshift ML 构建多分类模型

亚马逊云科技 (Amazon Web Services)

AI/ML

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