← Ultimi articoli
💻 computer science

Is this Build Failure Related to my Patch? An Empirical Study of Unrelated Build Failures in Continuous Integration

Questo studio empirico analizza 77.354 fallimenti di build CI in sette progetti Apache per quantificare lo sforzo degli sviluppatori sprecato su fallimenti non correlati e dimostra che modelli di apprendimento semi-supervisionato Positive and Unlabeled (PU), che utilizzano caratteristiche come la latenza CI e i pattern di errore, possono prevedere efficacemente tali fallimenti non azionabili per aiutare gli sviluppatori a dare priorità ai loro sforzi di debug.

Autori originali: Andie Huang, Daniel Alencar da Costa, Grant Dick, Mariam El Mezouar

Pubblicato 2026-05-08
📖 5 min di lettura🧠 Approfondimento

Autori originali: Andie Huang, Daniel Alencar da Costa, Grant Dick, Mariam El Mezouar

Articolo originale sotto licenza CC BY 4.0 (http://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

Immagina di essere uno chef che lavora in una cucina molto affollata e caotica (questo è l'ambiente di Continuous Integration). Ogni pochi minuti arriva un nuovo ordine (un push di codice), e la cucina inizia automaticamente a preparare un pasto di prova per verificare se i nuovi ingredienti funzionano.

A volte, il pasto di prova brucia o ha un sapore terribile. Di solito, questo significa che lo chef che ha appena aggiunto i nuovi ingredienti ha commesso un errore. Ma a volte, l'allarme antincendio suona perché lo chef precedente ha lasciato acceso il fornello, o il forno si è rotto, o qualcun altro ha fatto cadere un vassoio nella stanza accanto. Questo è ciò che il documento definisce un "Fallimento di Build Non Correlato".

Il problema è che lo chef che ha appena aggiunto i nuovi ingredienti non sa perché il pasto è fallito. Passa ore (il documento indica una mediana di 4 ore) a controllare freneticamente le proprie spezie e i propri coltelli, cercando di dimostrare: "Non sono stato io!". Questo spreca molto tempo e causa stress.

Cosa hanno fatto i ricercatori

Gli autori (un team di ricercatori) hanno deciso di indagare su questo caos in cucina. Hanno esaminato 77.354 "pasti bruciati" (fallimenti di build) provenienti da 7 grandi progetti di software open source (come Apache Hadoop e HBase).

  1. Il lavoro da detective: Hanno letto manualmente migliaia di commenti lasciati dagli sviluppatori dopo un fallimento. Hanno cercato frasi come "questo non è correlato al mio cambiamento" o "non correlato". Hanno trovato circa 10.300 casi in cui gli sviluppatori hanno esplicitamente dichiarato: "Questo fallimento non è colpa mia".
  2. L'intervista: Hanno selezionato un campione più piccolo e rappresentativo di 371 di questi casi "non è colpa mia" e li hanno analizzati come un detective analizza una scena del crimine. Si sono chiesti: Perché gli sviluppatori hanno detto che non era colpa loro?
    • Le scoperte: Le ragioni più comuni erano:
      • Test non correlati: Il test fallito stava effettivamente verificando qualcosa di una parte diversa della cucina, non il nuovo ingrediente.
      • Interferenza esterna: Qualcosa fuori dalla cucina è cambiato (come un fornitore che consegna farina scadente a tutti).
      • Non riproducibile: L'incendio è accaduto una volta, ma quando hanno provato a preparare il pasto di nuovo, era tutto a posto (forse un picco di tensione casuale).
      • Il gruppo "Non specificato": Una grossa fetta (35%) delle volte, gli sviluppatori dicevano semplicemente "Non sono stato io" senza spiegare perché.

La soluzione: un "Assistente Intelligente"

Poiché gli sviluppatori non possono sempre spiegare perché un fallimento è non correlato immediatamente, i ricercatori hanno costruito un Assistente Intelligente (un modello di apprendimento automatico) per indovinare al posto loro.

Hanno utilizzato una tecnica speciale chiamata PU Learning (Apprendimento Positivo-Non Etichettato).

  • L'analogia: Immagina di voler insegnare a un cane a trovare un tipo specifico di palla. Hai alcune palle che sai essere del tipo giusto (gli esempi Positivi). Ma hai un enorme mucchio di palle miste in cui non sai quali siano del tipo giusto e quali no (il mucchio Non Etichettato). Non puoi semplicemente dire "tutto il resto è una palla sbagliata" perché alcune di esse potrebbero effettivamente essere del tipo giusto, semplicemente non le hai ancora controllate.
  • Come ha funzionato: I ricercatori hanno fornito al modello i "fallimenti non correlati noti" e il "mucchio sconosciuto". Il modello ha imparato a individuare schemi che suggeriscono che un fallimento è probabilmente non correlato, anche senza un'etichetta chiara.

Quanto era bravo l'assistente?

Il modello è stato testato sugli stessi 7 progetti.

  • Era molto bravo in precisione (quando diceva "Non è colpa tua", di solito aveva ragione, circa il 70% - 88% delle volte).
  • Era bravo nel ricordo (ha trovato la maggior parte dei fallimenti non correlati, anche se ne ha persi alcuni).
  • Ha superato significativamente il caso o regole semplici.

Le "Piste" usate dal modello

I ricercatori hanno trovato tre piste principali che hanno aiutato il modello a decidere se un fallimento era non correlato:

  1. Il divario temporale (Latenza CI): Se uno sviluppatore ha inviato del codice e ha aspettato molto tempo prima di attivare la build, è più probabile che qualcun altro abbia rotto la cucina nel frattempo.
  2. L'errore "Déjà Vu": Se il messaggio di errore assomiglia esattamente a uno che è accaduto di recente, è probabilmente una ripetizione di un vecchio problema, non uno nuovo causato dallo chef attuale.
  3. La chiacchierata: Se ci sono molti commenti sul problema prima che il fallimento accadesse, suggerisce che il problema è complesso e coinvolge probabilmente il lavoro di altre persone, non solo l'invio corrente.

La conclusione

Il documento conclude che utilizzando questo "Assistente Intelligente", gli sviluppatori possono ottenere un rapido indizio: "C'è un'alta probabilità che questo fallimento non sia colpa tua."

Questo non significa che possano ignorare il problema, ma dice loro: "Non passare 4 ore a controllare il tuo codice. Forse controlla il forno o chiedi all'altro chef". Questo li aiuta a smettere di perdere tempo su falsi allarmi e a tornare a cucinare (programmare) più velocemente.

Nota importante: Il documento si concentra interamente sull'identificazione di questi fallimenti nei progetti software. Non afferma che questo metodo funzioni per la diagnosi medica, il trading finanziario o qualsiasi altro campo al di fuori dello sviluppo software. È strettamente uno strumento per i team software per gestire il proprio caos in "cucina".

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.

Prova Digest →