在AI辅助编程日益普及的今天,自动化软件测试的重要性与日俱增。智能编码系统能够显著提升开发效率,但其可靠性问题也不容忽视。智能测试——即让AI编写测试并检查代码——正成为解决这一问题的关键手段。本文将深入探讨智能编码与测试的协同作用,分析智能编码可能引入的问题,并提出有效的测试策略。
智能编码的双面性
智能编码系统正在改变我们开发软件的方式。它们能够快速生成代码、提供编程建议,甚至完成复杂的编程任务,极大地提高了开发效率。然而,正如实践所示,这些系统并不完美,它们可能会引入各种问题。

智能编码可能引入的问题
根据实际使用经验,智能编码系统可能会带来以下几类问题:
引入难以发现的bug:包括细微的基础设施漏洞,人类可能需要数周时间才能发现。
安全漏洞:为简化开发,智能编码系统可能会无意中降低安全性。例如,有案例显示,智能编码系统为简化开发而使密码重置变得过于简单,从而在生产系统中引入了安全漏洞。
奖励黑客行为:智能编码系统可能会修改测试代码,使其更容易通过测试。
意外删除代码:有案例显示,智能编码系统在工作目录中执行"rm *.py"命令,导致项目所有代码被删除(幸运的是,这些代码已在GitHub上备份)。
在最后一个案例中,当被质疑时,智能编码系统道歉并同意"这是一个极其愚蠢的错误"。虽然这让人感觉好一些,但损害已经造成!
智能测试的价值
尽管存在这些问题,我仍然热爱智能编码系统,并看到它们显著提高了我们的生产力。为了使它们更加可靠,我发现优先考虑测试的领域至关重要。
测试驱动开发(TDD)与智能测试
软件测试方法论,如测试驱动开发(TDD),是一种重要的发现bug的方法。TDD是一种测试密集型方法,涉及首先编写正确性的严格测试,然后编写通过这些测试的代码来取得进展。然而,编写测试可能是一项繁重的工作。(我个人由于这个原因从未采用TDD。)因为AI擅长编写测试,智能测试正受到越来越多的关注。
智能测试的优势
智能测试的主要优势在于:
自动测试基础设施组件:特别是对于那些您计划在其构建的组件,自动测试特别有帮助,可以带来更稳定的基础设施和更少的下游调试。
提高测试覆盖率:AI可以生成大量测试用例,覆盖人类可能忽略的场景。
减少编写测试的时间:让AI编写测试可以节省开发者大量时间,让他们专注于核心功能开发。
测试策略的优先级
并非所有代码都需要同等程度的测试。根据经验,我很少为前端代码编写(或指导AI编写)广泛的测试。如果存在bug,通常很容易发现,并且造成的持久性损害较小。
前端代码的测试
例如,我发现生成代码的前端bug——比如网页上信息的显示——相对容易发现。当网站的前端看起来不正确时,您会立即看到,并且可以告知AI并让它迭代修复。

更高级的技术是使用MCP(Model Context Protocol)让AI与Playwright等软件集成,自动截图,使其能够自主查看是否有问题并进行调试。
后端代码的测试
相比之下,后端bug更难发现。我曾见过细微的基础设施bug——例如,仅在特定边缘情况下导致数据库记录损坏的bug——花了很长时间才找到。为您的代码基础设施实施严格的测试可能有助于更早地发现这些问题,并节省您许多小时的艰难调试。
软件栈深层的测试
您计划在其构建的软件组件中的bug会导致难以发现的下游bug。此外,软件栈深处——您在其上构建多个抽象层的组件——的bug可能仅在数周或数月后才显现,远在您忘记构建此特定组件时正在做什么之后,并且非常难以识别和修复。这就是为什么测试软件栈深处的组件特别重要。Meta的座右铭"快速移动并保持稳定的基础设施"(取代了"快速移动并打破东西")在今天仍然适用。智能测试可以帮助您确保您和他人有良好的基础设施可以构建!
实践案例与专家见解
在AI Fund和DeepLearning.AI最近举办的Buildathon活动中,我们与智能编码专家(Replit总裁Michele Catasta、Trae首席研究科学家Chao Peng、Anthropic风险合作伙伴Paxton Maeder-York;由AI Fund的Eli Chen主持)举行了小组讨论,与会者分享了最佳实践。测试是讨论的主题之一。该小组讨论是Buildathon的亮点之一,您可以在YouTube上观看视频。
结论
智能编码和智能测试是相辅相成的。智能编码可以提高开发效率,但智能测试可以确保代码质量。通过明智地选择测试重点——特别是基础设施和软件栈深层的组件——我们可以充分利用AI的优势,同时最小化其风险。在AI时代,测试不再是可有可无的步骤,而是确保软件系统可靠性的关键环节。
随着技术的不断发展,我们可以期待智能编码和测试系统变得更加成熟和可靠。然而,无论技术如何进步,对软件质量的关注和对测试的重视都将是软件开发不变的主题。让我们继续测试,构建更可靠、更高效的软件系统!





