From 57c03947219d98ea9a410cbd22a8734e3e326a20 Mon Sep 17 00:00:00 2001 From: norangebit Date: Tue, 8 Jun 2021 16:33:05 +0200 Subject: [PATCH] Add RQ1 --- src/chapter_3.md | 32 +++++++++++++++++++++++++- src/figures/files-and-directories.pdf | Bin 0 -> 12653 bytes src/figures/imports.pdf | Bin 0 -> 12473 bytes 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 src/figures/files-and-directories.pdf create mode 100644 src/figures/imports.pdf 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 0000000000000000000000000000000000000000..f254a1d4acf821527879b64ad315097f159e7d00 GIT binary patch literal 12653 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 F{{s*PWuE{5 literal 0 HcmV?d00001 diff --git a/src/figures/imports.pdf b/src/figures/imports.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fd23452d4993c98cb622e11ced8dbf950441be97 GIT binary patch literal 12473 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

4NYT>M)>b3-v( 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 r_+;=9_S8ggZ`d_4#?~Hz;EMF?vmc2@XB>5KZ^2