2025-11-12T15:16:15.308508

Diff-XYZ: A Benchmark for Evaluating Diff Understanding

Glukhov, Conti, Bogomolov et al.
Reliable handling of code diffs is central to agents that edit and refactor repositories at scale. We introduce Diff-XYZ, a compact benchmark for code-diff understanding with three supervised tasks: apply (old code $+$ diff $\rightarrow$ new code), anti-apply (new code $-$ diff $\rightarrow$ old code), and diff generation (new code $-$ old code $\rightarrow$ diff). Instances in the benchmark are triples $\langle \textit{old code}, \textit{new code}, \textit{diff} \rangle$ drawn from real commits in CommitPackFT, paired with automatic metrics and a clear evaluation protocol. We use the benchmark to do a focused empirical study of the unified diff format and run a cross-format comparison of different diff representations. Our findings reveal that different formats should be used depending on the use case and model size. For example, representing diffs in search-replace format is good for larger models in the diff generation scenario, yet not suited well for diff analysis and smaller models. The Diff-XYZ benchmark is a reusable foundation for assessing and improving diff handling in LLMs that can aid future development of diff formats and models editing code. The dataset is published on HuggingFace Hub: https://huggingface.co/datasets/JetBrains-Research/diff-xyz.
academic

Diff-XYZ: A Benchmark for Evaluating Diff Understanding

基本信息

  • 论文ID: 2510.12487
  • 标题: Diff-XYZ: A Benchmark for Evaluating Diff Understanding
  • 作者: Evgeniy Glukhov, Michele Conti, Egor Bogomolov, Yaroslav Golubev, Alexander Bezzubov (JetBrains Research)
  • 分类: cs.SE (软件工程), cs.LG (机器学习)
  • 发表会议: 39th Conference on Neural Information Processing Systems (NeurIPS 2025) Workshop: Deep Learning for Code in the Agentic Era
  • 论文链接: https://arxiv.org/abs/2510.12487

摘要

本文提出了Diff-XYZ基准测试,用于评估大型语言模型对代码差异(diff)的理解能力。该基准包含三个监督学习任务:apply(旧代码+diff→新代码)、anti-apply(新代码-diff→旧代码)和diff生成(新代码-旧代码→diff)。基准数据来自CommitPackFT中的真实提交,包含1000个三元组实例⟨旧代码,新代码,diff⟩。研究发现不同的diff格式应根据使用场景和模型大小来选择,为未来代码编辑模型的发展提供了重要基础。

研究背景与动机

核心问题

现代代码编辑代理在大规模仓库编辑和重构中需要可靠处理代码差异,但现有评估方法存在以下问题:

  1. 格式选择缺乏系统研究:虽然存在多种diff表示格式(unified diff、search-replace等),但缺乏系统性的格式比较研究
  2. 评估复杂性:现有端到端基准(如SWE-bench)混合了多种因素(检索、工具使用等),难以隔离diff格式的影响
  3. 失败模式多样:补丁可能因语法错误、上下文不匹配或逻辑错误而失败,需要更细粒度的分析

研究重要性

  • 实用价值:代码diff处理是自动化代码编辑、bug修复、CI构建修复等任务的核心能力
  • 理论意义:理解LLM如何处理结构化编辑信息对改进代码生成模型具有重要意义
  • 工程价值:为选择合适的diff格式提供数据驱动的指导

核心贡献

  1. 提出Diff-XYZ基准:包含三个互补任务的轻量级、可复现的评估框架
  2. 系统性格式比较:首次对多种diff表示格式进行控制变量的系统比较
  3. 建立性能基线:为专有模型和开源模型在diff理解任务上建立了详细的性能基线
  4. 格式选择指导:发现了模型大小、任务类型与最优格式选择之间的关系
  5. 开放数据集:在HuggingFace Hub上发布了高质量的评估数据集

方法详解

任务定义

基于方程式 diff = new code - old code,定义三个任务:

X. Apply Task(应用任务)

  • 输入:旧代码 + diff
  • 输出:新代码
  • 目标:测试格式遵循性和字符级保真度

Y. Anti-Apply Task(反向应用任务)

  • 输入:新代码 + diff
  • 输出:旧代码
  • 目标:探测格式的可逆性和无损性

Z. Diff Generation Task(差异生成任务)

  • 输入:旧代码 + 新代码
  • 输出:diff
  • 目标:测试可靠的diff合成能力

数据集构建

数据来源:CommitPackFT数据集中的真实开源提交

过滤策略

  • 仅保留单文件修改的提交
  • 排除二进制文件、生成代码、供应商目录
  • 文件行数限制:40-1000行
  • 排除仅空白字符变更

分层采样

  • 语言分布:Python、JavaScript、Java、Kotlin、Rust各200个样本
  • 编辑复杂度:按变更块数和变更大小分层
    • 小型编辑:≤7行变更(40%)
    • 中型编辑:8-24行变更(40%)
    • 大型编辑:>24行变更(20%)
  • 变更类型:81.5%包含增删,16.3%仅增加,2.2%仅删除

评价指标

Apply和Anti-Apply任务

  • Stripped Exact Match (EM):去除空白行后的精确匹配率
  • Stripped Intersection over Union (IoU):行级别的交并比

Diff Generation任务

  • Parsing Rate:可解析的diff比例
  • Applying Rate:可成功应用的diff比例
  • EM/IoU after application:应用diff后的精确匹配率和IoU
  • F1+ / F1-:添加行和删除行的F1分数

