Catching Bugs Before They Land: JiTTesting’s Human-on-the-Loop Approach at Full Scale

TL;DR · AI 摘要
Catching Bugs Before They Land: JiTTesting’s Human-on-the-Loop Approach at Full Scale - Engineering at Meta POSTED ON OC...
核心要点
- 主题聚焦:Catching Bugs Before They Land: JiTTesting’s Hum
- 来源:Engineering at Meta,建议结合原文判断细节。
- AI 分析暂不可用,本条为保底评分与摘要。
在错误落地前捕获:Meta全面规模下JiTTesting的人机协作方法 - Meta工程实践
POSTED ON
OCTOBER 29, 2026
TO
AI Research
,
ML Applications
Security & Privacy
在错误落地前捕获:Meta全面规模下JiTTesting的人机协作方法
.entry-meta
.entry-header
By
Sreeja Thummala
Sophie Zeng
Mark Harman
Weini Liu
Eric Liu
- 过去一年中,我们一直在分享利用大语言模型实时捕获错误的工作——这是一种我们称之为即时测试生成(JiTTests)的创新方法。
- 现在,我们正在分享将即时测试生成(Catching JiTTests)部署到生产环境后取得的成果和积极影响。
- 我们的论文《Meta的即时错误捕获测试生成》详细阐述了我们首次部署和测试即时测试生成的完整过程。
每一次代码变更都在改进我们的平台,但同时也引入了新的复杂性。在Meta,数亿行代码持续演变,传统测试方法已难以跟上节奏。在代码部署前主动识别风险,使我们能够更早发现隐患、更有效应对,并在大规模场景下提供可靠体验。
过去一年,我们分享了将大语言模型(LLMs)应用于软件测试生成的研究。具体而言,我们分享了即时测试(JiTTests)的工作,这是一种创新的测试方法,通过LLMs实时捕获错误,包括传统测试可能遗漏的错误。
自首次公开这项工作以来的五个月里,我们部署了即时测试生成方法,验证其可扩展性和行业适用性。如今,即时测试生成已不再只是研究原型,它们已成为Meta基础设施的一部分,帮助工程师以更少的负担和更低的误报率发现更多错误。
即时测试生成的优势
大多数基于AI的防错方法使用LLMs和/或智能体AI通过审查代码并基于过往经验检测缺陷。它们通过与人类审查员相同的流程进行工作,只是速度更快。即时测试生成(Catching JiTTests)本质上是完全不同的方法(表1):它生成可执行的测试用例,具体展示变更引入的行为差异。虽然需要更多计算步骤,但它能捕捉基于LLM或智能体代码审查可能遗漏的错误类别。
表1. 传统基于LLM的代码审查与即时测试生成的关键差异。
Meta如何实施即时测试生成
JiTTests由系统自动生成并设计为失败,用于在代码变更(diff)部署到生产环境前暴露潜在错误。当应用于Meta规模的代码库时,一个关键挑战是区分强捕获(即揭示真实错误的真阳性失败)和弱捕获(即可能为假阳性的测试)。
这归结为一个具体问题:对于每一个提出的代码变更(diff),我们如何自动生成能够提前发现最严重错误的测试,同时保持高真阳性率且不阻碍工程师的工作效率?
为解决这个问题,我们开发了两个并行的工作流程:
- 一个“意图感知”流程,推断代码变更的意图和风险,并针对可能的失败点生成测试。
- 一种“可疑差异”工作流程,将每次代码更改视为突变/错误,并生成测试以暴露其行为差异,而无需考虑意图。它隐式地断言差异存在错误(因此称为“可疑”)。
图1. Catching JiTTests中“可疑差异”和意图感知工作流程的架构。
为了过滤假阳性,我们采用了一种传统的基于规则的方法,并结合了一种称为“LLM作为法官”(LLM-as-Judge)的集成方法,该方法汇总多个最先进的(SOTA)大型语言模型(LLMs)的判断,所有模型都负责将弱捕获分类为可能的真阳性或假阳性。
我们还保留了人工审核,旨在减少审核负担。我们的目标是保持人工标注的一致性,同时降低需要工程师介入审核弱捕获的可能性。
工作原理
整个系统工作流程分为五个阶段:
阶段1:目标定位与触发
系统在空闲资源上夜间运行,针对前一天提交的、通过类似差异风险评分(DRS)机制(基于之前代码更改训练)判定为“高风险”的差异。这有助于确保测试生成聚焦于最可能包含严重回归的差异。
阶段2:两种差异感知的测试生成工作流程
“可疑差异”工作流程将每个差异视为突变,使用基于突变引导的LLM测试生成,生成区分差异行为与其父版本的测试。此处的目标是最大化弱捕获的候选池,从而提高其中发现强捕获的可能性。
同时,“意图感知”工作流程使用LLM通过代码更改、差异标题和摘要推断差异意图。LLM随后描述“风险”——即实现该意图时可能导致错误的方式。然后利用这些风险描述构建突变体——每个突变体代表在实现推断出的意图时可能引入的错误。
生成测试以消除每个突变体(即区分突变体行为与父版本行为)。
这些测试随后在实际差异上运行。任何失败的测试将被收集为弱捕获。
阶段3:LLM作为法官集成(自动化评估)
一旦生成弱捕获,系统必须判断每个弱捕获是假阳性还是真正的强捕获(真阳性)。
“LLM作为法官”集成包含一组LLMs,用于审查:
- 弱捕获测试用例代码。
- 测试执行结果(失败代码、消息、执行轨迹)。
- 父版本与子版本之间的代码更改(差异)。
- 推断出的差异意图。
阶段4:基于规则的评估器(RubFake)
我们通过一种更传统的基于规则的方法——基于规则的假阳性消除环境(RubFake)来补充LLM作为法官。
LLM作为法官具有丰富的语义,但其判断是非确定性的且难以验证。相比之下,RubFake提供经过验证的确定性判断。两者协同工作,RubFake和LLM作为法官共同对弱捕获候选者进行整体排名,其中排名足够高的候选者值得进一步考虑。
阶段5:人工介入(工程师联系)
根据LLM作为法官和RubFake的排名结果,系统决定是否联系人工工程师。
Rather than a human-in-the-loop approach, where a human engineer reviews every output, we’ve reduced friction through a human-on-the-loop approach, where human engineers set criteria and review outcomes at an aggregate level rather than supervising every output.
表 2. 人工介入循环与人工监督循环方法的操作差异。
Meta 上 JiTTests 捕获效果的影响
随着测试系统的建立,我们的目标是让工程师积极关注其结果。
截至本文撰写时,Meta 共有 589 名工程师(占我们接触对象的 64%)参与了 JiTTests 捕获。这些工程师报告称,JiTTests 能够揭示真正具有行动价值的发现,其中 60% 的结果为真实阳性。
在 2026 年上半年,JiTTests 在代码差异阶段成功捕获了 74 个严重(SEV)隐私漏洞,这些漏洞在进入生产环境前就被发现,使该时间段内隐私 SEV 的总体发生率降低了 20%。
图 2. 2026 年上半年 JiTTests 在 Meta 的影响。
为什么这很重要
智能代理软件开发正在帮助全球工程师和开发者以前所未有的速度编写、审查和发布代码。但更快的部署速度也意味着需要更快的测试速度。每个在进入生产环境前被发现的漏洞,都是终端用户无需面对的问题。我们已经证明,大语言模型可以提供额外的安全层,能够捕捉传统测试可能遗漏的问题,证明了 AI 生成的测试具备足够的扩展性,可以降低组织风险。
JiTTests 是一个在技术和社交层面都具备可扩展性的解决方案。将这些测试与人工监督循环方法结合,可以确保工程师很少需要阅读测试代码,只需确认观察到的行为变化是否符合预期。
这种方法具有通用性:工程师在早期定义成功标准,让 AI 执行测试,在聚合层面监控结果,并在政策层面进行干预,而非针对每个具体项目。
阅读论文
我们的论文《Meta 的 Just-in-Time 捕获测试生成》,在 FSE 2026 上发表,并在 Product@Scale 上展示,详细介绍了我们在 Meta 基础设施中部署和测试 JiTTests 的初步成果。