master-thesis/src/chapter_1.md

3.4 KiB

Introduzione

Lo sviluppo del software è stato caratterizzato da diversi cambiamenti rispetto alle applicazioni dominanti. Negli anni ottanta il paradigma dominante era quello dei personal computer, poi abbiamo avuto Internet a cui è seguita la nascita del Web al \ac{CERN}. Nel 2007 con l'annuncio del primo iPhone è inizia l'era del mobile computing a cui è seguita quella del cloud computing. Negli ultimi anni l'industria non è stata a guardare, ma ha dato vita a sempre più prodotti che fanno uso di \ac{AI} e \ac{ML}. Gli strumenti e i software che fanno uso di queste tecnologie sono ormai parte della nostra vita quotidiana e pervadono i campi più disparati. Tra questi sicuramente possiamo annoverare: riconoscimento di immagini, diagnosi di malattie, \ac{NLP}, guida autonoma e riconoscimento vocale.

La crescente produzione di software basato sul \ac{ML} ha generato un forte impulso anche per quanto riguarda la ricerca. L'attenzione non è stata puntata unicamente sullo studio di nuovi modelli e architetture, ma anche sul processo di sviluppo di questi prodotti per andare a valutare i vari problemi da un punto di vista ingegneristico. In letteratura non mancano studi atti ad evidenziare le differenze tra progetti di \ac{ML} e progetti classici [@gonzalez2020statemluniverse10], né tanto meno confronti dei progetti rispetto alle dipendenze e alle librerie utilizzate [@han2020empiricalstudydependency].

Molti studi sono, invece, incentrati sulle problematiche legate allo sviluppo di applicazioni di \ac{ML}. In alcuni casi l'analisi è stata svolta per librerie specifiche [@zhang2018empiricalstudytensorflow], in altri casi il focus è stato puntato sulle discussioni di \ac{SO} [@hassan2009predictingfaultsusing; @shannon1948mathematicaltheorycommunication]. In altri casi ancora l'attenzione è stata rivolta su problematiche specifiche come quella del \ac{SATD} [@liu2021exploratorystudyintroduction].

Anche il seguente lavoro si concentra sui difetti riscontrati all'interno delle applicazioni di \ac{ML}. In questo caso però la ricerca di differenze è legata agli interventi di issue fixing relativi al \ac{ML} rispetto ad interventi di correzione generici.

Obiettivi della tesi

Questo studio vuole verificare la presenza di differenze, all'interno di progetti di \ac{ML}, rispetto a come sono trattate le issue legate a tematiche di \ac{ML} e quelle generiche. In particolare si vuole investigare come la risoluzione di queste problematiche va ad impattare sull'architettura, sia in termini di moduli modificati sia in termini di entropia generata. Si vuole anche scoprire se sono presenti delle fasi del processo di sviluppo che sono più critiche di altre. Infine si vuole comprendere se le issue sono trattate tutte allo stesso modo per quanto riguarda il livello di discussione e il tempo necessario alla loro risoluzione.

Struttura della tesi

Nel capitolo [-@sec:related-works] viene svolta una panoramica sullo stato dell'arte. Nel capitolo [-@sec:methodology] vengono presentate le \ac{RQ}, viene descritta la procedura utilizzata per la raccolta dei commit e delle issue e come queste sono state classificate. Inoltre viene illustrata la metodologia di analisi impiegata per lo studio di ogni \ac{RQ}. I risultati delle analisi e una discussione qualitativa su alcuni casi estremi sono riportati nel capitolo [-@sec:results]. Infine il capitolo [-@sec:conclusions] chiude questa tesi.