Studio di tecniche di predizione 'Just-in-Time' di commit difettosi nello sviluppo software in contesti di Continuous Integration 📚
All’interno di questa tesi di Laurea verranno trattate le tecniche di predizione di commit difettosi nell’ambito dello sviluppo del software usando la metodologia DevOps.
In particolare, ci si riferisce al modello Continuous Integration che prevede una pipeline di deployment ben definita, mostrata di seguito:
Innanzitutto, occorre definire cosa si intende con il termine commit, esso indica quell’operazione di aggiunta, modifica e/o rimozione di file all’interno di una cartella di lavoro, che può essere locale o distribuita; nel caso di directory distribuite ci si avvale del supporto di strumenti per il controllo di versione come GitHub. 🌐
In particolare, si affronta attraverso l’uso della metodologia del Just-in-Time Prediction, il problema dell’estrazione delle metriche a partire da un log di commit e la conseguente creazione di un file .csv. Il file con le metriche estratte dai commit viene diviso in tre sottoinsiemi, in particolare si avrà training set, validation set e testing set al fine di etichettare ogni commit come difettoso o meno con l’uso di particolari algoritmi di Machine Learning. 🧠
Per l'estrazione dei commit da un progetto su GitHub si è fatto uso del tool online CommitGuru che permette di effettuare tale operazione in maniera semplice ed intituiva come mostrato nella seguente Figura.
Per addestrare il modello di Just-in-Time Prediction occorre costruire, a partire dalla commit history, il training set contenente le metriche (feature) rilevanti al fine della classificazione dei commit come previsto da questa tecnica. In particolare, tramite lo stesso tool visto in precedenza si ottiene il file .csv con le metriche dei commit, come mostrato in Figura.
Per costruire i modelli predittivi si è scelto di confrontare le prestazioni di due diversi modelli nell'esecuzione del medesimo task di classificazione, in particolare si sono scelti un modello di Logistic Regression, particolarmente adatto a classificazioni binarie come nel nostro caso (il commit o è difettoso o non lo è), mentre l'altro modello scelto è il Random Forest che risulta un modello particolarmente utile quando si vogliono evitare troppi falsi positivi nei risultati di classificazione. Per effettuare l'addestramento di questi modelli si è usato Weka, un tool scritto in Java da un gruppo di ricerca dell'Università della Nuova Zelanda; esso permette di allenare un modello senza scrivere codice con il supporto di un'interfaccia grafica (come in Figura).
Poi ci si preoccupa di validare questo modello sottoponendogli il secondo insieme di commit, ovvero il validation set, che permette di verificare le prestazioni relative di un dato modello rispetto ad un altro al fine di scegliere il modello più opportuno per la predizione. 📊
Il terzo insieme di dati, non utilizzati nei passaggi precedenti, permette di testare il modello scelto, da cui il nome testing set; con la fase di test del modello si ottengono le prestazioni in operation, ovvero si osserva come il modello si comporta nella predizione di nuovi commit rappresentativi di rilasci successivi. 📈
Per effettuare tale valutazione si possono utilizzare varie metriche, quelle scelte nel caso in esame sono tre ovvero:
-
la curva caratteristica di funzionamento del ricevitore (Area Under the receiver operating characteristic Curve, AUC);
-
il coefficiente di correlazione di Matthews (Matthews Correlation Coefficient, MCC);
-
il punteggio Brier (Brier Score).
Infine, si tratta un caso di studio particolare, quello dall’app Immuni nelle due versioni per sistemi operativi mobile, ovvero Android e iOS, al fine di mettere in pratica il processo di predizione ‘Just-in-Time’ e verificare alcuni risultati molto importanti.
-
Versione Android 📱 (
Logistic Regression -> AUC=0.551
,Random Forest -> AUC=0.527
) -
Versione iOS 🍏 (
Logistic Regression -> AUC=0.463
,Random Forest -> AUC=0.533
)