技术创新点

  1. 任务设计的互补性:三个任务从不同角度全面评估diff理解能力
  2. 控制变量实验:通过固定上下文变化格式,精确测量格式影响
  3. 真实数据驱动:基于真实提交而非合成数据,确保生态有效性
  4. 多维度评估:结合语法正确性、应用成功率和语义正确性

实验设置

对比格式

  1. udiff:标准unified diff格式
  2. udiff-h:放宽块头的unified diff
  3. udiff-l:使用显式标记(ADD/DEL/CON)的unified diff
  4. search-replace:搜索替换格式

测试模型

专有模型

  • GPT-4o, GPT-4o-mini
  • GPT-4.1, GPT-4.1-mini, GPT-4.1-nano
  • Claude 4 Sonnet
  • Gemini 2.5 Flash

开源模型

  • Qwen2.5-Coder系列 (0.5B-32B)

提示策略

  • w/o format:通用助手提示
  • w/ format:包含格式描述的系统提示

实验结果

主要结果

专有模型表现

  • Claude 4 Sonnet在Apply任务上表现最佳(EM: 0.95-0.96)
  • GPT-4.1在所有任务上都有强劲表现,但对提示敏感
  • 较小的专有模型(如GPT-4.1-nano)在复杂任务上显著下降

开源模型缩放规律

  • 性能随模型规模明确提升
  • Qwen2.5-Coder-32B在Apply/Anti-Apply上接近GPT-4o水平
  • 但在Diff Generation上仍有显著差距

格式比较发现

关键发现

  1. 任务依赖性
    • Apply/Anti-Apply:udiff格式表现最佳
    • Diff Generation:search-replace对大模型更优
  2. 模型规模效应
    • 大模型:search-replace在生成任务中表现突出
    • 小模型:udiff-l(显式标记)效果最佳
  3. 格式特性分析
    • search-replace优势:避免全局约束,局部编辑独立
    • udiff-h劣势:去除行号支架导致结构混乱
    • udiff-l优势:显式标记减少标记冲突

消融实验结果

提示影响

  • Diff Generation任务对格式描述高度敏感
  • GPT-4.1无格式描述时倾向输出V4A格式
  • Apply任务对提示变化相对鲁棒

语言差异

  • 五种编程语言上表现相对一致
  • Python和JavaScript上稍优于其他语言

相关工作

代码生成基准

  • HumanEval/MBPP:函数级代码生成
  • BigCodeBench:复杂库调用任务
  • 局限性:主要关注从零生成,不涉及编辑表示

编辑和问题解决基准

  • SWE-bench:真实GitHub问题解决
  • CodeEditorBench:指令跟随编辑
  • 局限性:端到端评估,难以隔离格式影响

本文定位

  • 互补性:专注于编辑表示的隔离研究
  • 轻量化:无需仓库设置或执行环境
  • 控制性:固定任务上下文,变化表示格式

结论与讨论

主要结论

  1. 格式选择至关重要:不同格式在不同任务和模型规模下表现差异显著
  2. 任务特异性:生成和应用任务需要不同的最优格式
  3. 规模依赖性:小模型和大模型的最优策略不同
  4. 现实差距:开源模型在diff生成上仍有较大提升空间

局限性

  1. 简化任务:基准任务是下游应用的简化代理
  2. 评估范围:仅考虑贪心解码,未涉及推理或工具使用
  3. 格式覆盖:未涵盖AST级或结构化补丁格式
  4. 下游连接:缺乏与实际应用性能的定量关联

未来方向

  1. 扩展格式:探索树结构和AST级编辑表示
  2. 下游连接:建立基准性能与实际应用效果的关联
  3. 推理能力:评估多步推理和工具使用场景
  4. 错误恢复:研究部分或损坏diff的处理能力

深度评价

优点

  1. 问题定义清晰:准确识别了diff理解这一核心但被忽视的能力
  2. 实验设计严谨:控制变量的格式比较方法科学可靠
  3. 数据质量高:基于真实提交,分层采样确保代表性
  4. 发现有价值:格式选择指导具有直接实用价值
  5. 可复现性强:详细的实验设置和开放数据集

不足

  1. 理论深度有限:对格式差异机理的理论分析不够深入
  2. 评估维度单一:主要关注正确性,缺乏效率和可读性考虑
  3. 模型覆盖不全:开源模型主要集中在Qwen系列
  4. 应用场景局限:未考虑交互式编辑和增量更新场景

影响力

  1. 学术价值:填补了代码编辑评估的重要空白,可能催生后续研究
  2. 工程价值:为工业界选择diff格式提供数据支持
  3. 社区贡献:开放的基准和数据集将惠及整个研究社区
  4. 标准化潜力:可能成为代码编辑能力评估的标准基准

适用场景

  1. 模型开发:代码编辑模型的能力评估和改进
  2. 格式设计:新diff格式的效果验证
  3. 工具选择:代码编辑工具的格式策略选择
  4. 研究基础:复杂代码编辑任务的基础能力测试

参考文献

论文引用了31篇相关文献,主要包括:

  • 代码生成基准:HumanEval, MBPP, BigCodeBench等
  • 编辑评估:SWE-bench, CodeEditorBench等
  • 模型技术报告:GPT-4o, Claude, Qwen2.5-Coder等
  • 工具和格式:Aider, GNU diffutils等

总体评价:这是一篇高质量的系统性研究论文,准确识别并解决了代码编辑领域的重要问题。虽然在理论深度上有所不足,但其实用价值和方法论贡献显著,对推动代码编辑技术发展具有重要意义。