Reducing False Positives in Static Bug Detection with LLMs: An Empirical Study in Industry
本文介绍了腾讯内部首个综合性的实证研究,该研究表明,将大语言模型与静态分析相结合的混合技术能够有效地将工业级缺陷检测中的误报率降低 94–98%,同时与人工审查相比,还能显著节省成本和时间。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你是一名在大型高科技工厂(类似于腾讯)担任质量检测员的质检员,这些工厂负责制造复杂的软件机器。你的职责是在机器出厂前发现缺陷。
为了协助你,工厂安装了一个超快速的自动化金属探测器,称为静态分析工具 (Static Analysis Tool, SAT)。这个工具会扫描机器中的每一个螺丝和每一根电线。问题在于,这个金属探测器过于敏感了:它不仅会对真正的断裂螺丝发出警报,还会对无害的灰尘、阴影甚至灯泡的反射光发出警报。
在行业中,这被称为误报 (False Positive)。即“虚假警报”。
问题:“狼来了”的故事
论文解释说,在大型公司中,这些工具为了确保不漏掉任何一个真正的断裂螺丝,表现得过于谨慎,导致它们在 90% 的情况下即使面对的是正常情况也会大声尖叫“警报!”。
由于工厂规模巨大,探测器每天会鸣响数千次。人类检测员必须停下手头的工作,拿起机器,检查每一次警报,以确定它是真实的还是虚假的。
- 成本: 人类检查仅仅一个警报就需要 10 到 20 分钟。
- 浪费: 由于大多数警报都是虚假的,工厂在检查那些并不需要修理的东西上浪费了大量的时间和金钱。
新方案:“AI 助手”
研究人员问道:我们能否使用一种聪明的 AI(大语言模型或 LLM)来帮助我们忽略这些虚假警报,从而让人们只检查那些真实的故障?
他们使用来自腾讯广告软件的真实数据测试了这个想法。他们收集了 433 个真实的报警案例(其中 328 个是虚假报警,105 个是真实的漏洞/Bug),并让不同类型的 AI 对其进行分类。
以下是他们的发现,使用了简单的类比:
1. AI 是一个优秀的“过滤器”
把 AI 想象成一名非常聪明的实习生。
- 旧方法: 你问实习生:“这个坏了吗?”而他们只是在瞎猜,经常猜错。
- 新方法: 你给实习生一份**“小抄”(提示词/Prompt)**,并告诉他们:“要看全局,不要只盯着一个螺丝看。”
- 结果: 当 AI 被给予正确的指令(特别是采用一种让 AI 既看代码又看探测器备注的“混合”方法)时,它变得异常出色。它成功过滤掉了 94% 到 98% 的虚假警报。它能以很高的置信度告诉人类:“忽略这个,这只是个影子。”
2. 比人类更便宜、更快速
- 人类成本: 检查一个警报需要 10–20 分钟。
- AI 成本: AI 检查一个警报仅需 2 到 110 秒(取决于你使用的 AI 模型)。
- 金钱成本: 每次检查的成本在 0.12 之间。
- 类比: 这就像雇佣了一个成本仅为分毫之下的机器人,去完成一项原本需要人类花掉一整个茶歇时间才能完成的工作。
3. AI 尚不完美(目前还不行)
研究人员还观察了 AI 失效的地方,发现了三个特定的“盲点”:
- “长篇大论”问题: 如果代码非常长且复杂(就像一部有 100 章的长篇小说),AI 有时会“丢掉剧情”,无法判断结尾是否与开头相连。
- “鲁布·哥德堡机械”问题: 如果代码包含一系列 20 个不同的“如果-那么”规则(就像一个复杂的连锁反应装置),AI 会对机器实际运行的路径感到困惑。
- “怪异语言”问题: 如果代码使用了 AI 在训练阶段从未见过的非常奇特、自定义的结构,它可能会产生误解。
核心结论
论文得出结论,虽然我们目前还不能完全用 AI 取代人类检测员(因为 AI 仍会漏掉一些棘手的案例),但我们可以将 AI 作为第一道防线。
与其让一名人类去检查 100 个警报,不如先由 AI 进行检查,它会过滤掉 95 个显而易见的假警报,然后只将剩下的 5 个可疑警报交给人类。这节省了工厂大量的精力和成本,将一个混乱、嘈杂的过程变成了一个高效、顺畅的过程。
简而言之: AI 并不是一个能解决一切问题的“魔杖”,但它是一个出色的“降噪耳机”,让专家能够清晰地听到真正的问题。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。