TDD 与结对编程

核心观点

TDD 与结对编程通过测试先行、角色协作和短反馈,把任务中的业务与架构知识持续转化为可验证的软件增量。

TDD 先把预期行为写成会失败的测试,再用最小实现使测试通过,最后在测试保护下改善设计。Red–Green–Refactor 的价值不只是增加测试数量,而是让需求理解、任务边界和设计判断在每个小步中接受反馈。

结对编程为这个循环提供两种互补视角:Driver 聚焦当前操作,Navigator 检查意图、设计和下一步。编写测试与编写生产代码时,两种角色可以轮换;关键不是两个人同时操作一台电脑,而是实现始终有人从更高层检查“当前改动是否仍在解决原来的任务”。

自然语言测试列表和测试代码都是知识载体。它们比一次性生成的大段实现更容易暴露对需求的误解,也能向其他成员说明当前实现覆盖了哪些行为。能写出恰当测试,意味着抽象需求已经被拆成可观察的输入、行为和结果。

架构与任务分解提供功能上下文和工作边界,测试工序进一步规定开发、验证与集成的顺序,TDD 与结对编程再在这些边界内形成可工作的产品增量。失败测试若暴露业务规则无法表达、组件职责混乱或任务粒度失控,反馈应返回业务建模或架构与任务分解重新规划,而不是在错误边界内强行实现。

但测试通过只能证明已经表达出来的行为成立,不能单独证明原始业务问题已经解决,因此还需要产品验收把增量放回业务情境观察。

在双向知识流中的位置

  • 消费:任务、验收条件、架构约束和测试工序。
  • 产生:测试、代码、设计判断以及可工作的软件增量。
  • 校验:用测试执行、Navigator 检查和 Red–Green–Refactor 的短反馈暴露偏差。
  • 回流:根据失败性质修正实现、任务、架构、测试策略或业务规则。

知识连接

⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠ You can decompress Drawing data with the command palette: ‘Decompress current Excalidraw file’. For more info check in plugin settings under ‘Saving’

Excalidraw Data

Text Elements

选择一个预期行为

结对完成最小实现

测试与 Navigator 验证

Red → Green → Refactor

选择下一行为,开始新一轮

Embedded Files

5baf58656ed1d13988d78558ecc32f4041152a72: Icon - 结对编程, 驾驶员, 导航员, 协作, pair programming - Own.excalidraw

05f4e3b649b167cb280463c52fc6a3be18ef3b52: Icon - 测试, 聚光灯, 验证, 检查, test spotlight - Own.excalidraw

e035291a41ac49e40af95c090d579318947253a5: Icon - 任务清单, 待办, 分解, 步骤, task list - Own.excalidraw