Add methodology

This commit is contained in:
Raffaele Mignone 2021-06-14 17:43:32 +02:00
parent db68c4baf1
commit 5c8637b5f1
Signed by: norangebit
GPG Key ID: F5255658CB220573

View File

@ -1,4 +1,4 @@
# Metodologia {#sec:methodology} # Costruzione del dataset e metodologia {#sec:methodology}
## Research Questions ## Research Questions
@ -135,3 +135,59 @@ La classificazione è avvenuta attraverso la lista delle issues citate all'inter
![Risultato della classificazione dei commit](figures/count-commit.pdf){#fig:count-commit width=80%} ![Risultato della classificazione dei commit](figures/count-commit.pdf){#fig:count-commit width=80%}
## Metodologia
### RQ1: come il ML e' distribuito sull'architettura dei progetti? {#sec:rq1}
In questa prima analisi si è andato a verificare l'esistenza di una differenza nei files e nelle directories modificate in base al tipo di cambiamento.
Per poter svolgere questa analisi è stato necessario individuare il numero totale di file modificati per *fix* generici e per i *fix* specifici del \acl{ML}.
A tal fine i commit sono stati raggruppati rispetto al progetto e al tipo di cambiamento (\ac{ML}, no \ac{ML}) e per ogni istanza di questo raggruppamento si è eseguito l'union set dei files modificati.
Come output di questa fase si è generato per ogni progetto:
- l'insieme dei file modificati per *fix* di \ac{ML}
- l'insieme dei file modificati per fix generici
Infine eseguendo l'union set tra questi due insiemi si è ottenere l'insieme totale dei files modificati durante i *fix*.
In questo modo è stato possibile andare a valutare la percentuale di files modificati in relazione al tipo di cambiamento.
Attraverso la funzione di libreria Python `os.path.dirname` sono stati ottenuti i tre insiemi sopra citati anche per quanto riguarda le directories.
Un'ulteriore analisi rispetto all'architettura dei progetti è stata svolta mediante gli import.
Attraverso uno script sono stati estratti, per ogni file, gli import utilizzati all'interno del file stesso.
A questo punto sono stati individuati i files di \acl{ML} in base agli import utilizzati.
La classificazione è avvenuta utilizzando due livelli di severità; in un primo (severità *strict*) caso sono stati considerati come import di \acl{ML} solo delle librerie strettamente di \ac{ML} come ad esempio `keras`, `TernsorFlow`, `PyTorch`, ecc.
Mentre in un secondo caso (severità *base*) sono state incluse anche librerie utilizzate spesso in ambito \ac{ML}, ma anche in altri ambiti, come ad esempio `pandas`, `numpy` e `scipy`.
### RQ2: come sono distribuiti i bug sulle diverse fasi di ML? {#sec:rq2}
Come illustrato nella @sec:classificazione-commit per poter determinare la natura di un *issue fix* si è fatto ricorso alla classificazione delle *issues* ad esso associate.
La maggior parte delle *issues* è stata classificata automaticamente, ma è stato comunque necessario classificarne una porzione in modo manuale per poter avere un train/test set.
Come detto precedentemente, nel caso delle *issues* classificate a mano, oltre all'individuazione della tipologia (\ac{ML}, non \ac{ML}) è stata individuata anche la fase in cui il problema si palesava (si veda @sec:classificazione-issues).
Questo dato aggiuntivo presente su alcune issues è stato *proiettato* anche sulla classificazione dei commit di *fix* per andare a valutare come questi sono distribuiti sulle varie fasi.
### RQ3: esiste una differenza di entropy tra ML bug e altri bug? {#sec:rq3}
La successiva analisi avevo lo scopo di verificare l'esistenza di una differenza tra l'entropia del *fix* rispetto alla natura di questi.
L'analisi è stata svolta sia a livello di file, sia a livello di linee, quindi per ogni commit del dataset è stato necessario individuare sia il numero di file che hanno subito delle modifiche, sia il numero di linee alterate, considerando in questo modo sia le aggiunte che le rimozioni.
Inoltre per poter valutare l'entità del cambiamento è stato necessario conoscere anche il numero totale di file e di linee di ogni progetto.
Questi valori sono stati calcolati attraverso la storia `git` del branch `master`[^branch-master].
Per ogni commit sono stati individuati i file aggiunti ($+1$) e rimossi ($-1$) in modo tale da poter calcolare il delta-cambiamento del commit.
Eseguendo la somma di questo delta su tutti i commit si è ottenuto il numero totale di file del progetto.
In modo analogo si è proceduto anche per quanto riguarda le linee.
[^branch-master]: Oltre al branch `master` è stato considerato anche il branch `main` diventato molto comune dopo le proteste del movimento Black Lives Matter e il branch `master-V2` unico branch utilizzato da un progetto.
### RQ4: come varia il livello di discussione tra ML bug e altri bug? {#sec:rq4}
Per rispondere a questa domanda è stato necessario andare a valutare il numero di commenti presenti all'interno di ogni issues.
Poiché un singolo commit può far riferimento a più issues è stato considerato il numero di commenti medi.
A questo punto si è cercato di capire se al maggior numero di commenti è associata effettivamente una maggiore quantità di informazioni scambiate.
Per svolgere questa analisi si è partiti dal presupposto che la quantità di informazioni scambiate sia proporzionale al numero di parole utilizzate nel commento.
Quindi per ogni *issue* è stato calcolato il numero medio di parole presenti all'interno di un commento.
### RQ5: come varia il time-to-fix tra ML bug e altri bug? {#sec:rq5}
In quest'ultima analisi si vuole andare a valutare se c'è differenza nel tempo necessario per eseguire il *fix*.
Per valutare questo parametro è stato necessario estrarre da ogni *issue* la data di apertura e di chiusura e calcolare i giorni che intercorrono tra queste.