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.
- ID Articolo: 2510.12487
- Titolo: Diff-XYZ: A Benchmark for Evaluating Diff Understanding
- Autori: Evgeniy Glukhov, Michele Conti, Egor Bogomolov, Yaroslav Golubev, Alexander Bezzubov (JetBrains Research)
- Classificazione: cs.SE (Ingegneria del Software), cs.LG (Apprendimento Automatico)
- Conferenza di Pubblicazione: 39th Conference on Neural Information Processing Systems (NeurIPS 2025) Workshop: Deep Learning for Code in the Agentic Era
- Link Articolo: https://arxiv.org/abs/2510.12487
Questo articolo propone il benchmark Diff-XYZ per valutare la capacità dei modelli linguistici di grandi dimensioni di comprendere i diff del codice. Il benchmark comprende tre compiti di apprendimento supervisionato: apply (codice vecchio + diff → codice nuovo), anti-apply (codice nuovo - diff → codice vecchio) e generazione di diff (codice nuovo - codice vecchio → diff). I dati del benchmark provengono da commit reali in CommitPackFT, contenendo 1000 istanze di triple ⟨codice vecchio, codice nuovo, diff⟩. La ricerca rivela che diversi formati di diff dovrebbero essere scelti in base al caso d'uso e alla dimensione del modello, fornendo una base importante per lo sviluppo futuro di modelli di editing del codice.
Gli agenti moderni di editing del codice necessitano di gestire affidabilmente i diff del codice in modifiche e refactoring su larga scala nei repository, ma i metodi di valutazione esistenti presentano i seguenti problemi:
- Mancanza di ricerca sistematica sulla scelta del formato: Sebbene esistano molteplici formati di rappresentazione dei diff (unified diff, search-replace, ecc.), manca una ricerca sistematica di confronto tra formati
- Complessità della valutazione: I benchmark end-to-end esistenti (come SWE-bench) mescolano molteplici fattori (recupero, utilizzo di strumenti, ecc.), rendendo difficile isolare l'impatto del formato del diff
- Diversità dei modelli di fallimento: Le patch possono fallire a causa di errori di sintassi, mancata corrispondenza del contesto o errori logici, richiedendo un'analisi più granulare
- Valore pratico: L'elaborazione dei diff del codice è una capacità fondamentale per l'editing automatico del codice, la correzione di bug, la correzione della compilazione CI e altri compiti
- Significato teorico: Comprendere come gli LLM elaborano informazioni di editing strutturate è importante per migliorare i modelli di generazione del codice
- Valore ingegneristico: Fornisce una guida basata su dati per la scelta del formato di diff appropriato
- Propone il benchmark Diff-XYZ: Un framework di valutazione leggero e riproducibile contenente tre compiti complementari
- Confronto sistematico dei formati: Primo confronto controllato di molteplici formati di rappresentazione dei diff
- Stabilisce baseline di performance: Dettagliate baseline di performance per modelli proprietari e open-source su compiti di comprensione dei diff
- Guida alla scelta del formato: Scopre le relazioni tra dimensione del modello, tipo di compito e scelta del formato ottimale
- Dataset aperto: Pubblica un dataset di valutazione di alta qualità su HuggingFace Hub
Basandosi sull'equazione diff = codice nuovo - codice vecchio, sono definiti tre compiti:
X. Compito di Applicazione (Apply Task)
- Input: Codice vecchio + diff
- Output: Codice nuovo
- Obiettivo: Testare la conformità al formato e la fedeltà a livello di carattere
Y. Compito di Anti-Applicazione (Anti-Apply Task)
- Input: Codice nuovo + diff
- Output: Codice vecchio
- Obiettivo: Sondare l'invertibilità del formato e l'assenza di perdita di dati
Z. Compito di Generazione di Diff (Diff Generation Task)
- Input: Codice vecchio + codice nuovo
- Output: diff
- Obiettivo: Testare la capacità affidabile di sintesi dei diff
Fonte dei dati: Commit reali da open-source nel dataset CommitPackFT
Strategia di filtraggio:
- Mantiene solo i commit con modifiche a file singolo
- Esclude file binari, codice generato, directory di fornitori
- Limite di righe di file: 40-1000 righe
- Esclude modifiche contenenti solo spazi bianchi
Campionamento stratificato:
- Distribuzione linguistica: Python, JavaScript, Java, Kotlin, Rust con 200 campioni ciascuno
- Complessità di editing: Stratificato per numero di blocchi di modifica e dimensione della modifica
- Editing piccolo: ≤7 righe modificate (40%)
- Editing medio: 8-24 righe modificate (40%)
- Editing grande: >24 righe modificate (20%)
- Tipo di modifica: 81,5% contiene aggiunte e eliminazioni, 16,3% solo aggiunte, 2,2% solo eliminazioni
Compiti Apply e Anti-Apply:
- Stripped Exact Match (EM): Tasso di corrispondenza esatta dopo rimozione di righe vuote
- Stripped Intersection over Union (IoU): Intersezione su unione a livello di riga
Compito Diff Generation:
- Parsing Rate: Proporzione di diff analizzabili
- Applying Rate: Proporzione di diff applicabili con successo
- EM/IoU after application: Tasso di corrispondenza esatta e IoU dopo l'applicazione del diff
- F1+ / F1-: Punteggio F1 per righe aggiunte e eliminate
- Complementarità della progettazione dei compiti: I tre compiti valutano in modo completo la capacità di comprensione dei diff da diverse prospettive
- Esperimenti con variabili controllate: Misura precisamente l'impatto del formato fissando il cambio di contesto
- Guidato da dati reali: Basato su commit reali piuttosto che dati sintetici, garantendo validità ecologica
- Valutazione multidimensionale: Combina correttezza sintattica, tasso di applicazione riuscita e correttezza semantica
- udiff: Formato unified diff standard
- udiff-h: Unified diff con intestazione del blocco rilassata
- udiff-l: Unified diff con etichette esplicite (ADD/DEL/CON)
- search-replace: Formato ricerca-sostituzione
Modelli proprietari:
- GPT-4o, GPT-4o-mini
- GPT-4.1, GPT-4.1-mini, GPT-4.1-nano
- Claude 4 Sonnet
- Gemini 2.5 Flash
Modelli open-source:
- Serie Qwen2.5-Coder (0.5B-32B)
- w/o format: Prompt generico di assistente
- w/ format: Prompt di sistema contenente descrizione del formato
Performance dei modelli proprietari:
- Claude 4 Sonnet mostra le migliori prestazioni nel compito Apply (EM: 0.95-0.96)
- GPT-4.1 ha prestazioni robuste su tutti i compiti, ma è sensibile ai prompt
- I modelli proprietari più piccoli (come GPT-4.1-nano) mostrano cali significativi nei compiti complessi
Leggi di scaling dei modelli open-source:
- La performance migliora chiaramente con la dimensione del modello
- Qwen2.5-Coder-32B si avvicina al livello di GPT-4o su Apply/Anti-Apply
- Ma rimane un divario significativo su Diff Generation
Scoperte chiave:
- Dipendenza dal compito:
- Apply/Anti-Apply: Il formato udiff mostra le migliori prestazioni
- Diff Generation: search-replace è superiore per i modelli grandi
- Effetti della dimensione del modello:
- Modelli grandi: search-replace si distingue nei compiti di generazione
- Modelli piccoli: udiff-l (con etichette esplicite) è più efficace
- Analisi delle caratteristiche del formato:
- Vantaggi di search-replace: Evita vincoli globali, gli editing locali sono indipendenti
- Svantaggi di udiff-h: La rimozione dei numeri di riga causa confusione strutturale
- Vantaggi di udiff-l: Le etichette esplicite riducono i conflitti di etichettatura
Impatto dei prompt:
- Il compito Diff Generation è altamente sensibile alle descrizioni del formato
- GPT-4.1 senza descrizione del formato tende a produrre formato V4A
- Il compito Apply è relativamente robusto ai cambiamenti di prompt
Differenze linguistiche:
- Performance relativamente coerente tra i cinque linguaggi di programmazione
- Prestazioni leggermente migliori su Python e JavaScript rispetto ad altri linguaggi
- HumanEval/MBPP: Generazione di codice a livello di funzione
- BigCodeBench: Compiti di chiamata di librerie complesse
- Limitazioni: Focalizzati principalmente sulla generazione da zero, non coinvolgono rappresentazioni di editing
- SWE-bench: Risoluzione di problemi GitHub reali
- CodeEditorBench: Editing con seguimento di istruzioni
- Limitazioni: Valutazione end-to-end, difficile isolare l'impatto del formato
- Complementarità: Focalizzato sulla ricerca isolata di rappresentazioni di editing
- Leggerezza: Non richiede configurazione di repository o ambienti di esecuzione
- Controllabilità: Contesto di compito fisso, formato di rappresentazione variabile
- La scelta del formato è cruciale: Diversi formati mostrano prestazioni significativamente diverse in diversi compiti e dimensioni di modello
- Specificità del compito: I compiti di generazione e applicazione richiedono formati ottimali diversi
- Dipendenza dalla dimensione: Le strategie ottimali differiscono tra modelli piccoli e grandi
- Divario nella realtà: I modelli open-source hanno ancora ampio spazio di miglioramento nella generazione di diff
- Semplificazione dei compiti: I compiti del benchmark sono proxy semplificati di applicazioni downstream
- Ambito di valutazione: Considera solo la decodifica greedy, non coinvolge ragionamento o utilizzo di strumenti
- Copertura dei formati: Non copre formati a livello di AST o patch strutturate
- Connessione downstream: Manca la connessione quantitativa tra performance del benchmark e effetti di applicazione reale
- Estensione dei formati: Esplorare rappresentazioni di editing a struttura ad albero e a livello di AST
- Connessione downstream: Stabilire il collegamento tra performance del benchmark e effetti di applicazione reale
- Capacità di ragionamento: Valutare scenari di ragionamento multistep e utilizzo di strumenti
- Recupero da errori: Ricercare la gestione di diff parziali o corrotti
- Definizione del problema chiara: Identifica accuratamente la comprensione dei diff come capacità fondamentale ma trascurata
- Progettazione sperimentale rigorosa: Il metodo di confronto dei formati con variabili controllate è scientificamente affidabile
- Qualità elevata dei dati: Basato su commit reali, il campionamento stratificato garantisce rappresentatività
- Scoperte di valore: La guida alla scelta del formato ha valore pratico diretto
- Forte riproducibilità: Configurazione sperimentale dettagliata e dataset aperto
- Profondità teorica limitata: L'analisi teorica dei meccanismi delle differenze di formato non è sufficientemente approfondita
- Dimensione di valutazione singola: Focalizzato principalmente sulla correttezza, manca considerazione di efficienza e leggibilità
- Copertura di modelli incompleta: I modelli open-source sono principalmente concentrati sulla serie Qwen
- Scenari di applicazione limitati: Non considera editing interattivo e scenari di aggiornamento incrementale
- Valore accademico: Colma un importante vuoto nella valutazione dell'editing del codice, potrebbe catalizzare ricerche successive
- Valore ingegneristico: Fornisce supporto dati per l'industria nella scelta del formato di diff
- Contributo alla comunità: Il benchmark aperto e il dataset beneficeranno l'intera comunità di ricerca
- Potenziale di standardizzazione: Potrebbe diventare un benchmark standard per la valutazione della capacità di editing del codice
- Sviluppo di modelli: Valutazione e miglioramento della capacità di modelli di editing del codice
- Progettazione di formati: Verifica dell'efficacia di nuovi formati di diff
- Scelta di strumenti: Scelta della strategia di formato per strumenti di editing del codice
- Base di ricerca: Test di capacità di base per compiti di editing del codice complessi
L'articolo cita 31 lavori correlati, principalmente includenti:
- Benchmark di generazione del codice: HumanEval, MBPP, BigCodeBench, ecc.
- Valutazione di editing: SWE-bench, CodeEditorBench, ecc.
- Rapporti tecnici di modelli: GPT-4o, Claude, Qwen2.5-Coder, ecc.
- Strumenti e formati: Aider, GNU diffutils, ecc.
Valutazione complessiva: Questo è un articolo di ricerca di alta qualità e sistematico che identifica e risolve accuratamente un importante problema nel campo dell'editing del codice. Sebbene presenti alcune insufficienze nella profondità teorica, il suo valore pratico e i contributi metodologici sono significativi, con importanza notevole nel promuovere lo sviluppo della tecnologia di editing del codice.