Slack利用大语言模型自动转换测试框架
Slack的工程团队最近发布了一篇文章,详细介绍了如何利用大语言模型(LLM)自动将15,000个单元测试和集成测试从Enzyme框架转换为React Testing Library(RTL)。通过结合抽象语法树(AST)转换和AI驱动的自动化,Slack的创新方法实现了80%的转换成功率,显著减少了手动工作量,展示了AI在简化复杂开发任务中的潜力。
背景与动机
Enzyme框架不再支持React 18,Slack必须进行大规模的测试框架转换以保持与最新React版本的兼容性。Slack的转换工具采用率达到约64%,节省了至少22%的开发时间(约10,000小时)。Slack的高级软件工程师Sergii Gorbachov认为,实际节省的时间可能更高,因为某些测试文件可能未运行,导致未计入时间节省。
初始尝试与挑战
团队最初尝试使用AST转换实现自动化转换,目标是达到100%的准确率。然而,由于Enzyme方法的复杂性和多样性,自动转换代码的成功率仅为45%。AST转换无法访问渲染的DOM上下文信息,这是导致低成功率的主要原因之一。
引入大语言模型
随后,团队尝试使用Anthropic的LLM模型Claude 2.1进行转换。尽管对提示进行了优化,转换成功率在40%到60%之间波动,效果不稳定。Gorbachov指出,转换效果在很大程度上取决于任务的复杂性。
结合人类开发者的方法
团队观察了人类开发者如何转换单元测试,发现他们结合了React、Enzyme和RTL的广泛知识,并访问了渲染的React元素和AST转换工具提供的上下文信息。
混合方法
Slack的工程师最终采用了混合方法,将AST转换与LLM能力结合,并模仿人类的行为。通过将渲染的React组件和AST工具的转换结果作为提示输入LLM,并创建强大的AI控制机制,团队实现了80%的转换成功率,展示了这些技术的互补性。
Claude 2.1与AST的详细介绍
Claude 2.1是Anthropic于2023年11月发布的LLM模型,具有200K的上下文窗口,显著降低了模型幻觉率,并支持系统提示和工具使用。Anthropic随后推出了Claude 3系列模型,具备多模态能力和改进的上下文理解。
AST是源代码的抽象语法结构的树形表示,每个节点表示源代码中的一个构造。AST通常用于编译器和解释器中,以解析和分析代码,实现各种转换、优化和翻译。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。