Skip to main content

测试驱动开发

📅 2026-03-24 ✏️ 2026-03-24 BN
No related notes

1 · 读书笔记:测试驱动开发

Test-Driven Development: by Example

https://book.douban.com/subject/25735501

1.1 · 核心观点:

  1. 是什么(What) 测试驱动开发是一种以测试为牵引的开发方法:先写一个失败的测试,再写最少代码让它通过,最后重构代码。它的核心不是“补测试”,而是用测试驱动设计。

  2. 为什么(Why) 它的价值在于把需求澄清、接口设计、回归验证和代码重构压缩进一个短反馈循环里,降低返工成本。测试先行会迫使开发者先想清楚代码该对外表现什么行为,以及设计是否过于复杂。

  3. 怎么做(How) 实践上遵循“红灯-绿灯-重构”的小步节奏:先定义一个函数或功能入口,不急着展开实现;再根据当前最先想到的输入输出补一个测试,让它先失败;然后只补足能让这条测试通过的最少实现;接着继续补下一个测试、继续修正实现,如此循环推进。该做的是围绕行为写清晰、可维护的测试;不该做的是一开始就把细节铺满,或把测试写成实现细节的镜像。

1.2 · 启发点(关键洞察):

  1. 测试不只是验收工具,更是设计工具。先写测试会逼着自己先从使用者视角思考接口,从而减少“代码能跑但不好用”的设计。
  2. 好的开发节奏不是一次写对,而是快速暴露错误、快速修正。TDD 提醒我把“大块实现”拆成可验证的小步前进。
  3. 重构之所以敢做,是因为有测试兜底。测试的真正价值不止在发现 bug,更在于降低持续演进代码的心理成本和实际风险。

1.3 · 行动:

  1. 之后写新功能时,先尝试为核心行为补一个失败测试,再开始实现,至少在小模块里刻意练习 红灯-绿灯-重构
  2. 回顾近期写过的代码,挑一个最容易失控的模块,用“先写测试再重构”的方式重做一次,体会测试如何影响设计。
  3. 写测试时优先描述外部行为和边界条件,避免让测试绑定过多实现细节,降低后续重构阻力。

1.4 · 金句:

  1. “Clean code that works — is the goal of Test-Driven Development.” — Kent Beck
  2. “Test-driven development is a way of managing fear during programming.” — Kent Beck
  3. “Write a failing automated test before you write any code.” — Kent Beck