CQBench 把代码评测移到易错题:27346 题测静态质量,不测程序正确 | AGIDaily
AGI Daily
资讯日报词条论文人物新创

CQBench 把代码评测移到易错题:27346 题测静态质量,不测程序正确

2026-09-11 / 共 2,341 字

CQBench 论文作者

一个代码模型通过了功能测试,下一步应该测什么?9 月 11 日提交的 CQBench 给出的答案不是再加一批普通编程题,而是从近 79 万个真实函数任务中挑出 27346 个“易错题”:旧模型能写出不太空洞的实现,却常在同一题上触发多条静态缺陷或安全规则。新模型要在这些已知薄弱点上少留问题,才算过关。

这让代码评测从“能不能生成答案”推进到“答案会留下什么质量债”。代价也写在筛选方法里:CQBench 主动放大了失败,衡量的是模型面对已知易错任务时的鲁棒性,不是 AI 代码在真实项目中的总体缺陷率,更不能证明程序语义正确。

27346 题不是随机样本,而是三道门筛出的压力赛道

论文先建立了 787562 个函数级任务。Python 和 Java 来自 CodeSearchNet 衍生的 HMCorp,C 来自 TheVault;每个任务保留自然语言说明、函数签名与人类实现,再让 OpenAI、DeepSeek-Coder 和 Qwen2.5-Coder 生成对应实现。这里的“OpenAI”也不是同一个模型:Python、Java 使用 HMCorp 中的 gpt-3.5-turbo,C 使用 gpt-oss-20B,因此跨语言绝对数不能被当成单一模型的横向成绩。

在测量完整的 255879 个 Python、193837 个 Java 和 177611 个 C 任务上,作者依次设置三道门。

第一道门先排除近乎空实现:模型输出的平均有效代码行数或 Halstead Volume 至少达到人类参考的 10%。这个门槛只证明代码没有短到明显退化,不证明它完成了需求。

第二道门要求至少两个通过复杂度门的旧模型,各自触发不少于三条纳入统计的发现。第三道门再要求这些模型共享至少一个缺陷类别:要么是 ODC(正交缺陷分类)类型,要么是归一化后的 CWE 弱点类别。人类参考实现还必须能解析、包含目标函数,并且不是桩代码或常量式空操作。

最终留下 10354 个 Python、10103 个 Java 和 6889 个 C 任务。其中 13693 题由共同的 ODC 缺陷类型入选,3176 题由共同 CWE 入选,10477 题同时满足两类条件。仓库没有再截取一个预设的 Top-N,而是保留全部满足固定规则的任务。

这套构造最重要的信息不是“27346”有多大,而是分母发生了变化:它从普通任务集合变成了旧模型已经暴露过问题的集合。若模型在这里频繁失败,可以说它没有绕开已知故障模式;若它成绩很好,也只能说明对这批压力题更稳健,不能直接换算成生产代码事故率。

四类分析合在一起,仍没有跨过“程序是否正确”这条线

CQBench 用 Pylint、PMD 和 Clang-Tidy 分别检查 Python、Java 与 C,再把不同工具的规则映射到 ODC;安全问题由 Semgrep 扫描,并沿用规则自带的 CWE 与严重度。ODC 原本就是把具体缺陷归入可比较的类型,用缺陷分布反推开发过程,而不是判定某段代码是否满足业务需求。

对新模型,仓库的主指标 clean_strict_at_1 要求一次生成同时满足:可解析、目标函数存在且参数数量匹配、不是桩或常量空操作、结构不退化,并且没有被纳入的静态缺陷与安全发现。任务、参考实现、四组基线结果、冻结的 Semgrep 规则、ODC 映射、完整性哈希、原生与 Docker 执行路径都已公开。对 9 月 11 日前固定提交的工件核对显示,任务文件恰好包含 27346 个不重复主键,语言分布与论文一致;人类基线也能按同一批主键完整对齐。

但“严格干净”仍只是对这套分析器和规则干净。CQBench 不编译或运行提交,不提供覆盖每题行为的测试预言,也不判断两段实现是否语义等价。Semgrep 命中意味着代码形态符合某条弱点规则,不等于攻击者已经能够利用;没有命中也不等于没有漏洞。OWASP 对静态分析的定位同样是帮助审计者缩小检查范围,并明确提醒这类工具同时存在假阳性与假阴性。

人类参考代码在 CQBench 上也不天然是“无缺陷金标准”。论文用 Claude Opus 4.8 演示时,从三个入选分层按比例抽取每种语言 200 题。人类参考在 Python、Java、C 子集中分别有 62.0%、57.5% 和 72.0% 至少触发一项缺陷;Claude 则为 63.0%、64.5% 和 68.5%。这不是“Claude 与人类质量相当”的普遍结论,而是在故障富集的 600 题子集里,两者都频繁触发分析器规则。

更有用的结果是故障类型是否延续:Claude 在 62.8% 的样本上再次触发该题入选时的共同 ODC 或 CWE 类别。它说明 CQBench 捕捉到了一部分能跨模型延续的薄弱结构,也说明测试目标是复现已知故障类别,而不是寻找所有未知错误。

代码 Agent 需要两条证据链,而不是一个总分

CQBench 补的是“功能通过以后怎么办”,却不能独自回答“功能是否通过”。更稳妥的评测应把两条证据链分开:第一条用编译、单元测试、属性测试或可执行预言验证行为;第二条再用静态分析、依赖与配置检查、动态安全测试和人工审计寻找质量与安全债。两条都过,才接近可交付代码。

CWEval 提供了一个互补参照。它为 119 个安全敏感任务同时准备功能与安全测试预言,目标就是避免“功能测试通过”或“静态扫描没有报警”被单独当成安全结论。CQBench 的规模和故障富集适合做回归压力测试,CWEval 这类可执行安全任务则更接近验证结果;真实仓库还需要构建系统、调用上下文、依赖版本和运行配置。

因此,CQBench 最适合进入代码 Agent 的发布门禁,而不是宣传榜单:模型升级后,先看它是否仍在相同易错题上复发,再追到具体 ODC/CWE 类别;随后用可执行测试确认行为,用安全验证确认影响。真正值得跟踪的不是某个总分是否上升,而是模型能否在功能不退步的前提下,把反复出现的检查遗漏、接口错误、硬编码凭据、命令注入和内存安全问题逐类消掉。

来源

  • What is the Difference Between Me and You? Benchmarking the Quality Gap Between Human-Written and AI-Generated Code · arXiv
  • CQBench v1 replication package(2026-07-22 固定提交) · GitHub
  • CWEval: Rigorous Evaluation for Secure Code Generation · ARISE Lab
  • Static Code Analysis · OWASP Foundation
  • Orthogonal Defect Classification—A Concept for In-Process Measurements · IBM Research

评论

登录后即可参与评论。

加载评论中…

相关文章

  • ReviewBench 开放代码审查评测研究预览封面

    代码审查 Agent 不只要多抓 bug:ReviewBench 把噪声写进评测

    2026-10-05

  • SWE-bench 排行榜分辨率审计流程图:从逐题结果与不完整元数据,分析共同成败、模型与 scaffold 组合以及相邻排名能否区分

    SWE-bench 前 30 名挤成两到三档,小数点名次证据不足

    2026-09-15

  • 研究流程图:从 AIDev 数据集构造样本,经 GitHub 数据补充、补丁分析与 90 天合并后跟踪,进入统计检验

    3.7 万个 PR,为何仍排不出代码 Agent 质量榜

    2026-09-12

  • PatchBench 图表对比三种头部 Agent 的单一 PoC、安全验证与完整解题率
AGI Daily跟踪世界 AI 进展
邮件栏目主题RSS
定制投稿招聘广告
关于MCPTermsContact

AI 修漏洞,挡住一次崩溃还不够:新测试要求追查根因

2026-09-04

  • KC-Bench 论文展示的 Region、Retail 与 Personal Assistant 三类多轮冲突任务示意

    KC-Bench 把 Agent 的冲突处理拆成 238 个可执行任务

    2026-09-03

  • CADWorld 论文展示同一三棱柱任务的人类参考结果与多种 Agent 输出对比,外观相近的模型仍可能因结构或建模过程错误而失败

    CAD Agent 画得像还不够,CADWorld 把工程文件纳入判分

    2026-09-21