Add methodology
This commit is contained in:
parent
db68c4baf1
commit
5c8637b5f1
@ -1,4 +1,4 @@
|
||||
# Metodologia {#sec:methodology}
|
||||
# Costruzione del dataset e metodologia {#sec:methodology}
|
||||
|
||||
## 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%}
|
||||
|
||||
## 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.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user