SWE Refactor Bench 精读

论文链接:arXiv:2608.23564 项目主页:lab.einsia.ai/swe-refactor-bench 发表时间:2026年8月 机构:Naver’s Lab(韩国)+ Einsia.AI + 清华大学——跨国产学研合作:Naver 出研究问题与评测方法学,Einsia.AI 出工程构建(86.7 万行代码的容器化迁移环境),清华参与任务设计与分析 领域标签:cs.SE(软件工程 Agent 评测)

一、论文背景

技术栈迁移是什么? 把一个项目从旧技术栈搬到新的——C 改写为 Rust、Flask 换成 Starlette、POSIX 移植到 wasm32-wasi、Maven 切换 Gradle。这是真实软件工程中代价最高的一类工作:全仓库、长周期、且必须保持行为不变(迁移后的程序要和原来一样正确)。它恰恰也是"高级工程师才敢碰"的任务——完美对应"AI 能否承担资深工程工作"的考题。

现有基准的盲区在哪? SWE-bench 系评测(含 Verified、Senior、Multilingual 等)测的都是"局部修 bug":给一个 issue,改几行代码让测试通过。但迁移任务的结构完全不同——起点的测试套件本来就是全绿的。这意味着一个空 diff 提交(什么都不改)在任何行为测试下都是满分。论文把这个漏洞命名为 Blindness(盲区):行为测试只能证明"没改坏",永远无法证明"改了该改的"。这不是测试不够多的问题,而是评分维度缺失的问题——数学上,加多少行为测试都无法弥补。

为什么现在? 编码 Agent 在 SWE-bench Verified 上已进入 70%+ 时代,头部模型逼近饱和,行业急需能区分"高级能力"的下一代表基准。同期出现的 SWE Atlas Refactoring(Scale Labs)、Senior SWE-bench(Snorkel)说明"重构/迁移"正是公认的下一个战场,但它们仍未正面处理 Blindness。

二、论文定位和关联工作

基准任务形态Blindness 防御
SWE-bench Verified单点修 bug(起点测试有红)不需要(失败测试天然区分改没改)
SWE Atlas Refactoring行为保持的重构部分(任务构造上避免空 diff 得分,但无对抗验证)
SWE Refactor Bench全仓库迁移(起点测试全绿)三阶段协议:审计门 + 固定检查 + 对抗验证

本基准的差异化不仅在"更难",而在于协议设计:三个阶段各拦截一种独立失败模式(见第六节),使 520 个 run 的失败可以被归因——这是"评测科学"与"任务难度堆叠"的本质区别。

三、问题定义

具体场景:判断一个编码 Agent 完成的迁移提交是否既"完成了迁移"(旧栈确实被替换)又"保持了行为"(原功能全部可用)。

抽象问题:当行为测试对两种假设(“完成了迁移"与"原样交回”)都返回通过时,如何构造能区分它们的验收函数? 形式化:迁移任务起点 R_A 上任意行为套件 T⊆O 恒有 rate(R_A;T)=1,故空 diff 在任何 T 下得分 1 而迁移条件满足度为 0——唯一的解是在行为维度之外增加持否决权的第二检查维度。

四、问题解法

三阶段协议,每阶段针对一种失败模式:

4.1 Stage I:Migration Audit(迁移审计否决门)

LLM judge(gpt-5.6-sol)按仓库专属 criteria(262 条共 136 模块,如"构建脚本中不得再出现 Maven 坐标")对提交逐一提问,每条独立判 3 次取多数;任一条失败则整个 run 记 0 分。这直接封死"跳过迁移保行为"的漏洞。为防止 judge 不稳定:三采样 96.3% 全一致;与两名人类评委一致率 89.7%(κ=0.795),16 个分歧中 14 个是 judge 过严。

4.2 Stage II:Behavioural Tests(固定检查)

从原状态录制 130,118 条检查(平均每任务 6000+ 条,覆盖 API 响应、文件安装树、构建产物等),all-or-nothing:全对才过。录制式检查比"移植测试文件"更完备——它不依赖原仓库测试作者想到了什么。

4.3 Stage III:Agentic Verification(对抗验证)

6 个独立编码 Agent 各获 1 小时:5 个各攻一个指定方向(C ABI 兼容/路由集/安装树等),1 个不限方向。规则:只能提交"原版通过、迁移版失败"的可执行反例,且须先对参考实现转绿、再复现 3 次。这补足固定套件"作者没想到"的盲区——实例:Gin 在空格或分号处截断 Content-Type 而 chi 只在分号截断;SQLite WAL checkpoint 后 native 删 -wal+-shm 而 WASI 版只删 -wal。

计分:S = 1(审计过) × 1(检查全过) × (0.4+0.6·s/6)。任务全部离线容器化(无网络),每任务 6-30 小时自主预算。

五、评估指标与实验证据

规模:8 前沿模型 × 26 模型-努力配置 × 20 任务 = 520 runs。

关卡通过率
Stage I 迁移审计340/520(65.4%)
Stage II 固定检查(130,118 条)118/520(22.7%)
达到 Stage III(双过)88/520
全部三阶段通过28/520(5.4%)

