diff --git a/src/chapter_3.md b/src/chapter_3.md index 690c4f6..47c65df 100644 --- a/src/chapter_3.md +++ b/src/chapter_3.md @@ -2,6 +2,36 @@ ## RQ1: come il ML e' distribuito sull'architettura dei progetti? +In questa prima analisi si è voluto andare a vedere se esiste una differenza tra cambiamenti generici e cambiamenti legati al \ac{ML} rispetto ai file e le directories toccati da questi cambiamenti. +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}. +Per fare ciò, i commit sono stati raggruppati rispetto al progetto e al tipo di cambiamento (\ac{ML}, no \ac{ML}). +Per ogni ogni istanza di questo raggruppamento si è eseguito l'union set dei files modificati. +Come output di questa fase, per ogni progetto, si è ottenuto: + +- 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. + +Dalla @fig:files-directories si può notare che i cambiamenti generici vanno ad impattare su una superficie maggiore del sistema, sia che l'analisi sia svolta al livello di files che di directories. +Un'ulteriore aspetto interessante riguarda la varianza delle distribuzioni, infatti, indipendentemente dalla granularità dell'analisi, il dato riguardante i cambiamenti di \acl{ML} è caratterizzato da una maggiore varianza. + +![Percentuale di files e directories modificate in base al tipo di cambiamento](figures/files-and-directories.pdf){#fig:files-directories width=80%} + +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 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 sono state incluse anche librerie utilizzate spesso in ambito \ac{ML}, ma anche in altri ambiti, come ad esempio `pandas`, `numpy` e `scipy`. + +![Percentuale di file che utilizzano librerie di ML](figures/imports.pdf){#fig:imports width=70%} + +Dal boxplot riportato in @fig:imports si può notare che, indipendentemente dalla severità dell'analisi, la percentuale di file che utilizzano librerie di \acl{ML} è caratterizzata da una forte varianza. +Ciò ci indica che i progetti inclusi all'interno dello studio sono vari tra di loro. +Inoltre, considerando l'analisi *strict*, è possibile osservare come solo un $25\%$ dei progetti abbia una percentuale di files di \ac{ML} superiore al $45\%$. + ## RQ2: come sono distribuiti i bug sulle diverse fasi di ML? 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. @@ -90,7 +120,7 @@ I risultati così ottenuti sono stati riportati in @fig:day-to-fix. Anche in questo caso è possibile notare una netta differenza tra i *fix* di \ac{ML} e gli altri. In particolare i bug di \acl{ML} necessitano, mediamente, di maggior tempo per essere risolti e sono caratterizzati da una varianza maggiore. Inoltre è possibile vedere come la mediana non sia centrata, bensì spostata verso il basso. -Questo vuol dire che il $50\%$ basso dei *bug* di \ac{ML} viene comunque risolto in tempi brevi (tre giorni circa), mentre l'altro $50\%$ può richiedere una quantità di tempo decisamente superiore. +Questo vuol dire che il $50\%$ basso dei *bug* di \ac{ML} viene comunque risolto in tempi brevi (due giorni circa), mentre l'altro $50\%$ può richiedere una quantità di tempo decisamente superiore. Un'ulteriore testimonianza del maggior tempo necessario per risolvere le problematiche legate al \ac{ML} ci viene data dagli outlier. Nel caso di un problema generico, questo, viene considerato come *anomalo* se per essere risolto necessita di un tempo superiore ai cinque giorni. diff --git a/src/figures/files-and-directories.pdf b/src/figures/files-and-directories.pdf new file mode 100644 index 0000000..f254a1d Binary files /dev/null and b/src/figures/files-and-directories.pdf differ diff --git a/src/figures/imports.pdf b/src/figures/imports.pdf new file mode 100644 index 0000000..fd23452 Binary files /dev/null and b/src/figures/imports.pdf differ