开发与工程 tddtestingworkflowsuperpowers

Test-Driven Development(测试驱动开发)

铁律:没有先写失败测试就不能写生产代码,写了也要删掉重来,不允许「补测试」

FollowSkills 评估 · FSRS-1.0
谨慎使用
70/ 100
价值适配18 / 20

该技能明确面向新功能、缺陷修复、重构和行为变更,提供可复用的 RED-GREEN-REFACTOR 流程、测试质量标准和调试回归方法,对软件开发代理具有直接任务价值。边界也有说明,包括原型、生成代码和配置文件需询问人类伙伴,但“始终使用”仍可能不适合所有项目或测试成本场景。

可靠性15 / 20

流程步骤清晰且可重复:先写单一失败测试、确认失败原因、实现最小代码、确认全部测试通过、再重构。包含对测试错误、立即通过、其他测试失败和复杂 mock 的处理建议。证据缺口是依赖具体测试框架、项目命令和运行环境,主要示例使用 npm test、TypeScript、Jest/Vitest 风格,未提供跨语言或命令适配规则,也没有该技能自身的执行结果。

安全性16 / 25

技能不要求网络访问、凭据、敏感数据或高权限工具,主要影响代码和测试流程,未发现恶意行为、隐蔽外传或凭据窃取。风险在于“代码先于测试就删除”“删除意味着删除”的强制指令可能造成未提交工作丢失;未说明备份、版本控制确认、恢复步骤或用户再次确认,因此对可逆性和最小破坏性的保障不足。

证据9 / 15

SKILL.md 提供了流程图、命令示例、正反测试示例、检查清单、反模式表和失败处理建议,能支持方法论主张。仓库 README 提到技能行为测试使用 drill eval harness,但提供的材料没有展示该选定技能的测试结果、覆盖范围或独立复核;示例和“更快、更可靠”等效果主张缺少量化数据,事实与推断未完全分离。

易用性7 / 10

触发条件、核心输入(待实现行为或缺陷)和完成标准较明确,结构适合代理逐步执行,并提供“卡住时”的解决表。缺口包括未说明不同语言、测试运行器、单元测试与集成测试的选择,npm test 命令并非通用;也未明确测试耗时、资源成本、无法运行测试时的退出条件或如何向用户报告阻塞。

维护性5 / 10

选定技能有名称和描述,仓库材料提供 MIT 许可、版本 6.1.1、修订版本和 README 中的更新及问题反馈渠道。未验证发布者身份,不能给予官方治理加分;技能文件自身没有版本、变更记录、负责人、兼容性矩阵或明确的更新责任和响应 SLA,因此维护可追溯性有限。

证据充分度: 评估于 2026年7月15日 审查版本 d884ae04edeb
使用前请注意
  • 不要在未确认工作已提交、可恢复或经用户明确同意的情况下执行“删除先写代码”的规则;优先保留补丁、使用版本控制或创建恢复点。
  • npm test、TypeScript 和特定 mock 约定不是通用接口;部署到其他语言、测试框架或无法运行测试的环境前,应补充适配和退出策略。
  • README 对评估框架的描述不能替代该选定技能的实际测试结果;本评估未执行测试,不能把仓库测试基础设施视为独立验证。
查看完整评分方法 →

它能做什么 & 适用场景

标准 RED-GREEN-REFACTOR 循环的严格版本,核心是「没有失败测试就不能写代码」这条铁律,并且明确规定如果真的先写了代码,唯一允许的处理方式是删掉重新开始——不能留着当参考、不能一边补测试一边偷看已写的实现。文档花了大量篇幅逐条反驳「补测试也一样」「我已经手动测过了」「删掉重写太浪费」这类常见借口,逐条说明为什么补测试不等于先写测试。

RED:写一个测试,说明期望行为,要求单一职责、命名清晰、尽量用真实代码而非 mock;验证 RED:跑一次确认测试确实失败,而且是因为功能缺失而不是拼写错误等无关原因;GREEN:写刚好能让测试通过的最简代码,不允许顺手加额外功能或参数;验证 GREEN:跑测试确认通过且没有连带破坏其他测试、输出干净无警告;REFACTOR:只在测试全绿之后做清理(去重复、改名字、抽取辅助函数),过程中保持测试始终为绿。附带一份「测试反模式」参考文档,讲如何避免测 mock 行为而不是测真实行为、往生产类里加仅测试用的方法等常见坑。

  1. 实现任何新功能或修 bug 前,先写一个描述期望行为的失败测试,跑一次确认它真的失败
  2. 已经手写了一段实现代码,按流程要求删掉、从测试开始重新做,而不是回头补测试
  3. 修复 bug 时先写一个复现该 bug 的失败测试,再按 RED-GREEN-REFACTOR 循环修复,同时预防未来回归

优缺点一览

