本节摘要:TDD 在规则密集、输入输出清晰的工作上收益最大,在探索与视觉驱动的工作上性价比最低。本节给出一套适用性判断法:象限图定位、收益账本与成本账本并排算,最后落到一份可直接执行的决策清单。读完你应能为手头任意一个需求选择"用循环、部分用、不用"并说明理由。
别以为学会红绿循环就该处处使用它——把 TDD 当信仰的结果,往往是在探索性代码上强行写测试,测出来的全是不该固化的临时设计,最后连测试一起扔。反过来,在计费、校验、解析这类"规则密集"的代码上跳过 TDD,等于放弃了最便宜的防错手段。适用性判断因此成了 TDD 修行的分水岭:它决定你省时间还是赔时间。
判断一个任务适不适合 TDD,问两个问题就够了。问题一:**输入输出能不能先写下来?**能写下来,说明需求清晰到可以断言,红灯有意义;写不下来,说明你还在探索,先去刺探(spike)再说。问题二:**这段代码会不会活过今天?**会活、会被改,测试就是投资;一次性的胶水脚本,测试是陪葬品。两个问题组合起来,把工作切进四个象限。

象限图有个容易读漏的细节:判断单位是函数级而非项目级。灯塔小组的结算后端整体落在全速循环区,但其中的报表导出函数依赖真实表格引擎,渲染效果只能人眼验收——这一小片就划进缓行区,用原型探明格式后再补数据正确性的测试。
TDD 的收益很难从"测试数量"里看出来,要顺着开发过程的资金流算:
收益不白拿,成本至少三笔。起步减速最直接:写测试比写实现快不了,头几周整体速度下降三成是常见数字,靠缺陷率下降在几周内收回。测试维护是第二笔长期支出:接口每次改动,测试跟着改——这正是第 3 章"替身边界"要解决的问题,替身用对了,维护费能砍半。第三笔是纪律成本:循环转快了才有收益,红灯挂半小时不起、连续转一小时不绿,收益就从省时间变成耗时间。第 2 章的节拍控制专门治这个。
象限图之外还有几块模糊地带,值得给出明确的处置预案。重度依赖第三方的胶水代码:单元测试的性价比极低(全是替身演戏),处置是把业务逻辑抽干净进循环区,剩下的接线交给 5.1 的集成层。数据科学实验代码:模型效果无法断言,但数据清洗、特征构造这些外围函数完全可以循环伺候——把"不确定的部分"外包给实验,把"确定的部分"交给节律。UI 层:像素与交互手感另请高明,但前端的状态管理、校验逻辑是标准的循环区——"前端不能 TDD"多半是拿第三层的困难赖给了第一层(7.4 的 FAQ 展开过)。
抽象账本不如算一笔实账。灯塔小组接过的折扣计算模块,改造前后的对比如下:改造前,该模块半年内累计漏出三个折扣类线上缺陷,每个的平均处置成本(定位、修复、客诉安抚、数据订正)约合人日五天;改造后用循环重写,头两周因写测试整体减速约三成,但此后半年零逃逸,期间还经历了两次大促规则重构——有测试保护的重构每次只花了半天。粗算下来:收益侧免掉约十五个人日的缺陷成本加两次快速重构的可行性,成本侧是头两周的三成减速。这笔账算得粗,但方向从不说谎:规则越值钱、变更越频繁,循环的账越好看。反过来,一次性活动页、纯展示页面算这笔账就是亏的——账本不存在普适结论,存在的是逐模块核算的习惯。
⚠️ 最常见的算错账方式:把"写测试的时间"全部记为成本,却把"少开的排障会、少烧的周末、少赔的客诉"记为运气。账要对称地算。
💡 快速验证法:拿你最近修的一个 bug 做思想实验——如果当时有一条断言锁住那个边界,这个 bug 会不会在写代码的当天就红出来?会,就说明那块代码值得循环伺候。
账本还有一个非货币的条目值得一记:心态成本与心态收益。写不出测试的焦虑、面对遗留代码的恐惧、上线前的整夜值守,都是现状的隐性支出;而"红灯亮了说明我理解对了需求"的踏实感,是循环支付给你的心理工资。长期做工程的人都知道,可持续的速度从来不只是技术问题。
动手前的最后一步,把判断固化成可勾选的清单:
三个问题连过,才轮得到红绿循环上场。下一章开始,我们把这套循环从"最短一轮"扩成完整节律:红灯怎么切需求才不贪多,绿灯怎么守住最小,重构的手法从哪儿挑——那里才是灯塔小组真正开工的地方。
清单之外补一句使用心法:判断要记账。每次判断"适合"或"不适合",在任务卡片上写一行理由——半年后回看这些理由,你会攒出自己团队的适用性手册,比任何通用清单都贴合业务。判断力不是天赋,是判断记录的复利。