Nuovo dataset migliora la previsione dei difetti nel software
Il dataset dei difetti offre una risorsa completa per prevedere i difetti del software in modo efficace.
― 5 leggere min
Indice
- La necessità di un buon dataset
- Introduzione del dataset Defectors
- Importanza della diversità
- Descrizione dettagliata del dataset
- Come è stato costruito il dataset
- Raccolta degli impegni di correzione bug
- Identificazione dei commit che inducono bug
- Pulizia dei dati
- Test e convalida
- Applicazioni potenziali
- Conclusione
- Fonte originale
- Link di riferimento
La Previsione dei difetti è un argomento importante nello sviluppo del software. Aiuta a trovare problemi nel codice prima che il software venga usato dalle persone. Questi problemi, spesso chiamati "bug", possono far funzionare il software in modo errato. Risolvere questi bug può costare un sacco di soldi ogni anno. Anche con buoni controlli di qualità, i bug possono comunque finire nel prodotto finale. Studi recenti mostrano che una piccola parte del codice può essere responsabile della maggior parte dei bug. Quindi, diventa fondamentale concentrarsi sulle parti del codice che sono più a rischio.
La necessità di un buon dataset
Per prevedere i difetti in modo efficace, vengono spesso utilizzate tecniche di machine learning (ML) e deep learning (DL). Queste tecniche funzionano meglio quando hanno dataset grandi e di alta qualità da cui imparare. Molti dei dataset esistenti per la previsione dei difetti non sono abbastanza grandi o hanno una mescolanza disomogenea di codice con e senza bug. Questo può portare a prestazioni scadenti dei modelli addestrati su di essi. La maggior parte di questi dataset proviene da progetti limitati o organizzazioni specifiche, il che rende difficile per i modelli funzionare bene in diversi tipi di software.
Introduzione del dataset Defectors
Per affrontare i problemi con i dataset attuali, è stato creato un nuovo dataset chiamato Defectors. Questo dataset contiene un gran numero di file di codice sorgente-oltre 213.000 file in totale-con circa 93.000 di essi che presentano difetti e circa 120.000 senza difetti. I file sono stati raccolti da 24 progetti Python noti in 18 diversi settori, come machine learning, automazione e internet delle cose. La dimensione e la varietà del dataset lo rendono eccellente per addestrare modelli per la previsione dei difetti.
Importanza della diversità
Defectors è unico perché include progetti provenienti da diversi settori e organizzazioni. Questa diversità significa che i modelli addestrati su questo dataset sono probabilmente più performanti quando applicati a vari progetti software. A differenza di molti dataset esistenti che si concentrano su progetti Java, Defectors è costruito da progetti Python, aggiungendo ulteriore varietà.
Descrizione dettagliata del dataset
Il dataset è organizzato in un formato strutturato, il che lo rende facile da usare. Gli utenti possono trovare i file difettosi e quelli senza difetti insieme a informazioni sui cambiamenti apportati al codice. Questo dataset è suddiviso in set di addestramento, convalida e test, rendendolo adatto per addestrare modelli grandi sulla previsione dei difetti. Il set di addestramento mantiene un equilibrio tra le istanze difettose e quelle non difettose, mentre i set di test e convalida riflettono la distribuzione originale dei difetti.
Come è stato costruito il dataset
La creazione di Defectors ha comportato diversi passaggi per garantire qualità e affidabilità. In primo luogo, i progetti sono stati scelti in base alla loro popolarità e ad altri fattori di qualità, come la coerenza nella etichettatura dei bug. I ricercatori hanno raccolto le modifiche di Correzione dei bug da questi progetti.
Hanno applicato un algoritmo per identificare quali cambiamenti di codice hanno causato i bug e poi hanno filtrato le modifiche irrilevanti. Questo filtraggio era necessario per ridurre i falsi positivi-situazioni in cui le buone modifiche sono erroneamente etichettate come difettose. Sono stati intrapresi diversi passaggi per garantire che il dataset finale fosse accurato e affidabile.
Raccolta degli impegni di correzione bug
Nel processo di costruzione del dataset, i ricercatori hanno analizzato i sistemi di gestione dei bug dei progetti per raccogliere le modifiche di correzione bug. Hanno raccolto migliaia di pull request (PR), che sono aggiornamenti apportati ai progetti. Dopo aver raccolto queste PR, hanno ottenuto i corrispondenti commit che hanno corretto i bug. L'obiettivo era raccogliere abbastanza dati per un'analisi significativa.
Identificazione dei commit che inducono bug
Per scoprire quali cambiamenti hanno causato i bug, i ricercatori hanno usato un algoritmo specifico noto come SZZ. Questo algoritmo aiuta a risalire ai cambiamenti che hanno portato a un bug. Tuttavia, questo processo produce spesso molti falsi positivi, che possono confondere i risultati. Pertanto, sono stati applicati diversi passaggi di filtraggio per pulire i dati, assicurando che fossero mantenuti solo i cambiamenti pertinenti che inducono bug.
Pulizia dei dati
La pulizia del dataset ha comportato diversi metodi. Ad esempio, se molti cambiamenti che inducono bug erano legati a un singolo commit di correzione bug, questo era visto come un segno di rumore. Pertanto, quei commit che avevano connessioni con troppi cambiamenti sono stati scartati. Hanno anche rimosso qualsiasi cambiamento che ha influenzato troppi file o righe di codice, poiché questi potrebbero indicare modifiche non correlate.
Inoltre, sono stati mantenuti solo i cambiamenti relativi ai file Python per mantenere la coerenza all'interno del dataset. Le modifiche che erano banali, come l'aggiornamento dei commenti o il formattare, sono state scartate poiché non avrebbero portato a nuovi bug.
Test e convalida
Una volta preparato il dataset, è stato suddiviso in diversi set per addestramento e test. Il set di addestramento era bilanciato per garantire un numero uguale di istanze difettose e non difettose. Nel frattempo, i set di convalida e test mantenevano la distribuzione originale dei difetti. Questo approccio assicura che i modelli addestrati su questo dataset possano essere valutati e perfezionati in modo efficace.
Applicazioni potenziali
Il dataset Defectors può essere utilizzato in vari modi. Aiuta a prevedere i difetti a diversi livelli, come quello della riga, del metodo o del file. Inoltre, la sua struttura rende possibile adattare il dataset per un'analisi approfondita dei processi di correzione dei bug. Sfruttando questo dataset, gli sviluppatori possono creare strumenti migliori per rilevare e spiegare i difetti, portando infine a una maggiore qualità del software.
Conclusione
La previsione dei difetti è cruciale per migliorare la qualità del software, e il dataset Defectors si distingue come una risorsa potente in quest'area. Con la sua grande scala, distribuzione bilanciata delle classi e diversità tra progetti e domini, può migliorare significativamente l'efficacia dei modelli ML e DL nella previsione dei difetti software. Fornendo un dataset affidabile e completo, possiamo fare progressi nel campo dell'ingegneria del software, assicurandoci che i bug vengano catturati in anticipo e risolti prontamente.
Titolo: Defectors: A Large, Diverse Python Dataset for Defect Prediction
Estratto: Defect prediction has been a popular research topic where machine learning (ML) and deep learning (DL) have found numerous applications. However, these ML/DL-based defect prediction models are often limited by the quality and size of their datasets. In this paper, we present Defectors, a large dataset for just-in-time and line-level defect prediction. Defectors consists of $\approx$ 213K source code files ($\approx$ 93K defective and $\approx$ 120K defect-free) that span across 24 popular Python projects. These projects come from 18 different domains, including machine learning, automation, and internet-of-things. Such a scale and diversity make Defectors a suitable dataset for training ML/DL models, especially transformer models that require large and diverse datasets. We also foresee several application areas of our dataset including defect prediction and defect explanation. Dataset link: https://doi.org/10.5281/zenodo.7708984
Autori: Parvez Mahbub, Ohiduzzaman Shuvo, Mohammad Masudur Rahman
Ultimo aggiornamento: 2023-07-25 00:00:00
Lingua: English
URL di origine: https://arxiv.org/abs/2303.04738
Fonte PDF: https://arxiv.org/pdf/2303.04738
Licenza: https://creativecommons.org/licenses/by-nc-sa/4.0/
Modifiche: Questa sintesi è stata creata con l'assistenza di AI e potrebbe presentare delle imprecisioni. Per informazioni accurate, consultare i documenti originali collegati qui.
Si ringrazia arxiv per l'utilizzo della sua interoperabilità ad accesso aperto.