模型排名:claude-opus-5(xhigh) 47.0 > gpt-5.6-sol 28.5 > kimi-k3 19.5 > sonnet-5 15.0 > qwen3.8-max 10.5 = luna 10.5 > glm-5.2 6.5 ≈ dsv4-flash 7.0。

三类失败几乎不重叠:30 个 run 靠跳过迁移保行为、252 个完成迁移但破坏行为、60 个被反例攻破——证明三门槛各测一种独立能力。

关键反差案例:dsv4-flash 行为通过率 90.7%(仅次于 opus)但最终得分仅 7.0、零接受——仅看行为测试会严重高估;三个零接受的模型分别有 3-4 个全过固定检查的 run,仅按固定套件它们会以"满分"并列第一。

“最后 1% 鸿沟”:140 个 run 落在 [99%,100%) 区间,中位缺 12.5 条检查、18 个恰好缺 1 条——如 fw03 四个模型同止于 21768/21769(hash 路由 /#/ 差异)、build03 五个模型同止于 380/381(wheel METADATA 空描述)。长尾完美主义是当前 Agent 的共性短板。

为什么这套设计有证明力:三阶段漏斗 + 失败模式互斥性 + judge/人类一致率 + 无同家族偏袒验证(opus 验证器破 opus 稿 40.8% vs 他稿 65.0%,系稿质量差异而非偏袒)——每个数字都能被独立复核。

六、效果优势的根源解释

本基准的"效果"是失败归因能力,其根源在三阶段的结构设计:

  1. Blindness 的形式化(Stage I 必要性):行为套件对空 diff 恒满分 ⇒ 评分维度缺失无法靠加测试弥补 ⇒ 必须有行为外的否决门。30 个 Blindness run 被审计门拦截。
  2. “迁移完成"与"行为保持"是反向能力:前者要求大规模改动(252 个 run 迁移成功但破坏行为),后者要求克制改动(30 个 run 克制过头没改)——单一阶段无法同时度量,双门漏斗(65.4%→22.7%)正是两能力的联合分布。
  3. 对抗验证补盲:88 个双过 run 中 60 个被 6-Agent 反例攻破——固定套件覆盖不到的语义边界(截断规则、文件系统副作用)只有"以 Agent 攻 Agent"能暴露;且反例出现中位时间 17 分钟,成本可控。

七、必要知识反推

  • 领域知识层:四大类迁移(语言/框架/平台/构建工具链)的语义边界陷阱——不知道"Gin 与 chi 的 Content-Type 截断差异"这类领域细节,写不出 262 条仓库专属审计 criteria;测试录制技术(从运行态录制 6000+ 条检查而非手工编写)。
  • 方法论知识层:基准有效性方法学(构造性偏置检测、judge 稳定性协议、对抗评估);漏斗式评分设计。
  • 工程知识层:86.7 万行代码的容器化离线环境构建;跨语言构建闭包验证(迁移后依赖树中不得残留旧栈)。

知识融合的关键节点:把"程序分析中的等价性检查"思想迁移到"Agent 评测”——迁移正确性本质是程序等价问题(行为等价 + 结构非等价),而程序等价不可判定,于是用"审计(结构)+ 测试(行为)+ 反例(对抗)“三面逼近——这是把理论不可判定性转化为工程可操作协议的漂亮示范。

八、论文中可以提取的通用性灵感

  1. 当验收函数对两种假设都返回"通过"时,必须增加第二维度(机制类)

    • 证据:空 diff 骗过任何行为测试;三阶段协议使三类失败互斥可归因。
    • 推广:任何"验收无法区分合格与不合格提交"的场景——审计(合规报告是否真实执行了整改 vs 只改了措辞)、教育(作业是否真理解 vs 抄袭改写)、安全(系统是否真修复 vs 绕过检测)——都需构造否决性第二检查。
  2. “完成改动"与"保持不变"是两种独立能力,需分开度量(机制类)

    • 证据:252 个 run 改了却改坏、30 个 run 没改却保真——两种失败几乎不重叠。
    • 推广:组织变革管理(推动变化的能力 vs 保护存量的能力)、产品迭代(加功能 vs 不破坏存量用户流程)都应分设考核线,混在一起会让"什么都不做的人"与"什么都敢改的人"同分。
  3. 对抗性验证暴露固定检查的盲区(信号利用类)

    • 证据:60/88 个双过 run 被 6-Agent 反例攻破,反例命中固定套件覆盖不到的语义边界。
    • 推广:红队安全测试、论文审稿中的"试图推翻结论"式审阅、质检中的"恶意用户模拟”——投入少量对抗性资源,收益远高于等量增加固定检查。
  4. 最后 1% 的鸿沟是共性短板(现象类)

    • 证据:140 个 run 卡在 [99%,100%),18 个恰好差 1 条检查。
    • 推广:自动化系统在"接近完成"阶段的边际成本急剧上升是普遍规律(自动驾驶边缘案例、数据清洗长尾),规划时应对最后 1% 预留不成比例的资源。