返回资讯中心
外部精选
软件工程
#开发者实时流

Meta将LLM生成测试JiTTests投入生产环境

来源标题:JiTTesting's Human-on-the-Loop Approach at Full Scale

Meta的Catching JiTTests已从研究原型转为生产基础设施,帮助工程师以更低负载和更少误报捕获更多bug。该方案用大语言模型即时生成软件测试,可发现传统测试遗漏的缺陷,已部署五个月以验证可扩展性。Meta称其代码库有数亿行且持续演进,传统测试难以跟上节奏。

Hacker News 最新gmays2026/11/2 · 今天17 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

每一次代码变更都在改进我们的平台,但同时也引入了新的复杂性。在 Meta,数亿行代码在不断演进,传统测试无法跟上这一节奏。在代码合入之前主动捕获风险,使我们能够更早地识别风险、更有效地响应,并大规模交付可靠的体验。

在过去一年中,我们分享了关于应用大语言模型(LLM)生成软件测试的研究。更具体地说,我们分享了关于即时测试(Just-in-Time Tests,简称 JiTTests)的工作——这是一种新颖的测试方法,我们利用 LLM 即时捕获 bug,甚至是传统测试可能无法捕获的 bug。

在我们首次公布这项工作后的五个月里,我们部署了 Catching JiTTests 方法,以确定其可扩展性以及对更广泛行业的适用性。如今,Catching JiTTests 不再是一个研究原型;它们已成为 Meta 基础设施的一部分,帮助我们的工程师以更低的负载和更小的误报概率捕获更多 bug。

大多数基于 AI 的代码 bug 预防方法使用 LLM 和/或代理式 AI 来审查代码,并基于先验经验检测故障。它们通过与人审查员相同的审查流程来工作,只是速度更快。Catching JiTTests 是一种根本不同的方法(表 1):它生成可执行的测试,以展示变更所引入的具体行为差异。虽然它需要更多的计算步骤,但它能捕获基于 LLM 或代理的代码审查可能无法捕获的各类 bug。

JiTTests 是自动生成的,并被设计为失败,从而在代码变更(diff)合入生产环境之前暴露其中的 bug。当它们应用于像 Meta 这样庞大的代码库时,一个挑战是区分强捕获(即揭示真实 bug 的真阳性失败)和弱捕获(即可能是误报的测试)。

归根结底,这归结为一个具体问题:对于每个提议的 diff,我们如何自动生成测试,在造成严重问题之前发现最严重的 bug,并且以高真阳性率做到这一点,同时不妨碍工程师的工作速度?

为解决这一问题,我们开发了两个串联的工作流:

为了过滤误报,我们采用了传统的基于规则的方法,结合一种我们称之为“LLM-as-Judge”的集成方法,该方法汇总来自多个最先进(SOTA)LLM 的判断,所有这些 LLM 都负责将弱捕获分类为可能的真阳性或假阳性。

我们还保留了人工审查,同时着眼于减少审查负担。我们的目标是保持人工标注的一致性,但降低工程师被引入审查弱捕获的可能性。

整个系统工作流分为五个阶段:

系统在夜间利用空闲容量运行,针对前一天提交的、使用类似 Diff Risk Score(DRS)的机制判定为“高风险”的 diff(该机制基于以往的代码变更进行训练)。这有助于确保测试生成聚焦于最可能包含严重回归的 diff。

可疑 diff 工作流将每个 diff 视为一个变异体,并使用变异引导的基于 LLM 的测试生成来产生能够区分 diff 行为与其父版本的测试。这里的目标是最大化弱捕获池,从而增加在其中找到强捕获的机会。

与此同时,意图感知工作流使用 LLM 通过代码变更、diff 标题和摘要来推断 diff 的意图。然后,LLM 描述“风险”——即尝试实现该意图可能产生错误的方式。接着,它使用这些风险描述来构建变异体——每个变异体代表在实现推断意图时可能引入的一个 bug。

生成测试以杀死每个变异体(即区分变异体行为与父版本)。

然后,这些测试在实际 diff 上运行。任何失败的测试都被收集为弱捕获。

一旦生成弱捕获,系统必须确定每个弱捕获是误报还是实际上是强捕获(真阳性)。

LLM-as-Judge 集成由一组 LLM 组成,它们审查:

我们用一个更传统的、基于规则的方法来补充 LLM-as-Judge,该方法称为基于规则的假阳性消除环境(RubFake)。

LLM-as-Judge 具有丰富的语义,但其判断是非确定性的,且难以验证。相比之下,RubFake 提供经过验证的、确定性的判断。RubFake 和 LLM-as-Judge 协同工作,生成弱捕获候选的整体排名,排名足够高的候选值得进一步考虑。

基于 LLM-as-Judge 和 RubFake 的排名,系统随后决定是否联系人类工程师。

我们采用的不是人在环中(human-in-the-loop)的方法——即由人类工程师审查每个输出——而是通过人在环上(human-on-the-loop)的方法减少摩擦,即人类工程师设定标准并在聚合层面审查结果,而不是监督每个输出。

测试系统就位后,我们的目标是让工程师与其结果进行互动。

截至撰写本文时,Meta 已有 589 名工程师(占我们外联人数的 64%)与 Catching JiTTests 进行了互动。这些工程师反馈称,Catching JiTTests 呈现出真正可操作的发现,真阳性率达到 60%。

在 2026 年上半年,Catching JiTTests 在 diff 阶段发挥了关键作用,捕获了 74 个严重的(SEV)隐私 bug,使其在合入生产环境之前被拦截,并将该时间段内隐私 SEV 的总体发生率降低了 20%。

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →