Agent工坊

【Agent工坊】TDD Agent Skill:用测试驱动开发根治AI代码质量问题

6月初的HN热榜上,一篇"Did Claude increase bugs in rsync?"引爆开发者社区(391 points,398条评论)。同一天,另一篇167 points的文章给出了答案——"My Agent Skill for TDD"。本文拆解4步闭环工作流,给出可直接复制到 Claude Code / Hermes Agent / Cursor 的完整 Skill 模板。


AI 代码质量问题的根源

很多人看到 AI 生成的代码有 bug,第一反应是"AI 不行"。但真正的问题是:

  • 速度诱惑:AI 10秒生成一个函数,开发者5秒扫一眼就合入——测试被跳过了
  • 信任过载:"Claude 写的代码一般没问题"——这种心态是 bug 的温床
  • 上下文盲区:AI 只看到你给它的代码片段,看不到整个系统的边界条件和副作用
  • 缺乏反馈循环:没有自动化测试,每次修改都是盲飞

一条 HN 高赞评论精准总结了这点:"Claude is just a tool. The developers who merged that code and didn't properly test increased the bugs."

所以解法不是"少用 AI"——那是开倒车。解法是把测试融入 AI 工作流,让质量检查自动化。


TDD Agent Skill 的核心设计

传统 TDD 三步:Red(写失败测试)→ Green(写代码通过测试)→ Refactor(重构)。对于 AI Agent,我们把它适配为 4 步循环:

Step 1 - 写测试(人工或半人工): 你描述需求,AI 帮你生成测试用例。但测试的逻辑和边界条件由你确认——这是质量的锚点。

Step 2 - AI 生成代码: 将测试文件作为上下文传给 AI,明确要求"请生成通过以下测试的代码"。AI 有了明确的目标函数,幻觉大幅降低。

Step 3 - 自动运行测试: 代码生成后立即执行测试套件。失败了?把失败信息反馈给 AI,让它修复。这个循环自动进行,直到通过或达到最大迭代次数。

Step 4 - 人工 Review + 合入: 全部测试通过后,你只需要做一次最终的代码审查——关注架构和可读性,不需要逐行检查逻辑正确性(测试已经替你做了)。


Skill 文件:tdd-workflow.md

# TDD Workflow Skill

## 触发条件
当用户请求生成代码、实现功能、修复 bug 时自动激活。

## 核心规则
1. **先测试,后代码**:任何代码生成前,必须先确认测试用例存在
2. **红-绿-重构**:严格遵循 Red → Green → Refactor 循环
3. **失败即反馈**:测试失败时,将失败信息作为上下文传给 AI 修复
4. **覆盖率门禁**:新代码的测试覆盖率必须 ≥ 80%

## 工作流程

### Phase 1: 生成测试
- 分析用户需求,确定需要测试的函数/模块
- 生成测试用例(包含正常输入、边界值、异常情况)
- 让用户确认测试逻辑后再进入下一阶段

### Phase 2: 生成代码
- 将测试文件作为必须通过的约束条件
- 生成最小可行的实现代码
- 不要过度设计——只写通过测试所需的代码

### Phase 3: 验证循环
- 立即运行测试套件
- 如果失败:分析失败原因 → 修复代码 → 重新运行
- 最多迭代 5 轮,超过则请求人工介入

### Phase 4: 重构
- 测试通过后,检查代码可读性和架构
- 在不改变行为的前提下优化代码结构
- 重构后再次运行测试确保不引入回归

## 输出格式
每次完成工作流后,报告:
- 测试用例数 / 通过数
- 迭代轮数
- 覆盖率百分比
- 关键决策说明

实战演示:价格计算器

你的输入:

实现一个价格计算器:
- 单价 100 元
- 买 10 件以上打 9 折
- 折扣码 "VIP2026" 额外减 20 元
- 两个优惠可以叠加
- 最终价格不能低于 0

Agent Phase 1:生成测试用例(6个)

class TestCalculatePrice:
    def test_no_discount(self):
        assert calculate_price(5, None) == 500
    def test_bulk_discount(self):
        assert calculate_price(15, None) == 1350  # 1500*0.9
    def test_vip_code(self):
        assert calculate_price(5, "VIP2026") == 480  # 500-20
    def test_stacked_discounts(self):
        assert calculate_price(15, "VIP2026") == 1330  # 1500*0.9-20
    def test_invalid_code(self):
        assert calculate_price(5, "INVALID") == 500
    def test_zero_price_floor(self):
        assert calculate_price(1, "VIP2026") == 80  # 100-20

Agent Phase 2:生成实现(一次通过!)

def calculate_price(quantity: int, discount_code: str | None) -> int:
    base = quantity * 100
    if quantity >= 10:
        base = int(base * 0.9)
    if discount_code == "VIP2026":
        base -= 20
    return max(base, 0)

Agent Phase 3:自动运行测试

====== 6 passed in 0.12s ======

6 个测试,一次通过。零迭代修复。整个过程从需求到可用代码不到 3 分钟


跨工具适配

工具 安装方式 使用命令
Claude Code cp tdd-workflow.md ~/.claude/skills/ /tdd 实现用户登录功能
Hermes Agent hermes skill install tdd-workflow 用 tdd-workflow 实现XX功能
Cursor 写入 .cursorrules 自动激活

常见问题

Q: TDD 会不会拖慢开发速度?
A: 短期会——写测试需要 3-5 分钟。但作者实测:首次通过率提升 3.2 倍,平均每功能仅需 2.1 轮迭代

Q: AI 写的测试靠得住吗?
A: 不靠 AI 独立写测试。Phase 1 中 AI 生成测试草稿,你确认逻辑后再进入代码生成。边界条件和预期值必须由人把关。

Q: 老项目没测试怎么办?
A: 不要求 100% 覆盖率起步。对新功能严格 TDD,老代码在修改时补测试。渐进式改善。


行动建议

今天就可以做:
1. 复制 tdd-workflow.md 到你 Agent 的 skills 目录
2. 下一个要实现的功能,先让 AI 生成测试用例,确认后再生成代码
3. 配置 pytest --covvitest --coverage,让覆盖率可见
4. 设定规则:新代码无测试不合入

本周可以规划:
5. 把 TDD Skill 整合到团队 CI/CD 流水线——PR 没有测试自动拒绝
6. 统计引入 TDD 前后的 bug 率变化——用数据说服团队
7. 探索「AI 生成测试 + AI 生成代码 + 自动验证」的全自动流水线

记住那个 rsync 故事的教训:AI 写的代码不会天然有 bug,也不会天然没 bug——质量取决于你放进工作流的检查机制。 TDD 就是那个机制。


AI创业 #Agent工坊 #TDD #AI编程 #代码质量 #ClaudeCode #HermesAgent #一人公司