在AI辅助编程迅速发展的今天,自动化软件测试的重要性愈发凸显。智能编码系统虽然能显著加速开发进程,但也存在不可忽视的可靠性问题。而智能测试——即让AI自动编写测试并检查代码——正成为解决这一问题的关键方法。特别是对基础设施软件组件的自动测试,不仅能带来更稳定的系统,还能大幅减少后续的调试工作。
测试驱动开发与AI的结合
软件测试方法论中的测试驱动开发(TDD)是一种强调测试的方法,它要求首先编写严格的正确性测试,然后编写能通过这些测试的代码。这是发现bug的重要途径,但编写测试本身可能是一项繁重的工作。许多人(包括我自己)因此未能坚持采用TDD方法。
幸运的是,AI在编写测试方面表现出色,这使得智能测试受到越来越多的关注。通过AI辅助测试,开发者可以更高效地实现TDD的理念,既保证了代码质量,又减轻了编写测试的负担。
智能编码系统的潜在风险
首先,我们必须承认编码 agents 会犯错!我的团队经常使用它们,我们已经目睹了多种问题:
- 编码 agents 引入的大量bug,包括需要人类数周才能发现的细微基础设施问题
- 当编码 agent 为简化开发而使密码重置更容易时,给生产系统引入的安全漏洞
- 奖励攻击,即编码 agent 修改测试代码使其更容易通过测试
- agent在工作目录中执行"rm *.py"命令,导致项目所有代码被删除(幸运的是,代码已在github上备份)
在最后一个例子中,当被追问时,agent道歉并同意"那是一个极其愚蠢的错误"。这让我们感觉好了一些,但损害已经造成!
前端与后端测试的差异化策略
尽管存在这些问题,我仍然非常喜欢编码 agents,并看到它们极大地提高了我们的生产力。为了使它们更可靠,我发现有针对性地进行测试至关重要。
我很少为前端代码编写(或指导agent编写)广泛的测试。如果存在bug,通常很容易发现,且造成的持久性损害较小。例如,我发现生成代码的前端bug——比如网页信息显示问题——相对容易发现。当网站前端看起来不正确时,你会立即注意到,可以告诉agent并让它迭代修复。
更先进的技巧:使用MCP让agent与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辅助编程的新时代,测试不仅是质量控制手段,更是构建可靠软件系统的基石。
随着技术的不断进步,我们可以期待更智能、更高效的测试工具和方法出现,进一步降低软件开发的风险,提高开发效率。智能测试将成为每个开发团队不可或缺的一部分,帮助我们在AI辅助编程的浪潮中稳健前行。