首页/开发/软件测试速查/测试驱动开发(TDD)
测试基础与分层67 条

测试驱动开发(TDD)

先写失败测试、再写实现让其通过、最后重构:以红-绿-重构循环驱动设计与反馈;Kent Beck 将其总结为三定律。

软件测试速查开发更新于 2026-10-13

测试驱动开发是什么

TDD(Test-Driven Development)以红-绿-重构的短循环驱动开发:先写一个失败测试明确目标(红),再写最少代码让它通过(绿),最后在测试保护下重构(重构)。Kent Beck 在《Test-Driven Development: By Example》中把它总结为三定律。TDD 的测试首先是设计工具——迫使接口在实现前就被想清楚,其次是安全网——重构敢动的前提。

基本信息

循环红(失败测试)→ 绿(最小实现)→ 重构
出处Kent Beck《Test-Driven Development: By Example》
产出细粒度测试与可演进的接口设计
节奏要求每步以秒到分钟计,一次只解决一个问题
边界测试是设计工具与安全网,不替代验收与探索式测试

循环示意

循环示意
1. 写一个失败测试(Red)      # 明确期望行为与接口
2. 写最少代码让它通过(Green)# 不提前实现未要求的逻辑
3. 在测试保护下重构(Refactor)# 改善结构,测试保持绿
4. 重复

典型使用场景

  • 核心算法与领域逻辑:复杂分支用测试先行把边界想清楚。
  • 缺陷修复:先写复现缺陷的测试,再修到绿,防止回归。
  • 接口设计:用调用方的视角先写测试,接口自然好用。
  • 重构前建网:为待改造模块补测试,重构不慌。
  • 新人练习:用小题目体会红绿节奏与「最小实现」纪律。
  • 结对编程:一人写测试一人写实现,循环互换。
TDD 的测试是设计工具与安全网,不能替代验收测试与探索式测试。
「最小实现」纪律是核心:绿灯阶段只写让测试通过的最少代码,贪多会把设计讨论带回实现细节里。
修复缺陷时 TDD 的形态是「先红后绿」:能复现缺陷的测试先写出来,修复后它转绿,从此锁住这类回归。
节奏感来自纪律:每一步都保持全部测试为绿再进入下一轮,长时间红着的状态会让安全网失去意义。

易错点

  • 一次写大量测试再补实现:失去 TDD 的反馈节奏,测试与实现一起堆成大变更。
  • 把 TDD 强推到 UI 层与探索阶段:收益与成本不匹配,节奏感被工具拖垮。
  • 测试只测实现细节:重构时大批失败,TDD 变成改造成本而不是安全网。
  • 跳过重构阶段:代码在绿灯后就此固化,设计债长期累积。
  • 用覆盖率考核 TDD:先行的测试应该少而准,凑数量背离了方法的本意。

数据来源与参考

  • Kent Beck《Test-Driven Development: By Example》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