评分明细
适用场景
obra-test-driven-development 快速入门
强制 AI 走测试驱动开发,杜绝”先写代码后补测试”的借口。
这是什么?解决什么问题?
软件开发圈有一句老话:“测试驱动开发(TDD)是写出好代码的捷径”。但现实是,绝大多数开发者(包括 AI)在写代码时都跳过测试,理由五花八门:“时间紧”、“测试不好写”、“业务逻辑复杂,先看看能不能跑通”。
obra-test-driven-development Skill 强制 AI 走 TDD 流程:先写失败的测试(Red),写最少代码让它通过(Green),再重构(Refactor)。它还内置了几个重要原则:
- 测试金字塔 80/15/5:80% 单元测试、15% 集成测试、5% E2E 测试
- Beyonce 规则:“If you like it, you should put a test on it”——你写一行代码,就给它写一个测试
- DAMP 优于 DRY:测试代码里,描述性(Descriptive)比简洁性更重要,可以重复,不要过度抽象
这个 Skill 不是教你 TDD 理论,而是把这个流程编进 AI 的工作流,让 AI 没办法跳过测试。
准备工作
- Python 3.10+/Node.js 18+ 等主流语言环境
- 至少一种测试框架:pytest(Jest、Go test、Rust cargo test 都可)
- 支持 Skill 的 AI 客户端
- 一个待开发的小功能或待修复的 Bug
- 至少 1 小时学习时间
3 步快速上手
第 1 步:克隆仓库并查看 Skill
git clone https://github.com/addyosmani/agent-skills.git<br>
cd agent-skills<br>
ls skills/test-driven-development/<br>
```<br>
你会看到 `SKILL.md`、示例代码、测试模板。<br>
### 第 2 步:加载 Skill<br>
```bash<br>
claude --skill obra-test-driven-development<br>
```<br>
启动后告诉 AI:
> "我想给购物车功能加一个'满 100 减 20'的折扣规则,严格走 TDD。"
### 第 3 步:观察 AI 走 Red-Green-Refactor
AI 会按流程工作:
=== RED 阶段 ===
让我先写一个失败的测试,定义期望行为:
def test_calculate_total_with_discount():
cart = ShoppingCart()
cart.add(Item(price=100))
assert cart.calculate_total() == 80 # 满100减20
运行 pytest: FAIL (因为 calculate_total 还没实现)
=== GREEN 阶段 ===
写最少代码让它通过:
def calculate_total(self):
if sum(item.price for item in self.items) >= 100:
return sum(item.price for item in self.items) - 20
return sum(item.price for item in self.items)
运行 pytest: PASS
=== REFACTOR 阶段 ===
代码太丑,重构一下:
def calculate_total(self):
subtotal = sum(item.price for item in self.items)
return subtotal - self._calculate_discount(subtotal)
def _calculate_discount(self, subtotal):
return 20 if subtotal >= 100 else 0
运行 pytest: PASS
整个流程跑下来,你的功能不仅可用,还有 100% 测试覆盖。
## 常见踩坑
1. **测试和实现同时写**:这是 TDD 的常见反模式。Skill 强制先测试后代码,但人写的时候容易偷懒。
2. **测试粒度过大**:一个测试覆盖 5 个分支,失败时不知道哪个出问题。要每个分支一个测试。
3. **测试里写逻辑**:`if/else` 出现在测试里,会让测试本身有 Bug。测试应该只描述输入输出。
4. **忽视测试金字塔**:全写 E2E 测试,跑一次要 10 分钟,反馈循环太长。Skill 会强制 80/15/5 比例。
5. **重构时跳过测试**:重构后必须跑测试,不能凭眼睛看代码就觉得对了。
6. **过度 mock**:mock 了一切外部依赖,导致测试和真实环境差异巨大,集成测试一定要做。
## 初级用法
- **新功能开发**:每个新功能都让 AI 走 TDD,产出代码时必然带着测试。
- **Bug 修复**:先写一个能复现 Bug 的测试(必然失败),再修代码,再跑测试通过。这是修 Bug 的金标准。
- **代码重构**:先保证现有测试覆盖,再让 AI 重构,如果有测试遗漏的行为,会被立刻发现。
## 高级玩法
- **覆盖率门槛**:在 Skill 配置里设置 80% 覆盖率门槛,CI 不到 80% 直接 fail。
- **Mutation Testing**:用 `mutmut` 或 `Stryker` 测试你的测试——故意改坏代码,看测试能不能抓到。
- **Property-Based Testing**:Skill 支持 hypothesis(Erlang QuickCheck 风格),让 AI 自动生成边界用例。
## 小技巧
- TDD 的反馈循环要快:每改一处就立刻跑测试,不要攒一堆再跑。
- 测试名要描述"行为"而不是"实现":`test_calculate_total_with_discount` 比 `test_total_method` 好。
- 一个测试只测一件事,失败时你立刻知道问题在哪。
- 不要测试 private 方法:private 是实现细节,公开行为变了再改测试。
- 重构时记得用 IDE 的 rename、extract 等自动化操作,不要手动改字符串。
## 常见问题 FAQ
**Q1: 这个 Skill 跟 obra-test-driven-development 有什么关系?必须装吗?**
A: Skill 是给 AI Agent 用的"技能包",能告诉 Agent 怎么按特定规范工作。**不是必须装**——如果你的项目规模小、要求不高,不装也能用。但装上能让 Agent 输出的质量更高、更符合最佳实践,推荐装。
**Q2: 这个 Skill 适合哪些 AI Agent?Cursor?Claude Code?其他?**
A: obra-test-driven-development 来自 Obra,主要面向支持 Skill 机制的 Agent。常见兼容 Agent 包括 Claude Code、Cursor、OpenCode、Windsurf 等。具体兼容性请查 Skill 官方文档。
**Q3: 装了这个 Skill 后,会拖慢 Agent 响应吗?**
A: 会的——Skill 通常会增加 prompt 长度,导致响应变慢、token 消耗增加。但质量提升明显。建议:1) 只装项目必需的 Skill;2) 用 Skill 启动/加载/卸载机制按需加载;3) 定期清理不用的 Skill。
**Q4: 怎么验证 Skill 装对了?**
A: 在 Agent 中输入"列出已加载的 Skill"或类似命令。如果 Skill 出现在列表里,说明装对了。然后用 Skill 跑一个相关任务,看输出是否符合 Skill 规范。
**Q5: 这个 Skill 有许可证吗?能商用吗?**
A: 取决于 obra-test-driven-development 的许可证。常见许可证包括 MIT(完全自由)、Apache-2.0(自由但有专利条款)、源可用(可看不能用)、GPL(强开源)。商用前请查仓库 LICENSE 文件。
test-driven-development Skill 多维度简评
来源:obra/superpowers 类别:测试工具 / TDD 强制
一、核心定位与价值
这是 superpowers 的核心纪律——很多 AI 跳过”写测试”这一步,test-driven-development Skill 用强制状态机让 AI 没办法跳过。
二、核心机制:TDD 循环
🔴 RED: 写失败测试 → 验证失败正确
🟢 GREEN: 写最小代码 → 验证全部通过
🔵 REFACTOR: 清洁重构 → 验证仍然通过
↓
下一个测试
铁律:
在失败的测试之前,不写生产代码。
为什么”强制”?
普通 Prompt 的问题:
你说”请用 TDD 方式开发”,AI 点头称是,然后依然直接写实现。
superpowers 的做法:
把流程编码在 Skill 的状态机里——AI 必须按顺序走:
- 不写失败测试 → 不能写实现代码
- 实现代码后必须看到测试变绿
- 红-绿-重构必须完整循环
红线规则:如果发生以下任何情况,删除代码,用 TDD 重新开始:
- 在测试之前写了代码
- 实现之后才加测试
- 测试立即通过(说明测试没真正测试什么)
- 无法解释为什么测试失败
- “以后再加测试”
- 合理化”就这一次”
三、3 阶段实战详解
🔴 RED:写失败测试
做什么:写一个会失败的测试,验证它失败得正确。
示例:
// test/calculator.test.ts
import { add } from '../src/calculator'
describe('add', () => {
it('adds two positive numbers', () => {
expect(add(2, 3)).toBe(5) // ❌ 失败:add 还没实现
})
})
验证失败正确:
FAIL: add adds two positive numbers
Error: add is not a function
✅ 正确:失败原因是”函数不存在”,不是语法错误或其他问题。
🟢 GREEN:写最小代码
做什么:写最小的代码让测试通过。
示例:
// src/calculator.ts
export function add(a: number, b: number): number {
return a + b
}
不要过度:
// ❌ 错误:写了 100 行实现,但测试只覆盖了 + 操作
export function add(a: number, b: number): number {
// 100 行复杂逻辑...
}
TDD 原则:只写让测试通过的最小代码。
🔵 REFACTOR:清洁重构
做什么:在测试通过的前提下,改进代码质量。
重构原则:永远不要在重构时改变行为。
四、3 个测试反模式(Anti-patterns)
❌ 反模式 1:测试实现细节
// ❌ 测试了私有方法
expect(calculator._add).toBe(5)
// ✅ 测试公开行为
expect(calculator.add(2, 3)).toBe(5)
❌ 反模式 2:测试间共享状态
// ❌ 全局变量
let user: User
beforeAll(() => { user = createUser() })
// ✅ 每个测试独立
beforeEach(() => { user = createUser() })
❌ 反模式 3:测试名不清晰
// ❌
it('test 1', () => { ... })
it('works', () => { ... })
// ✅
it('returns 5 when adding 2 and 3', () => { ... })
it('throws error when input is negative', () => { ... })
五、5 条反合理化(Anti-rationalization)
| 借口 | 反驳 |
|---|---|
| ”这代码太简单,不用测” | 简单代码也会引入 bug,TDD 不挑难度 |
| ”我之后再补测试” | TDD 反对这种”之后”,现在必须 |
| ”测试代码不是生产代码” | 测试代码同样是工程资产 |
| ”写测试浪费时间” | 调试浪费时间,写测试节省更多 |
| ”这是原型代码” | 原型也会变生产,提前测试 |
六、与其他 Skill 配合
test-driven-development 是 superpowers 工作流的第 5 步:
brainstorming(设计)
↓
writing-plans(计划)→ TDD 是计划中的核心环节
↓
subagent-driven-development(执行)
↓
test-driven-development(TDD)
↓
requesting-code-review(审查)
每个任务都必须走完整 TDD 循环。
七、安装
# superpowers 套装
/plugin install superpowers@claude-plugins-official
# 单独使用
npx skills add obra/superpowers --skill test-driven-development
八、6 条实战建议
- 不要跳步:每个循环都要完整 RED-GREEN-REFACTOR
- 测试名要清晰:能看出测试什么场景
- 不要测实现细节:只测公开行为
- 不要共享状态:每个测试独立
- 覆盖率不是目标:质量才是
- Bug 修复也是 TDD:先复现成测试,再修
九、常见 Q&A
Q: 100% 覆盖率必须吗? A: 不是目标。重要业务逻辑要 100%,UI/工具函数可以适度。
Q: 测试越多越好? A: 不是。重复测试、无效测试反而拖累。
Q: 重构时要不要改测试? A: 重构保持行为不变时,测试不需要改。如果改了,说明行为变了,需要重新审视。
Q: 性能测试怎么办? A: 性能测试不是 TDD 的目标,用专门的 benchmark。
Q: TDD 适合 UI 代码吗? A: 适合。用 React Testing Library 测试组件行为。
十、总结
test-driven-development Skill 是 AI 编程从”写代码”到”做工程”的关键纪律。
核心价值:
- 强制红绿重构循环
- 防止 AI 跳过测试
- 提高代码质量
适用人群:
- ✅ 严肃工程项目
- ✅ 团队规范化
- ✅ 长期维护项目
本文基于官方文档和公开资料整理,未经过 MagicNetWorld 实测。
参考资料
- obra/superpowers 官方仓库 — GitHub 官方仓库
- test-driven-development SKILL.md 源码 — 官方 Skill 定义
- Simon Willison: Red/green TDD — Agent 工程模式指南
- OpenCodeDocs: TDD Workflow 教程 — TDD 工作流详解
- b-lab.team: Superpowers 深度解析 — 方法论分析
📊 评分与标签
评分说明
总分 9.6/10 · P_优选
📊 可观测社区指标(数据核验日期:2026-07-07)
- GitHub: addyosmani/agent-skills ★71.6k
- License: MIT · LICENSE
- Commits: 308 · Forks: 7.7k · Issues: 55 · PRs: 88
- 官方描述: 红-绿-重构流程,测试金字塔 80/15/5,Beyonce 规则,让 AI 写带测试的代码
📦 可安装性 2.5/2.5
git clone后cp -r到技能目录即可使用,零编译零 API Key- 支持 Claude Code、Cursor、Codex、OpenCode、Gemini 等多平台安装
- 来源:安装文档
- 竞品对比 1:trailofbits/skills 需手动挑选单个 Skill,test-driven-development 随 agent-skills 套件一键安装
- 竞品对比 2:anthropics/skills 通过官方 Skills API 装载,集成方式不同但门槛类似
🎯 实用性 2.5/2.5
- 强制 Red-Green-Refactor 流程:先写失败的测试(Red),写最少代码通过(Green),再重构(Refactor)
- 来源:SKILL.md
- 内置测试金字塔 80/15/5:80% 单元测试、15% 集成测试、5% E2E 测试,AI 自动按比例生成
- Beyonce 规则:“If you like it, you should put a test on it”——写一行代码就必须写一个测试
- DAMP 优于 DRY:测试代码中描述性比简洁性更重要
- 竞品对比 1:writing-plans 偏任务拆解,test-driven-development 解决的是”代码是否正确”问题
- 竞品对比 2:systematic-debugging 偏事后调试,test-driven-development 做事前预防
📖 文档质量 1.8/2.0
- Addy Osmani(Google Chrome 工程总监)官方维护,README 完善含安装和使用说明
- Skill 目录附独立 SKILL.md 描述触发条件、TDD 流程和测试策略
- 仓库含完整的 skill evals 评估框架(three-tier eval framework)
- 竞品对比 1:anthropics/skills 文档架构类似但侧重产品化教程
- 竞品对比 2:obra/superpowers 文档风格偏工程方法论,addyosmani 偏前端工程实践
👥 社区活跃 1.5/1.5
- GitHub ★71.6k(agent-skills 仓库整体),308 Commits,7.7k Forks
- 社区规模极大,由 Google Chrome 工程总监 Addy Osmani 维护,更新频率极高(11 小时前最新 commit)
- 来源:Commits
- 竞品对比 1:trailofbits/skills ★6k,社区体量约为本仓库 1/12
- 竞品对比 2:obra/superpowers ★248k,社区规模更大但偏全栈方法论
🔗 兼容性 1.3/1.5
- MIT 许可完全自由商用
- 来源:LICENSE
- 兼容 Claude Code、Cursor、Codex、OpenCode、Gemini 等主流 Agent
- 来源:README 兼容性说明
- 与其他 agent-skills 子 Skill 无缝联动
- 来源:Skills 目录
- 竞品对比 1:trailofbits/skills CC-BY-SA-4.0 有传染性要求,MIT 更宽松
- 竞品对比 2:anthropics/skills Apache-2.0,专利条款对企业更友好
评分依据可追溯至公开来源,每项分数均有明确理由和数据支撑。
🏷️ 标签说明
- 免费: MIT 开源,仓库全部内容免费获取与商用。来源:addyosmani/agent-skills
- Skill系统: agent-skills 提供完整的 Skill 管理和分发系统。来源:agent-skills 描述
- 测试: 强制 TDD 流程,提供 AI 辅助的测试用例生成和质量保障。来源:test-driven-development SKILL.md
📋 来源与核验记录
- ✅ 已直接验证:addyosmani/agent-skills 仓库(Star 数、Commits 数、Forks 数来自实时抓取)
- ⚠️ 未直接验证:test-driven-development SKILL.md
- ❌ 已删除死链:无