1.3 什么活儿适合 TDD:适用场景与价值账本


1.3 什么活儿适合 TDD:适用场景与价值账本

本节摘要:TDD 在规则密集、输入输出清晰的工作上收益最大,在探索与视觉驱动的工作上性价比最低。本节给出一套适用性判断法:象限图定位、收益账本与成本账本并排算,最后落到一份可直接执行的决策清单。读完你应能为手头任意一个需求选择"用循环、部分用、不用"并说明理由。

别以为学会红绿循环就该处处使用它——把 TDD 当信仰的结果,往往是在探索性代码上强行写测试,测出来的全是不该固化的临时设计,最后连测试一起扔。反过来,在计费、校验、解析这类"规则密集"的代码上跳过 TDD,等于放弃了最便宜的防错手段。适用性判断因此成了 TDD 修行的分水岭:它决定你省时间还是赔时间。

用两个问题定位

判断一个任务适不适合 TDD,问两个问题就够了。问题一:**输入输出能不能先写下来?**能写下来,说明需求清晰到可以断言,红灯有意义;写不下来,说明你还在探索,先去刺探(spike)再说。问题二:**这段代码会不会活过今天?**会活、会被改,测试就是投资;一次性的胶水脚本,测试是陪葬品。两个问题组合起来,把工作切进四个象限。

图:TDD 适用性象限图

图:TDD 适用性象限图

象限图有个容易读漏的细节:判断单位是函数级而非项目级。灯塔小组的结算后端整体落在全速循环区,但其中的报表导出函数依赖真实表格引擎,渲染效果只能人眼验收——这一小片就划进缓行区,用原型探明格式后再补数据正确性的测试。

收益账本:钱省在哪

TDD 的收益很难从"测试数量"里看出来,要顺着开发过程的资金流算:

  • 调试开销锐减。缺陷在红灯阶段被抓到,定位成本几乎为零——刚写的那几行就是嫌疑人;同样的缺陷漏到集成阶段,定位成本翻几十倍。这条账是 TDD 最硬的收益。
  • 回归保护免费续期。每轮循环都在给存量功能续保险,几个月后的大重构敢下手,靠的就是这几百条绿测试。
  • 设计压力红利。"可测试"倒逼小函数、清晰接口、依赖注入——第 4 章会展开这条因果链,这里先记账。
  • 活文档。测试集就是最诚实的规格说明书,交接和排障时先读测试,比读注释可靠。

成本账本:钱花在哪

收益不白拿,成本至少三笔。起步减速最直接:写测试比写实现快不了,头几周整体速度下降三成是常见数字,靠缺陷率下降在几周内收回。测试维护是第二笔长期支出:接口每次改动,测试跟着改——这正是第 3 章"替身边界"要解决的问题,替身用对了,维护费能砍半。第三笔是纪律成本:循环转快了才有收益,红灯挂半小时不起、连续转一小时不绿,收益就从省时间变成耗时间。第 2 章的节拍控制专门治这个。

边缘地带的三种处置

象限图之外还有几块模糊地带,值得给出明确的处置预案。重度依赖第三方的胶水代码:单元测试的性价比极低(全是替身演戏),处置是把业务逻辑抽干净进循环区,剩下的接线交给 5.1 的集成层。数据科学实验代码:模型效果无法断言,但数据清洗、特征构造这些外围函数完全可以循环伺候——把"不确定的部分"外包给实验,把"确定的部分"交给节律。UI 层:像素与交互手感另请高明,但前端的状态管理、校验逻辑是标准的循环区——"前端不能 TDD"多半是拿第三层的困难赖给了第一层(7.4 的 FAQ 展开过)。

账本实例:一次真实核算

抽象账本不如算一笔实账。灯塔小组接过的折扣计算模块,改造前后的对比如下:改造前,该模块半年内累计漏出三个折扣类线上缺陷,每个的平均处置成本(定位、修复、客诉安抚、数据订正)约合人日五天;改造后用循环重写,头两周因写测试整体减速约三成,但此后半年零逃逸,期间还经历了两次大促规则重构——有测试保护的重构每次只花了半天。粗算下来:收益侧免掉约十五个人日的缺陷成本加两次快速重构的可行性,成本侧是头两周的三成减速。这笔账算得粗,但方向从不说谎:规则越值钱、变更越频繁,循环的账越好看。反过来,一次性活动页、纯展示页面算这笔账就是亏的——账本不存在普适结论,存在的是逐模块核算的习惯。

⚠️ 最常见的算错账方式:把"写测试的时间"全部记为成本,却把"少开的排障会、少烧的周末、少赔的客诉"记为运气。账要对称地算。

💡 快速验证法:拿你最近修的一个 bug 做思想实验——如果当时有一条断言锁住那个边界,这个 bug 会不会在写代码的当天就红出来?会,就说明那块代码值得循环伺候。

账本还有一个非货币的条目值得一记:心态成本与心态收益。写不出测试的焦虑、面对遗留代码的恐惧、上线前的整夜值守,都是现状的隐性支出;而"红灯亮了说明我理解对了需求"的踏实感,是循环支付给你的心理工资。长期做工程的人都知道,可持续的速度从来不只是技术问题。

决策清单

动手前的最后一步,把判断固化成可勾选的清单:

  1. 这段代码的核心行为能用输入输出描述吗?(能 → 继续)
  2. 出错的回归代价高吗——涉及钱、数据、协议或安全吗?(高 → 继续)
  3. 它会存活并被持续修改吗?(会 → 继续)
  4. 验证手段在单元测试射程内吗——不依赖视觉、物理设备或统计显著度吗?(在 → 全速循环)
  5. 任何一条答否 → 降级处理:补关键路径冒烟测试,或先刺探再回头。

三个问题连过,才轮得到红绿循环上场。下一章开始,我们把这套循环从"最短一轮"扩成完整节律:红灯怎么切需求才不贪多,绿灯怎么守住最小,重构的手法从哪儿挑——那里才是灯塔小组真正开工的地方。

清单之外补一句使用心法:判断要记账。每次判断"适合"或"不适合",在任务卡片上写一行理由——半年后回看这些理由,你会攒出自己团队的适用性手册,比任何通用清单都贴合业务。判断力不是天赋,是判断记录的复利。

本节要点回顾

  • 两个定位问题:输入输出能否先写、代码是否会长期存活。
  • 按函数判断,不按项目判断,象限会交叉。
  • 收益主体是调试成本与回归保护,设计红利是副产品但极值钱。
  • 成本主体是起步减速与测试维护,替身用对、节律跑快都能压成本。
  • 适用性判断本身要记账复盘,判断记录的复利就是团队经验。
  • 决策清单五连问,答不满就降级,别硬上。
  • 判断写理由、半年做复盘:适用性判断本身也要靠反馈进化。

作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U