摘要

1) 一句话总结 在AI编程代理的提示词中加入“使用红绿TDD”,能够通过测试先行的开发模式有效提升代码生成质量,并构建健壮的自动化测试套件。

2) 关键要点

  • 在提示词中简短地添加“使用红绿TDD(Use red/green TDD)”即可获得更好的代码生成结果。
  • TDD(测试驱动开发)的核心是确保编写的每段代码都有配套的自动化测试。
  • “测试先行”要求先编写测试并确认其失败,再迭代编写实现代码直至测试通过。
  • “红”代表观察测试失败阶段,“绿”代表确认测试最终通过阶段。
  • 主流AI大模型均能准确理解“红绿TDD”这一简写,并将其转化为完整的测试驱动开发指令。
  • 在ChatGPT中应用此提示词时,必须追加“使用你的代码环境(Use your code environment)”指令以确保代码被实际执行。

3) 风险与不足

  • AI代码生成风险:AI编程代理存在编写无法运行的代码,或生成不必要且永远不会被使用的代码的风险。
  • 代码回退风险:随着项目规模增长,新修改存在破坏现有功能(Regressions)的风险。
  • 测试失效风险:如果跳过确认测试失败(红)的步骤,可能会写出原本就能通过的无效测试,从而无法真正检验新代码的实现。
  • ChatGPT执行缺失:在使用ChatGPT时,若不明确要求使用代码环境,AI将只会编写代码而不会去执行和验证它。

正文

在使用AI编程代理(Coding Agent)时,只需加入一句简短的提示词——“使用红绿TDD(Use red/green TDD)”,就能获得更好的代码生成结果。

什么是TDD与测试先行?

TDD代表“测试驱动开发”(Test Driven Development)。在这种编程风格中,你需要确保编写的每一段代码都有配套的自动化测试,以证明代码能够正常运行。

TDD最严谨的形式是“测试先行开发”(Test-first development):首先编写自动化测试,确认测试失败,然后不断迭代实现代码,直到测试通过。

为什么TDD非常适合AI编程代理?

这种开发模式被证明非常适合AI编程代理。使用编程代理时存在一个显著风险:它们可能会编写出无法运行的代码,或者生成不必要且永远不会被使用的代码,甚至两者兼有。

“测试先行”不仅有助于防止这两种常见错误,还能确保建立一个健壮的自动化测试套件,防止未来出现代码回退(Regressions)。随着项目的增长,新修改破坏现有功能的风险也会随之增加。迄今为止,全面的测试套件是保持这些功能正常运行的最有效方法。

“红绿”的真正含义

在编写代码使其通过之前,确认测试处于“失败”状态是非常重要的一步。如果跳过这一步,你可能会写出一个原本就能通过的测试,从而无法真正检验和确认你的新代码实现。

这就是“红绿(red/green)”的含义:

  • 红(Red)阶段:观察测试失败。
  • 绿(Green)阶段:确认测试最终通过。

每一个优秀的AI大模型都理解“红绿TDD”这个简写。它实际上代表了一长串指令:“使用测试驱动开发,先写测试,在实现让测试通过的代码之前,先确认测试是失败的。”

实际应用与提示词示例

提示词示例:

Build a Python function to extract headers from a markdown string. Use red/green TDD. (编写一个Python函数来提取Markdown字符串中的标题。使用红绿TDD。)

我在Claude和ChatGPT上都进行了测试。通常情况下,我会使用像Claude Code或OpenAI Codex这样的专用编程代理,但这个例子足够简单,Claude和ChatGPT使用其默认的代码环境就能实现。

需要注意的是,在使用ChatGPT时,必须在提示词后追加一句“使用你的代码环境(Use your code environment)”。如果不加这句,ChatGPT只会写出代码而不会真正去执行它。

关联主题