La mia attività di ricerca si sviluppa attorno a vari argomenti che sono interconnessi e possono beneficiare delle reciproche tecniche e metodologie. Tali argomenti sono:
Empirical Software Engineering: si concentra sull'applicazione di metodi empirici, analisi dei dati e sperimentazione per comprendere e migliorare le pratiche di ingegneria del software. Implica la raccolta e l'analisi dei dati da progetti di sviluppo software per ottenere informazioni su vari aspetti dell'ingegneria del software, come i processi di sviluppo, la gestione dei progetti, la qualità del software e la produttività. L'ingegneria del software empirica mira a fornire raccomandazioni e linee guida basate sull'evidenza per i professionisti per prendere decisioni informate e migliorare le pratiche di sviluppo del software.
Mining Software Repositories: un campo di ricerca che prevede l'analisi dei dati dai repository software. Ciò include sistemi di controllo della versione, sistemi di tracciamento dei bug, mailing list e sistemi di revisione del codice. Le tecniche MSR vengono utilizzate per estrarre informazioni preziose da questi repository, come la cronologia dei commit, le segnalazioni di bug, le modifiche al codice e le discussioni degli sviluppatori. I dati estratti possono essere analizzati per comprendere l'evoluzione del software, identificare modelli, rilevare difetti, prevedere la qualità del software e supportare le attività di ingegneria del software.
Software Maintenance and Evolution: comprende le attività di gestione e miglioramento dei sistemi software dopo il loro sviluppo iniziale. Ciò include attività come la correzione di bug, l'ottimizzazione delle prestazioni, il miglioramento delle funzionalità e l'adattamento del software alle mutevoli esigenze. La manutenzione e l'evoluzione del software sono supportate da varie tecniche, tra cui l'analisi del programma, il refactoring, la revisione del codice e il controllo della versione. L'analisi dei repository software e dei metodi empirici delle applicazioni può fornire approfondimenti sul processo di manutenzione ed evoluzione, come l'identificazione delle attività di manutenzione comuni, la previsione degli sforzi di manutenzione e la comprensione dell'impatto delle modifiche al codice sulla qualità del software.
Software Security: si concentra sulla protezione dei sistemi software da vulnerabilità e attacchi dannosi. Implica l'implementazione di pratiche di codifica sicure, l'esecuzione di valutazioni di sicurezza e l'applicazione di controlli di sicurezza per prevenire accessi non autorizzati, violazioni dei dati e altre minacce alla sicurezza. La sicurezza del software implica anche l'identificazione e la correzione delle vulnerabilità della sicurezza attraverso tecniche come la revisione del codice, l'analisi statica e dinamica e il penetration testing. I metodi empirici e l'analisi dei repository software possono aiutare a comprendere le vulnerabilità della sicurezza, analizzare i dati sugli incidenti di sicurezza e migliorare le pratiche di sicurezza del software attraverso raccomandazioni basate su prove.
Natural Language Processing: è una branca dell'intelligenza artificiale che si concentra sull'interazione tra computer e linguaggio umano. Le tecniche di NLP consentono ai computer di comprendere, interpretare e generare il linguaggio umano. Nel contesto dell'ingegneria del software, le tecniche di NLP possono essere utilizzate per analizzare i dati testuali relativi al software, come commenti sul codice sorgente, documentazione, segnalazioni di bug e discussioni degli sviluppatori. Le tecniche di NLP possono anche essere applicate per attività come l'analisi del sentiment del feedback degli utenti, la generazione automatizzata della documentazione del codice e il riepilogo del codice.
Text Analysis: nota anche come Text Mining o Text Analytics, è il processo di estrazione di preziose informazioni e conoscenze da dati testuali non strutturati. Nel contesto dell'ingegneria del software, l'analisi del testo può essere applicata a varie attività, come il rilevamento di cloni del codice, l'identificazione delle vulnerabilità del software nel codice sorgente, l'analisi delle recensioni degli utenti e l'estrazione dei requisiti software dalle specifiche testuali.
Il mining dei repository software fornisce dati preziosi per la ricerca empirica di ingegneria del software, mentre l'elaborazione del linguaggio naturale e le tecniche di analisi del testo possono essere applicate per analizzare ed estrarre la conoscenza dagli artefatti testuali del software. I risultati di queste analisi possono migliorare ulteriormente i processi di manutenzione ed evoluzione del software, nonché le pratiche di sicurezza.