ASATDD
ASATDD: an Automatic Self-Admitted Technical Debt Detection tool
ASATDD
E N D
Presentation Transcript
Cosa sono i Self-Admitted Technical Debt? “Shipping first time code is like going into debt. A little debt speeds development so long as it is paid back promptly with a rewrite... The danger occurs when the debt is not repaid. Every minute spent on not-quite-right code counts as interest on that debt. Entire engineering organizations can be brought to a stand-still under the debt load of an unconsolidated implementation, object-oriented or otherwise.“ [Ward Cunningham] Self-admitted technical debt (SATD) is a particular form of technical debt: developers consciously perform the hack but also document it in the code by adding comments as a reminder (or as an admission of guilt).
I Self-Admitted Technical Debt aumentano la propensione ai bug. I Self-Admitted Technical Debt rallentano il processo di sviluppo I Self-Admitted Technical Debt portano ad ignorare vari aspetti
Per identificare i Self-Admitted Technical Debt sono stati proposti diversi approcci e tools in aiuto dello sviluppatore, perlopiù basati su utilizzo del codice sorgente, tool di analisi statica e sull’utilizzo dei commenti del codice sorgente. I pattern di commenti identificati da Potdar e Shihab ne sono un chiaro esempio.
Tuttavia, l’analisi statica e l’utilizzo dei commenti del codice sorgente sono solo una parte dell’approccio basato sul text mining proposto da Huang Qiao [et al.].
Partendo da una frase si arriva ad ottenere una lista di parole significative nella loro forma radice Questo approccio si divide in varie fasi, tra cui: pre-elaborazione del testo, selezione delle feature, istruzione del sotto-classificatore e le votazioni del classificatore. • Si istruisce il classificatore e ne si valutano le performance • Vengono poi analizzati i risultati di tutti i sotto-classificatori
Cos’è ASATDD? ASATDD (acronimo di an Automatic Self-Admitted Technical Debt Detection tool) è un plugin per IntelliJ che sfrutta l’analisi dei commit message per l’identificazione dei SATD. ASATDD presenta un architettura multi layer: • Domain Model Layer: rappresenta i business objects ed i suoi comportamenti; • Domain Services Layer: crea un’astrazione tra il dominio delle entità e la business logic di un’applicazione. • Application Services Layer: Sottosistema che permette la comunicazione tra l’UI layer ed il Repository layer; • UI Layer: Include tutte le interfacce grafiche ed, in generale, gli oggetti con cui interagisce l’utente.
Il component diagram del plugin mostra le componenti implementate ex novo e quelle riutilizzate, identificate dal sottosistema denotato come «IdentifierSATD».
La particolarità che ha favorito questo lavoro di tesi è stato, come detto, l’utilizzo dei commit message. Inoltre è stato proposto un nuovo approccio sull’istruzione e gestione dei classificatori, a vantaggio dell’ottimizzazione dello spazio occupato in memoria e del tempo impiegato nell’istruzione.
Un esempio di utilizzo Come primo passaggio, l’utente deve eventualmente clonare un progetto da qualsiasi servizio di hosting per progetti software. Successivamente, a progetto clonato, dovrà eseguire il plugin utilizzando la toolbar di IntelliJ selezionando la voce «IdentifySATD» e successivamente «FindSATDAction».
In questo momento, ci sarà il recupero dei Commit riguardanti tale repository attraverso l’utilizzo del metodo «retrieveCommitsLogs». Dopo il retrieve, i dati vengono associati all’entità «Commit».
Dopo il plugin procederà ad istruire o caricare dalla memoria il classificatore. • Il classificatore procede a valutare i commit message che sono stati recuperati e pre-processati • Al termine della valutazione, si aprirà l’User Interface che, mostra tramite un JFrame una lista - di Commit che rappresentano proprio i Self-Admitted Technical Debt identificati dal classificatore.
Sviluppi futuri • Aumentare la precisione del classificatore oppure eventualmente implementarlo attraverso l’utilizzo di altri approcci. • Implementare nuove scorciatoie per l’utilizzo più rapido del plugin • Implementare il plugin per altri differenti ambienti di programmazione