编写精心设计且正确的代码是每个开发人员的目标。实现这一目标的突出方法之一是测试驱动开发 (TDD)。虽然 TDD 不会为您设计或编写代码,但它是一种软件开发方法,可让您在迭代开发周期中快速获得有关设计决策的反馈。
在编码之前或之后编写单元测试,或者从不编写测试,取决于开发人员的选择。显然,从不编写任何测试会导致生产中出现严重情况,如果开发人员幸运的话,他们会在手动测试阶段发现错误。
完成代码后编写测试总比没有测试要好。包括我们在内的大多数开发人员都直接应用代码优先方法,然后编写测试。尽管如此,编写的代码并没有变得更好。如果我们忘记了测试用例,就会出现一些功能错误。最好先为每段代码编写失败的测试用例,然后按照 TDD 周期添加代码以使该测试通过。
目前,我们正在讨论如何使用生成式人工智能使我们的工作更加自动化。在这项工作中,我们引入了一项新的实验,灵感来自 Allen Helton 的博客。我们为项目编写了几个测试用例,然后让ChatGPT生成测试相关的代码。
用于测试优先开发的生成式人工智能
考虑到手动测试中可能出现人为错误,问题出现了:为什么不使用生成式人工智能来自动化 TDD?生成式人工智能可以通过自动创建单元测试和相应的代码在 TDD 中发挥变革性作用。以下是建议的工作流程:
- 开发人员编写的测试:开发人员首先编写初始单元测试,指定其代码的期望结果。
- 人工智能生成的代码:生成式人工智能读取这些单元测试并生成通过测试所需的代码。如果代码成功运行,则会将其保存到磁盘。如果没有,人工智能会生成错误报告并尝试再次生成正确的代码,从而形成一个循环,直到测试通过。通过以这种方式整合人工智能,开发人员可以确保他们的代码经过彻底的测试和验证,从而最大限度地降低出错的风险。

在 TDD 中使用生成式 AI 的好处
自动化代码生成和测试过程可以显著加快开发周期。此外,还可以减少测试用例和代码编写中出现人为错误的可能性。在这样做的同时,确保所有测试都得到全面、一致的覆盖,并轻松扩展开发过程,而不会增加手动工作量。
潜在的挑战和解决方案
虽然将生成式 AI 集成到 TDD 中有很多好处,但也并非没有挑战。TDD 的 AI 系统的初始设置有时可能很复杂且耗时。开发人员可能需要接受培训才能有效使用和信任 AI 工具。但即使开发人员已准备好处理它,AI 也可能会遇到训练数据中没有很好体现的独特或边缘情况,因此这可能会混淆所要求的场景。生成式 AI 会以不错的代码做出响应,但它并不是最好的选择。因为代码不应用任何反馈机制。为了编写出色的代码,我们应该将反馈机制应用于 AI,就像开发人员的代码审查方法一样。我们可以将 AI 与人类监督相结合来处理复杂场景,至少目前是这样。:)
反馈 在 TDD 中应用生成式 AI

反馈机制
为了进一步完善流程,可以引入反馈机制。开发人员编写单元测试,然后由开发人员代理生成代码。代码审查员代理增加了一个新的审查层,负责审查代码并向开发人员代理提供反馈。
迭代改进
开发代理根据审阅代理的反馈修改代码并重新提交审阅,此过程不断反复,直到代码顺利通过审阅。
最终测试
一旦代码得到审核代理的批准,就会运行单元测试。如果测试通过,代码就会被保存。如果测试失败,就会生成错误报告,然后流程会返回到代码生成。
本质上,工作流程如下:
- 开发人员编写单元测试。
- 人工智能读取这些测试并生成必要的代码。
- 如果测试成功运行,代码就会被保存。如果失败,就会生成错误报告,并且人工智能会循环尝试纠正代码。
- 这种初始自动化可能会产生容易出错的代码,这时反馈机制就发挥作用了。
- 开发人员编写单元测试,开发人员代理生成所需的代码和方法。
- 代码审查员代理审查代码并向开发人员代理发送反馈。
- 开发代理根据反馈完善代码并重新提交审核。
- 这个循环持续到代码审阅者代理批准代码。
- 一旦获得批准,就会运行单元测试。如果成功,则保存代码;如果失败,则生成错误报告,然后继续循环。
通过加入反馈机制,生成的代码的质量得到显著提高,确保其满足必要的标准并可靠地通过所有测试。
结语
将生成式人工智能集成到测试驱动开发 (TDD) 中有可能彻底改变软件开发。通过自动生成单元测试和相应的代码,开发人员可以确保更高的代码质量、减少错误并简化工作流程。虽然有挑战需要克服,但其好处远远超过最初的障碍,使其成为未来编码的一种有前途的方法。您可以查看我们的 编码器人工智能 如果您有兴趣使用生成式人工智能支持编程,那么这个项目就是您的最佳选择。
未来发展方向
我们计划基于此方法构建三项内容:
扩展语言支持:虽然我们一直专注于 Java,但这种方法可以扩展到其他语言,如 Python、JavaScript 等。
自动化测试生成:我们可以提示生成式人工智能根据开发人员提供的高级要求编写测试,而不是手动编写测试。
扩展 Agentic AI 团队:除了简单的代码审查员之外,我们还可以引入更多专业代理,例如用于测试边缘情况的 QA 代理、用于优化代码性能的性能代理等等。
我们建议每个软件开发人员花时间编写更强大、更准确的测试用例,然后利用生成式人工智能的强大功能来生成高质量的代码。