优点
  • 对「测试写在代码之后是否算 TDD」这个团队里常有分歧的问题给出了明确且有论据的立场(测试后写只能证明「这是什么」,测试先写才能证明「应该是什么」),减少模糊地带
  • 红绿重构三阶段都要求「验证」而不是「假设」,比如明确要求跑测试确认它确实失败、失败原因正确,而不是写完就默认它会失败
  • 反模式参考文档单独拆出来,覆盖了「测 mock 行为」「往生产类塞测试专用方法」等真实常见的测试质量问题
局限
  • 只在会自动读取和遵循 SKILL.md 指令的 harness 里可靠工作(Claude Code、Codex CLI 等);纯聊天式界面里等于一份说明文档,需要人工照做。
  • 「必须删除已写代码重新开始」的要求非常严格,对已经写了大段代码、只是缺测试的场景,执行成本不低,需要团队认同这种严格程度才适合采用
  • 对探索性原型、一次性脚本等场景,SKILL.md 本身也承认需要跟人协商例外,不是无条件适用

如何安装

作为 obra/superpowers 插件的一部分安装,不能单独安装某一个 skill:

  1. Claude Code:官方市场 /plugin install superpowers@claude-plugins-official;或先注册 Superpowers 自建市场 /plugin marketplace add obra/superpowers-marketplace,再 /plugin install superpowers@superpowers-marketplace
  2. 也支持 Antigravity、Codex App/CLI、Cursor、Factory Droid、GitHub Copilot CLI、Kimi Code、OpenCode、Pi 等 harness,具体命令见仓库 README

装好后这个 skill 会和其余 13 个 Superpowers skill 一起启用,由 using-superpowers 统一引导、按场景自动触发,无需单独调用。

如何使用

在实现任何功能或修复任何 bug、写生产代码之前自动触发;systematic-debugging 的 Phase 4(实施修复)明确要求调用这个 skill 来写复现测试。

对比同类

跟「写完代码再补测试」这种常见但更宽松的实践相比,这个 skill 的立场更接近经典 Kent Beck 式 TDD 的严格版本,牺牲了一些灵活性换取「测试真的验证过需求」的确定性;跟不写测试直接交付相比,价值不言而喻,取舍主要在于「是否接受删除重写已完成代码」这条硬性要求。

常见问题

如果我已经手动测试过所有边界情况了呢?
SKILL.md 的立场是手动测试是一次性的、没有记录、代码变了没法重跑;自动化测试才能保证「同样的方式每次都跑一遍」,这是两者本质的区别,不能互相替代。

同仓库的其他 Skills

均来自 obra/superpowers

开发与工程

Brainstorming(需求澄清与设计)

写代码前先把需求逼问清楚,禁止在没有确认设计前直接动手实现

开发与工程

Verification Before Completion(完成前必须验证)

没有当次运行过的验证证据,就不能说「完成了」「测试通过了」——包括「应该」「看起来」这类措辞

开发与工程

Finishing a Development Branch(收尾开发分支)

开发完成后先验证测试通过,再用固定的 4 选项菜单让人决定合并/PR/保留/丢弃,并按规则清理 worktree

开发与工程

Receiving Code Review(接收代码评审反馈)

禁止「你说得对!」式的表演性附和,要求先核实反馈再决定实施还是据理反驳

开发与工程

Requesting Code Review(发起代码评审)

派一个独立上下文的评审子代理来审查改动,而不是让主会话自己一边写一边给自己打分

开发与工程

Systematic Debugging(系统化调试)

任何 bug 都必须先完成根因排查再提修复方案,明确禁止「先随手改一下试试」

开发与工程

Writing Plans(撰写实现计划)

把需求拆成假设执行者对代码库一无所知也能照做的、每步 2-5 分钟的具体任务,杜绝「TBD」「补充细节」类占位符

开发与工程

Subagent-Driven Development(子代理驱动开发)

同一会话内为每个任务派发全新子代理实现,配两阶段审查,用进度台账防止压缩后重复劳动

开发与工程

Executing Plans(分会话执行实现计划)

在没有子代理能力的场景下,按人工检查点批量执行一份已写好的实现计划

开发与工程

Using Git Worktrees(隔离工作区管理)

开始新功能开发前,优先用平台原生隔离工具,没有的话再退回手动 git worktree

开发与工程

Dispatching Parallel Agents(并行子代理调度)

面对多个互不依赖的问题时,一次性并行派发多个子代理分别处理,而不是串行排队

开发与工程

Writing Skills(撰写与测试 Skill 本身)

把 TDD 的红绿重构套用到「写 Skill 文档」这件事上:先用无 skill 基线测试暴露真实失败模式,再针对性写文档,而不是凭直觉写

开发与工程

Using Superpowers(Superpowers 入口引导)

整套 Superpowers 方法论的启动引导 skill,规定「只要有 1% 可能相关就必须调用对应 skill」

相关 Skills