主动扫描背后的基准测试
周二,我们发布了“主动扫描”功能:只需一条命令,即可在任何崩溃发生之前,结合跨文件上下文对风险最高的文件进行排序并逐一读取分析。
今天,我们公开了支撑该功能的基准测试详情。全部内容包括:具体数据、方法论、初版误报的经历,以及它目前仍会遗漏的缺陷类型。
测试结果
共 28 个测试用例,均为本次基准测试全新编写。其中 20 个文件植入了缺陷,8 个无缺陷文件作为对照。
| 类别 | 得分 | 植入的缺陷类型 |
|---|---|---|
| 单文件缺陷 | 8/8 | SQL 注入、资源泄漏、除以零、可变默认参数、裸 except 语句、缺失 await、差一错误、硬编码密钥 |
| 跨文件缺陷 | 12/12 | 参数数量错误、缺失导出、返回结构不匹配、类型不匹配、零值配置、接口漂移、异步竞态条件、函数重命名、泛型类型滥用、可选与空值流、配置取模问题、回调参数 arity |
| 干净文件上的误报 | 0/8 | 错误处理、executemany 调用、类型收窄、异步模式、可选链式调用、类设计 |
测试于 2026 年 7 月 2 日针对我们的预发布应用程序接口运行,该环境使用与生产环境相同的流水线:使用 Voyage 嵌入模型构建代码库索引,使用 Claude Haiku 4.5 进行分析。
这是由我们评分的语料库,样本量 n=28。 这表明扫描功能实现了我们的设计目标。但这并不意味着我们击败了任何竞争对手。我们没有运行任何竞品对比测试,因此这里没有任何竞品数据。
为何我们要从头编写测试用例
构建此基准测试的偷懒方法是直接从流行的开源仓库中抓取已知缺陷。我们内部回归测试中恰好就有这样的现成数据。但我们没有发布它,原因只有一个:模型已经阅读过那些仓库。如果检测器依靠训练数据识别出著名的 React 缺陷,那它做的是记忆召回,而非分析。
因此,这 28 个用例均是在六月下旬全新编写的。代码原创,植入的缺陷也是原创,虽模仿现实世界中的故障模式,但并未复制任何公开内容。没有任何模型见过这些用例。
跨文件用例示例
单文件用例是基本门槛。任何像样的静态检查工具都能标记出裸 except 语句。而这 12 个跨文件用例才是该扫描功能存在的理由,因为除非工具了解你项目的其余部分,否则这些缺陷是不可见的。
以下是 XF-05 用例,包含两个经过精简的文件:
# limits.py
# 每个时间窗口的请求数;0 表示禁用(但调用方会除以该值)
WINDOW_SLOTS = 0
# rate.py
from limits import WINDOW_SLOTS
def per_slot(total):
return total / WINDOW_SLOTS
rate.py 单独看完美无缺。每一行都是正确的。缺陷存在于文件间的关系中:另一个文件中的配置值为零,而当前文件对其执行除法运算。将单文件工具指向 rate.py,它会束手无策。而本扫描功能会对两个文件建立索引,在读取 rate.py 时将 limits.py 作为上下文引入,从而报告即将发生的 ZeroDivisionError(除以零错误)。
这就是
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。