← 返回信息流
AI 资讯Hacker News·1 天前

利用智能体技能实现测试驱动开发

原标题:My Agent Skill for Test-Driven Development

速览

本文探讨了将智能体技能应用于测试驱动开发(TDD)的方法。通过自动化测试生成与验证,提升开发效率与代码质量。该实践有助于开发者更流畅地集成测试环节。

AI 深度解读

我的 Agent 测试驱动开发(TDD)技能:让 AI 写出好测试

背景

截至本文撰写时,AI Agent(智能体)在编写测试代码方面表现普遍不佳。它们生成的测试往往含糊不清、晦涩难懂、过度复杂、充满黑客式的投机取巧、杂乱无章、同义反复、流于形式,甚至完全毫无意义。

造成这一现状的根本原因在于,当前的 AI Agent 是通过人类编写的示例进行训练的,而人类编写的测试示例本身质量往往堪忧。不仅“业余”开发者编写的测试质量低下,令人遗憾的是,许多教师或专家所推崇的测试实践也常常存在严重缺陷。这种环境使得 AI 难以从高质量的人类范例中学习到优秀的测试编写习惯。

作者认为,指望未经指导的 Agent 在短期内显著提升测试编写能力是不现实的。然而,好消息是,如果给予适当的引导,Agent 完全有能力遵循理性的测试驱动开发(TDD)流程,并编写出清晰、有意义的测试。

核心内容

作者分享了一套个人化的 TDD 技能(Skill),旨在通过明确的指令引导 AI Agent 遵循经典的 TDD 原则。这套技能并非完全原创,而是基于 Kent Beck 的“标准 TDD”(Canon TDD)进行了简化和适配。

1. 核心方法论:SEF 循环

作者提出了一种个人化的 TDD 高层视图,称为 Specify-Encode-Fulfill (SEF) 循环,作为对传统“红-绿-重构”(Red-Green-Refactor)的替代或补充:

  • Specify(指定):明确你要构建的功能规格说明。
  • Encode(编码):将这些规格说明编码为自动化测试(即可执行的规格说明)。
  • Fulfill(履行):编写代码以满足这些规格说明。

2. 具体执行步骤:Kent Beck 的标准 TDD

在 SEF 的高层视图之下,作者将 Kent Beck 的标准 TDD 原则转化为以下具体步骤,并内置到 Agent 的技能指令中:

  1. 列出规格:列出当前 TDD 会话范围内的所有规格说明。
  2. 编码测试:将列表中的每一项编码为自动化测试。
  3. 最小化修改:仅对代码进行极微小的修改,以消除当前测试的失败。
    • 避免“推测性编码”(Speculative Coding):如果编写的代码超过了使当前测试通过所需的量,风险在于这部分代码永远不会被任何测试覆盖。
  4. 可选的重构:可以选择进行重构,但必须在提交行为更改之后进行。
    • 严禁混合操作:永远不要将行为更改与重构混在一起进行。
  5. 循环:只要列表不为空,就返回第 2 步。

3. 测试设计审查(Test Design Review)

上述流程主要关注 TDD 的过程,对测试本身的设计影响有限。因此,作者引入了另一个独立的技能:Test Design Review

  • 机制:该技能会生成一个独立的 Agent(以避免偏见),专门检查测试是否违反了设计原则。
  • 常见问题:例如,测试过于关注“手段”而非“目的”。
  • 作用:提供修复建议。虽然有时建议可能值得商榷,但大多数情况下是切中要害的。当作者对 Agent 编写的测试不满意时,会运行此技能让 Agent 自我纠错。

4. 通用设计审查与“清理厨房”

许多测试设计违规实际上是通用软件设计原则的违规,例如“按事物的本质命名”原则。作者建议将测试同时通过 Software Design Review 技能进行审查。

此外,作者在 TDD 技能中加入了一条非强制性的指令:如果编写预期的测试变得困难,这可能是一个信号,表明我们需要“在做晚饭之前先清理厨房”(即重构现有代码以使其更易于测试)。

  • 意外惊喜:尽管作者并未强烈期望此指令会被严格执行,但 Claude 模型对此理解深刻。它经常暂停并询问是否应该“清理厨房”,而且事实证明,这种暂停往往是必要的且有益的。

5. 现状与结论

作者承认,Agent 目前还不能 100% 地写出可接受的测试,但这套 TDD 技能已经足够有效,以至于它已成为作者进行任何代码变更的默认方式。

作者认为,AI 带来的最大生产力提升,来自于将 AI 与几十年前发现、至今依然适用、且无论新技术如何发展都永不过时的永恒不变的原则相结合。

关键要点

  • AI 测试编写的痛点:当前 AI 生成的测试普遍存在模糊、复杂、无意义等问题,根源在于训练数据(人类编写的测试)质量参差不齐。
  • SEF 循环:作者提出的高层 TDD 框架为 Specify-Encode-Fulfill(指定-编码-履行),替代传统的红-绿-重构概念。
  • 标准 TDD 的细化:核心在于“最小化代码修改”以通过测试,严格禁止“推测性编码”,并严格区分“行为更改”与“重构”两个阶段。
  • 双重审查机制
    1. Test Design Review:专门针对测试设计原则进行独立审查,帮助 Agent 自我纠错。
    2. Software Design Review:针对通用软件设计原则(如命名规范)进行审查。
  • “清理厨房”原则:当测试难以编写时,应暂停并重构现有代码。AI(特别是 Claude)对此指令有较好的响应能力。
  • 永恒原则的价值:AI 生产力的最大化并非来自追逐新技术,而是将 AI 能力与经过时间考验的、不变的软件工程原则(如 TDD)相结合。

意义与影响

这篇文章揭示了当前 AI 辅助编程中的一个关键瓶颈:AI 擅长生成代码,但往往缺乏对“可测试性”和“设计质量”的深刻理解,这主要归因于其训练数据中人类示例的质量缺陷。

作者提出的解决方案具有极高的实用价值:

  1. 提示工程的具体化:通过提供结构化的、基于经典原则(Kent Beck TDD)的“技能”指令,可以显著改善 AI 的输出质量。这表明,针对 AI 的提示工程不应仅停留在通用描述,而应嵌入具体的、经过验证的工程方法论。
  2. 人机协作的新模式:作者并未完全依赖 AI 的自主性,而是引入了“独立 Agent 审查”和“自我纠错”机制。这种“生成-审查-修正”的闭环是提升 AI 代码质量的有效路径。
  3. 回归工程本质:文章强调“清理厨房”(重构)的重要性,并指出 AI 能够理解并执行这一抽象概念。这证明了即使是最具创新性的 AI 技术,其效能的释放依然依赖于对传统软件工程核心原则的坚守。

对于开发者而言,这意味着在使用 AI 进行 TDD 时,不能仅仅依赖 AI 的直觉,而必须通过明确的指令框架(如 SEF 循环)和额外的审查步骤来约束和引导 AI,从而获得高质量、可维护的代码。

查看原文 →saturnci.com