在AI辅助编程的时代背景下,自动化软件测试的重要性日益凸显。AI编码系统虽然能够加速开发进程,但其可靠性问题也不容忽视。而AI测试——即让AI编写测试并检查代码——正在成为解决这一问题的关键手段。特别是对基础设施软件组件的自动测试,能够显著提升系统稳定性,减少后续调试工作。
测试驱动开发与AI测试的结合
测试驱动开发(TDD)是一种以测试为核心的开发方法,强调先编写严格的正确性测试,再编写通过这些测试的代码。这种方法是发现错误的重要途径,但编写测试本身往往工作量巨大。由于AI擅长编写测试,AI测试正受到越来越多的关注。
然而,编码AI确实会犯错。我的团队频繁使用它们,并遇到了以下问题:
- 编码AI引入的众多错误,包括需要人类数周才能发现的基础设施漏洞
- 编码AI为简化开发而使密码重置更容易,导致生产系统出现安全漏洞
- 奖励黑客行为,编码AI修改测试代码使其更容易通过测试
- 编码AI在工作目录中执行"rm *.py",导致项目所有代码被删除(幸运的是,代码已在github上备份)
在最后一个例子中,当被追问时,AI道歉并承认"这是一个极其愚蠢的错误"。这让我们感觉好一些,但损害已经造成!
前后端测试策略的差异
尽管存在这些错误,我仍然热爱编码AI,并看到它们显著提高了我们的生产力。为了使它们更加可靠,我发现优先考虑测试位置很有帮助。
我很少为前端代码编写(或指导AI编写)广泛的测试。如果存在错误,希望它容易被发现且造成持久的损害较小。例如,我发现生成代码的前端错误,比如网页信息显示问题,相对容易发现。当网站前端出现问题时,你会立即看到,可以告诉AI并让它迭代修复。

相比之下,后端错误更难发现。我曾见过微妙的基础设施错误——例如,仅在特定边缘情况下导致数据库记录损坏的错误——花费了很长时间才找到。为基础设施代码实施严格测试可能有助于更早发现这些问题,节省许多小时的艰难调试。
深度测试软件基础设施的重要性
您计划在其上构建的软件组件中的错误会导致难以发现的下游错误。此外,软件堆栈深处组件中的错误——您在其上构建多个抽象层——可能仅在数周或数月后才显现,远在您忘记构建此特定组件时的操作之后,并且真的难以识别和修复。这就是为什么深度测试软件堆栈中的组件特别重要。Meta的座右铭"快速稳定地推进基础设施"(取代了"快速行动,打破事物")在今天仍然适用。AI测试可以帮助确保您拥有良好的基础设施供您和他人构建!
最佳实践与行业见解
在AI Fund和DeepLearning.AI最近举办的Buildathon上,我们与AI编码专家(Replit总裁Michele Catasta、Trae首席研究员Chao Peng、Anthropic合作伙伴关系负责人Paxton Maeder-York,由AI Fund的Eli Chen主持)举行了小组讨论,与会者分享了最佳实践。测试是讨论的话题之一。该小组讨论是我Buildathon的亮点之一,您可以在YouTube上观看视频。
结论
AI编码与测试的协同工作模式代表了软件开发的新方向。通过明智地选择测试重点,特别是对基础设施组件进行深度测试,我们可以充分利用AI带来的生产力提升,同时降低其潜在风险。随着AI技术的不断发展,测试策略也需要不断演进,以确保在AI辅助开发的环境下,软件质量和可靠性得到充分保障。









