Slack 结合 AST 和 LLM 自动转换 15000 个单元测试,成功率达 80%

2024-06-27 18:33:22 浏览数 (2)

作者 | Eran Stiller

译者 | 明知山

策划 | Tina

Slack 的工程团队最近发表了一篇文章,分享了他们如何使用大型语言模型(LLM)自动将 15000 个单元和集成测试 从 Enzyme 迁移到 React Testing Library (RTL)。通过结合抽象语法树(AST)和 AI 驱动的自动化方法,Slack 实现了 80% 的转换成功率,显著减少了手动工作量,展示了 AI 在简化复杂开发任务方面的潜力。

之所以要进行迁移,是因为 Enzyme 缺乏对 React 18 的支持,需要通过迁移保持与最新 React 版本的兼容性。这个迁移工具在 Slack 的采用率达到了约 64%,至少为开发者节省了 22% 的时间。这个数字已经非常显著,而 Slack 高级软件工程师 Sergii Gorbachov 推测,这个数字实际上可能更大:

需要注意的是,这 22% 的时间节省仅代表了测试用例通过的部分。可以想象,有些测试用例实际上已经被正确转换,但由于设置或导入语法等问题,导致测试无法运行,因此这些情况下的时间节省并未被计算在内。

该团队最初尝试使用抽象语法树(AST)来进行自动化转换,目标是 100% 的准确性。然而,由于 Enzyme 方法的复杂性和多样性,自动转换代码的成功率仅为 45%。影响成功率的一个因素是转换依赖了被测试的渲染 文档对象模型(DOM)的上下文信息,而 AST 转换无法访问这些信息。

wrapper.find('selector');的 AST 表示 ( 来源 )

接下来,该团队尝试使用 Anthropic 的 Claude 2.1 进行转换。尽管他们努力改进提示词,转换成功率在 40% 到 60% 之间波动。Gorbachov 指出,“转换效果在非常有效和令人失望之间徘徊,主要取决于任务的复杂性。”

在得到这些不满意的结果之后,团队决定观察人类开发者如何进行单元测试转换。他们注意到,人类开发者拥有广泛的与 React、Enzyme 和 RTL 相关的知识库,并且他们将这些知识与渲染 React 元素的上下文访问以及转换工具初始版本提供的 AST 转换相结合。

Slack 的工程师随后采用了一种混合方法,结合 AST 转换和 LLM 功能,并模仿人类行为。他们将被测试的 React 组件和由 AST 工具执行的转换作为提示词的一部分输入给 LLM,并为 AI 创建一个强大的控制机制,他们实现了 80% 的转换成功率,展示了这些技术之间的互补性。

修改后的管道流程图 (来源)

Claude 2.1 是 Anthropic 在 2023 年 11 月发布 的模型。它支持 20 万的 token 上下文窗口,显著减少了模型幻觉,并支持工具调用。Anthropic 随后推出了 Claude 3 系列模型,包含了三个不同的模型、多模态功能和改进的上下文理解。

抽象语法树(AST)是用编程语言编写的源代码抽象语法结构的树表示。树的每个节点表示源代码中出现的一个结构。语法树侧重于理解代码功能所必需的结构和内容。AST 通常在编译器和解释器中用于解析和分析代码,从而在编译期间支持各种转换、优化和转译。

查看英文原文

https://www.infoq.com/news/2024/06/slack-automatic-test-conversion/

声明:本文由 InfoQ 翻译,未经许可禁止转载。

0 人点赞