← 最新论文
💻 computer science

Will It Break in Production? Metric-Driven Prediction of Residual Defects in Python Systems

本文表明,利用过程和代码指标的监督机器学习模型能够以高召回率有效预测 Python 系统中的残留缺陷,其表现优于大语言模型和无监督方法,同时揭示了指标与代码嵌入捕捉了互补信息。

原作者: Giuseppe De Rosa, Pietro Liguori

发布于 2026-04-30
📖 1 分钟阅读☕ 轻松阅读

原作者: Giuseppe De Rosa, Pietro Liguori

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象你是一家大型玩具厂的质量检验员。你的工作是在玩具离开仓库前找出有缺陷的玩具。你有一个检验团队(测试团队)负责检查每一件玩具。但有时,有缺陷的玩具还是会漏网,被运送给客户,直到孩子试图玩耍时才暴露出问题。在软件世界中,这些被称为残余缺陷——即逃过所有测试、仅在程序于现实世界中“上线”后才显现的漏洞。

本文提出了一个简单却棘手的问题:我们能否构建一个计算机程序,预测哪些漏洞会逃出厂区并在现实世界中引发故障?

研究人员聚焦于Python,这是一种流行的编程语言,它非常灵活,但也可能很棘手,因为它并不总是在代码实际运行时才捕获错误。

以下是他们的发现,分解为几个简单概念:

1. “超级智能”的猜测者失败了

研究人员首先尝试使用大型语言模型(LLMs)。你可以把它们想象成超级聪明的 AI 机器人,几乎阅读过所有已编写的代码。他们让这些机器人查看一段代码,并猜测:“这个漏洞以后会出现吗?”

  • 结果: AI 机器人在这项具体工作上表现糟糕。
    • 其中一个 AI(Gemini)过于热衷于发现问题,几乎对所有东西都大喊“危险!”。它几乎找出了所有真正的严重漏洞,但也标记了成千上万个完好的玩具为有缺陷。这就像一个只要烤一片面包就会响起的烟雾报警器。
    • 其他 AI(Claude、GPT-4)则过于谨慎。它们大多说“看起来没问题”,从而漏掉了实际危险的漏洞。
    • 即使他们尝试针对这项任务专门“训练”这些机器人,它们仍然无法学会识别模式。它们就是无法区分会隐藏起来的漏洞和会导致崩溃的漏洞。

2. “老派”统计学家赢了

接下来,研究人员尝试了另一种方法。他们没有让 AI 像人类一样“阅读”代码,而是向计算机提供了一份关于代码的指标(数字和统计数据)列表。

这就像医生检查病人的生命体征,而不是询问他们感觉如何。他们考察了以下内容:

  • 年龄: 这段代码有多老?

  • 大小: 文件有多大?

  • 变更频率: 人们修改它的频率有多高?

  • 活跃度: 有多少不同的开发者接触过它?

  • 结果: 这种方法效果好得多

    • 使用标准的机器学习工具(如随机森林和 XGBoost),他们能够以高精度预测那些会逃逸到生产环境的漏洞。
    • 他们捕获了约85% 到 90% 本会逃逸到生产环境的漏洞。
    • 至关重要的是,与 AI 机器人相比,他们大幅减少了“漏掉”的漏洞数量。

3. 坏漏洞的“秘密配方”

这项研究确切地发现了什么使得一个漏洞更有可能逃过检测。这并非关乎代码内部复杂的逻辑,而是关乎文件的历史和结构

那些逃逸的漏洞最有可能出现在:

  • 旧代码: 存在时间很长的文件。
  • 大代码: 难以导航的大型文件。
  • 混乱的代码: 被许多人频繁修改的文件。
  • 复杂的代码: 与系统其他部分有大量连接的文件。

这就像发现那些日后最可能损坏的玩具,是那些在仓库里存放多年、由太多小零件组成、并由不断轮换的不同工人组装而成的玩具。

4. 两种不同的语言

最后,研究人员问道:"AI 对代码的‘理解’和‘数字’(指标)是否传达了相同的信息?”

  • 答案: 不。它们就像两种不同的语言。
  • 指标告诉你关于结构历史的信息(代码的“形状”)。
  • AI 嵌入(AI 的内部理解)告诉你关于含义语义的信息(代码试图做什么)。
  • 研究表明,这两类信息占据完全不同的空间。它们是互补的,意味着它们互不重叠。然而,当研究人员尝试将它们合并成一个超级模型时,AI 变得困惑,表现反而更差。看来,就目前而言,简单的数字是完成这项特定工作最可靠的工具。

核心结论

如果你想找出在你发布软件后会引发故障的漏洞,不要依赖花哨的 AI 来“阅读”代码并猜测。相反,要查看统计数据:检查文件的年龄、大小和变更历史。

最佳策略是使用一个简单、快速的计算机模型来标记那些“旧、大且混乱”的文件,以便进行额外的人工检查。这不会捕获每一个漏洞,但它将捕获绝大多数通常漏网的危险漏洞。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →