Decided or Open? Comparing Program Repair Techniques When Patch Correctness Is Unknown
Questo articolo propone un framework "deciso o aperto" per confrontare le tecniche di riparazione automatica dei programmi sotto incertezza, calcolando l'intero intervallo delle possibili differenze nei tassi di successo, consentendo ai ricercatori di identificare quali confronti possano essere risolti con ulteriori test e rivelando discrepanze significative nell'affidabilità dei risultati dei test archiviati tra diversi modelli.
Articolo originale sotto licenza CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). Questa è una spiegazione generata dall'IA dell'articolo qui sotto. Non è stata scritta né approvata dagli autori. Per precisione tecnica, consulta l'articolo originale. Leggi il disclaimer completo
Nel mondo del software, i programmi inevitabilmente si rompono. Quando un pezzo di codice non riesce a fare ciò che dovrebbe fare, uno sviluppatore deve trovare l'errore e scrivere una nuova versione del codice per correggerlo. Questo processo è lento e difficile, quindi i ricercatori hanno trascorso decenni cercando di costruire programmi informatici che possano eseguire la riparazione in modo automatico. Questi strumenti automatizzati scansionano un programma interrotto, generano migliaia di possibili soluzioni e cercano di scegliere quella che funziona. Per sapere se questi strumenti stanno migliorando, gli scienziati li confrontano tra loro. Eseguono gli strumenti su un insieme di programmi noti per essere interrotti e contano quante volte ogni strumento produce una correzione corretta. Ma c'è un problema nascosto in questo confronto: spesso, gli scienziati non sanno realmente se una correzione generata sia corretta. Una correzione potrebbe superare i test eseguiti dal computer, ma ciò non garantisce che sia giusta; potrebbe essere solo una bugia astuta che per caso funziona per le domande specifiche poste. Senza un essere umano che controlli il lavoro, molte correzioni rimangono in una zona grigia, etichettate né come giuste né come sbagliate.
Questa incertezza rende impossibile dire con certezza quale strumento di riparazione automatica sia davvero il migliore. Se due strumenti vengono confrontati, e il risultato dipende da una manciata di correzioni non verificate, il vincitore potrebbe essere solo un colpo di fortuna. Un nuovo studio di Sadnan Nafis della BRAC University affronta questo problema frontalmente. Inveve di cercare di indovinare la risposta per ogni singola correzione non verificata, il ricercatore ha sviluppato un modo per misurare l'intervallo delle possibili esiti. Ha posto una domanda semplice ma potente: dati i dati che già abbiamo, il vincitore di un confronto è stabilito, o dipende interamente dalle correzioni sconosciute? Calcolando lo scenario migliore e quello peggiore per ogni possibile valore dei dati mancanti, lo studio determina se un confronto è "deciso" o "aperto". Un confronto deciso significa che, indipendentemente da come si rivelino le correzioni sconosciute, lo stesso strumento vince. Un confronto aperto significa che il vincitore potrebbe cambiare a seconda dei dati mancanti.
Lo studio ha applicato questo metodo a un enorme archivio di tentativi di riparazione che coinvolge quasi 55.000 correzioni candidate per 488 bug differenti. I ricercatori hanno scoperto che per la maggior parte dei confronti tra uno strumento intelligente, basato sull'apprendimento, e i suoi rivali più semplici, la risposta era già decisa dai dati in loro possesso. In dodici casi su sedici, lo strumento di apprendimento era chiaramente migliore, e questa conclusione rimaneva valida anche se ogni singola correzione sconosciuta si fosse rivelata errata. Tuttavia, quattro confronti sono rimasti aperti, il che significa che il vincitore dipendeva dalle correzioni non verificate. I ricercatori hanno poi aggiunto ulteriori prove, eseguendo nuovamente il codice e chiedendo agli esseri umani di revisionare i casi complicati. Questo lavoro extra ha risolto tutti i sedici confronti, confermando che lo strumento di apprendimento era effettivamente il vincitore in ogni istanza. Ma lo studio ha anche rivelato che queste ultime quattro vittorie erano fragili; se anche solo poche delle nuove etichette fossero state errate, i risultati sarebbero potuti cambiare.
Una delle scoperte più sorprendenti è arrivata dal controllo dell'affidabilità del sistema di test stesso. I ricercatori hanno notato che a volte il sistema di test non riusciva a eseguire correttamente, marcando una correzione corretta come un fallimento. Per accertarlo, hanno esaminato i casi in cui il computer generava una copia perfetta della correzione originale dello sviluppatore umano. Poiché questa copia era nota per essere corretta, avrebbe dovuto superare ogni test. Se il sistema la marcava come un fallimento, il sistema era rotto. Hanno scoperto che ciò accadeva a ritmi molto diversi a seconda del modello di intelligenza artificiale che veniva testato. Per un modello popolare, il sistema rifiutava erroneamente la copia corretta nel 33,5% dei casi. Per un altro modello, ciò accadeva solo nel 2,5% dei casi. Ciò significava che il sistema di test stava penalizzando ingiustamente un modello rispetto all'altro, non perché il modello fosse peggiore, ma perché il sistema di test era più propenso a commettere errori con esso.
Lo studio ha anche introdotto un modo per prevedere il valore di futuri esperimenti prima ancora che inizino. Poiché eseguire un test può solo provare che una correzione è sbagliata, ma mai provare che è giusta, i ricercatori si sono resi conto che alcuni confronti non possono mai essere risolti solo tramite i test. Se l'esito migliore di una campagna di test è un pareggio, allora eseguire più test è una perdita di tempo. Hanno creato un "controllo pre-volo" che osserva i dati attuali e dice ai ricercatori esattamente quali confronti una nuova sessione di test potrebbe potenzialmente risolvere. In una prova reale, hanno pubblicato in anticipo le loro previsioni per una campagna di test imminente. Ogni singola previsione si è rivelata corretta: il controllo ha identificato correttamente quali confronti sarebbero stati risolti e quali sarebbero rimasti aperti, risparmiando ai ricercatori ore di esperimenti che non avrebbero mai potuto cambiare l'esito.
I risultati suggeriscono che il campo della riparazione automatizzata debba cambiare il modo in cui riporta i risultati. Invece di fornire un singolo numero che finge che tutti i dati siano noti, i ricercatori dovrebbero riportare l'intervallo delle possibilità. Questo approccio separa le conclusioni solide da quelle incerte. Dimostra che, mentre alcuni strumenti sono chiaramente superiori, altri sono troppo vicini per essere definiti senza ulteriori prove. Evidenzia anche che gli strumenti utilizzati per misurare il successo non sono perfetti e possono introdurre pregiudizi che favoriscono un modello rispetto a un altro. Utilizzando questi nuovi controlli, gli scienziati possono concentrare i loro sforzi sui confronti che necessitano effettivamente di più dati, piuttosto che inseguire risultati che sono già stati stabiliti o che sono impossibili da determinare. Il lavoro non risolve il problema di trovare la correzione perfetta, ma fornisce una mappa chiara di dove risiede la verità e dove essa rimane nascosta.
Sommerso dagli articoli nel tuo campo?
Ricevi digest giornalieri degli articoli più recenti corrispondenti alle tue parole chiave di ricerca — con riassunti tecnici, nella tua lingua.