dc.contributor.author | Pecorelli, Fabiano | |
dc.date.accessioned | 2024-09-30T11:09:50Z | |
dc.date.available | 2024-09-30T11:09:50Z | |
dc.date.issued | 2022-03-25 | |
dc.identifier.uri | http://elea.unisa.it/xmlui/handle/10556/7424 | |
dc.description | 2020 - 2021 | it_IT |
dc.description.abstract | I prodotti software devono essere costantemente manutenuti e aggiornati per sopravvivere e
continuare a soddisfare le esigenze di aziende e utenti. Agli sviluppatori viene spesso richiesto di
eseguire attività di manutenzione ed evoluzione del software nel più breve tempo possibile al fine
di rendere disponibili le modifiche al più presto. Di conseguenza, questi non hanno la possibilità di
applicare le buone pratiche di sviluppo, introducendo così il cosiddetto debito tecnico, ovvero
l'applicazione di una soluzione rapida e di bassa qualità invece di una migliore che richiederebbe
più tempo. Ciò causerà una diminuzione della qualità del software e richiederà un notevole sforzo
di manutenzione in futuro. Per questo motivo, per le aziende di software è di fondamentale
importanza individuare in anticipo i sintomi del debito tecnico. Tuttavia, tali sintomi potrebbero
manifestarsi in forme diverse e in diversi stadi di sviluppo, rendendo più difficile la loro
identificazione. Nel contesto di questa tesi, affrontiamo questa sfida da diverse prospettive.
In primo luogo, ci concentriamo sui bad code smell, cattive scelte di progettazione o
implementazione applicate nel codice sorgente dagli sviluppatori che possono portare a una
scarsa manutenibilità e a una diminuzione della comprensibilità del codice. Negli ultimi anni,
diversi ricercatori hanno ideato strumenti e tecniche per il rilevamento automatico di questi difetti
di progettazione. Tuttavia, purtroppo, tutte le tecniche proposte sembrano essere ancora troppo
limitate e inadeguate per essere applicate in contesti reali. La prima parte di questa tesi si
concentra sulla sperimentazione dell'idoneità delle tecniche di rilevamento di code smell basate
sul machine learning. I risultati preliminari dimostrano che le tecniche basate sul machine learning
hanno scarse prestazioni per il rilevamento automatico dei code smell, a causa di diverse
limitazioni come (i) la natura fortemente sbilanciata del problema, (ii) la soggettività dei risultati e
(iii) l'insieme ridotto di metriche considerate finora. Questa tesi indaga separatamente questi tre
aspetti, proponendo soluzioni specifiche per superarli. Sebbene siano stati prodotti alcuni
avanzamenti, le tecniche di apprendimento automatico richiedono ancora ulteriori miglioramenti
per fornire un rilevamento affidabile degli odori del codice.
Oltre a studiare il debito tecnico nel codice di produzione, consideriamo anche la sua presenza,
oltre che la sua nocività, nel codice di test. Le attività di test sembrano ricevere un'attenzione
molto minore durante lo sviluppo del software: i test vengono spesso sviluppati senza applicare
principi di programmazione adeguati o generati automaticamente con il supporto di strumenti
specifici. Pertanto, le suite di test risultanti sono spesso caratterizzate da una bassa qualità che
potrebbe anche ridurne l'efficacia nella scoperta dei bug. Questa tesi affronta questa sfida
presentando un'analisi su larga scala della qualità e dell'efficacia del codice di test sia nei sistemi
tradizionali che nelle applicazioni mobili al fine di comprendere i fattori relativi al test che sono più legati ai problemi tecnici nel codice di produzione. I principali risultati confermano che le suite di
test sono caratterizzate da una qualità ed efficacia del codice molto basse, in particolare per
quanto riguarda le applicazioni mobili. Inoltre, a differenza di quanto precedentemente affermato
in letteratura, alcuni degli aspetti qualitativi considerati (e.g., dimensione del codice, test smell)
hanno dimostrato di avere una correlazione più forte con i difetti del codice di produzione rispetto
alle metriche di copertura tradizionali ampiamente adottate.
Infine, includiamo anche una discussione sulle principali lezioni apprese e questioni aperte insieme
ad alcune indicazioni su ulteriori direzioni di ricerca. [a cura dell'Autore] | it_IT |
dc.description.abstract | Software products need to be constantly maintained and updated to keep being useful and
satisfying companies' and users' needs. Developers are often required to perform software
maintenance and evolution activities in the shortest possible time in order to make the changes
available as soon as possible. As a result, they do not have the possibility to apply ideal
development practices, thus introducing the so-called technical debt, i.e., the application of a
quick and low-quality solution instead of a better one that would take longer. This will cause a
decrease in software quality and require significant maintenance effort in the future. For this
reason, identifying the symptoms of technical debt in advance is of fundamental importance for
software companies. However, such symptoms could appear in different forms and at different
stages of development, making harder their identification. In the context of this thesis, we face
this challenge from several perspectives.
First, we focus on bad code smells, poor design or implementation choices applied in the source
code by developers that have been associated with maintainability and understandability
degradation. Over the last years, several researchers have been devising tools and techniques for
the automatic detection of these design flaws. However, unfortunately, all the proposed detectors
appear to be still too limited and inadequate to be applied in real industrial contexts. The first part
of this thesis focuses on experimenting with the suitability of machine learning-based code smell
detection techniques. Preliminary results demonstrate that machine learning-based techniques
still have limited performance for automatic code smell detection, due to several limitations such
as (i) the strongly unbalanced nature of the problem, (ii) the subjectivity of the results, and (iii) the
limited set of metrics considered so far. This thesis investigates these three limitations separately,
proposing specific solutions to overcome them. However, although some advantages have been
reported, machine learning techniques still require more improvement to provide reliable
detection of code smells.
Other than studying technical debt in production code, we also consider its presence, as well as its
harmfulness, in test code. Testing activities seem to receive way lower attention during software
development: tests are often developed without applying proper programming principles or
automatically generated with the support of specific tools. Therefore, resulting test suites are
often characterized by a low quality that could also reduce their effectiveness in bug discovery.
This thesis faces this challenge by presenting a large-scale analysis of test code quality and
effectiveness both in traditional systems and in mobile applications in order to understand the
test-related factors that are most related to technical issues in production code. The main results
confirm that test suites are characterized by a very low code quality and effectiveness, particularly with respect to mobile applications. Moreover, differently from what was previously stated in the
literature, some of the quality aspects considered (e.g., size, test smells) have been shown to have
a stronger correlation with production code defects as compared to traditional and widelyadopted coverage metrics.
Finally, we also include a discussion on the main lessons learnt and open issues together with
some indications about further research directions. [edited by Author] | it_IT |
dc.language.iso | en | it_IT |
dc.publisher | Universita degli studi di Salerno | it_IT |
dc.subject | Technical debt | it_IT |
dc.subject | Software code quality | it_IT |
dc.subject | Predictive analytics | it_IT |
dc.title | Technical Debt in Software Development: A Multi-Perspective Investigation | it_IT |
dc.type | Doctoral Thesis | it_IT |
dc.subject.miur | ING-INF/05 SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI | it_IT |
dc.contributor.coordinatore | De Lucia, Andrea | it_IT |
dc.description.ciclo | XXXIV ciclo | it_IT |
dc.contributor.tutor | De Lucia, Andrea | it_IT |
dc.identifier.Dipartimento | Informatica | it_IT |