Technical Debt in Software Development: A Multi-Perspective Investigation
Creators: name: Pecorelli, Fabiano
Publisher: name: Universita degli studi di Salerno
Year: 2022
Subjects: subject: ING-INF/05 SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI
subject: Technical debt
subject: Software code quality
subject: Predictive analytics

description: 2020 - 2021
description: 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]
description: 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]