Linee guida di scrittura | Linee guida di sviluppo | Tesi in corso | Tesi svolte

Prima di richiedere la tesi…

Prima di richiedere formalmente la tesi, assicuratevi di avere letto con attenzione questa pagina. Leggere con attenzione significa anche e soprattuto seguire gli hyperlink presenti nelle descrizione perché possiate approfondire gli argomenti di tesi.
Quando infine avrete qualcosa da discutere, contattate il responsabile del Collab, prof. Filippo Lanubile

Tesi da assegnare – supervisionate da un ricercatore del Collab

Software Engineering for Artificial Intelligence (SE4AI)

Negli ultimi anni, le tecniche di Intelligenza Artificiale (AI) sono sempre più impiegate per sviluppare nuove applicazioni intelligenti e migliorare la qualità e l’esperienza utente dei sistemi software tradizionali. Il Machine Learning (ML), e in particolare il Deep Learning, consentono alle aziende di sfruttare i dati in modi senza precedenti, con aree di applicazione ai problemi del mondo reale che vanno dai recommender systemem alla guida autonoma. La tendenza più recente nel settore del software sembra essere l’integrazione di funzionalità AI innovative nel software tradizionale. Tuttavia, tale integrazione pone nuove sfide: il processo di sviluppo di sistemi AI-enabled differisce notevolmente da quello del software tradizionale, per il quale anni di ricerca e pratica nell’ingegneria del software (SE) hanno fornito principi, metodologie e strumenti. L’obiettivo del progetto di ricerca è progettare e validare soluzioni per aiutare i professionisti dell’AI a risolvere alcune delle sfide poste dal loro lavoro quotidiano, in particolare quelle relative all’integrazione dei moduli AI nei sistemi software tradizionali. La strategia di base è prendere in prestito idee consolidate dal dominio della conoscenza dell’ingegneria del software e adattarle per migliorare lo sviluppo di applicazioni basate sull’intelligenza artificiale basate sui dati.

In tale ambito, proponiamo tesi di laurea sui seguenti argomenti principali:

  • Valutazione dei sistemi di AutoML nel risolvere out-of-the-box classici task di classificazione nel dominio del software engineering, quali per esempio il defect prediction, ossia identificare file/moduli/funzioni come defect prone per focalizzare l’attenzione in fase di testing e identificare difetti. Per AutoML si intende l’automazione delle attività di sviluppo di modelli di machine learning, tipicamente iterative e dispendiose in termini di tempo. Le soluzioni di AutoML come H2O Driverless AI, Datarobot, e RapidMiner consentono a data scientist, analisti e sviluppatori di creare modelli ML in modo rapido e automatizzato, confrontando dozzine di modelli.

Analisi delle emozioni e dello stile comunicativo nello sviluppo del software

Negli ultimi anni, i ricercatori hanno recentemente iniziato a studiare il ruolo dell’affective computing e delle emozioni nell’ingegneria del software. Cio è giustificato dall’evidenza scientifica dell’impatto delle emozioni sulle prestazioni lavorative e sulle dinamiche di collaborazione all’interno dei team di lavoro. Ciò vale anche per l’ingegneria del software poichè lo sviluppo del software è un’attività principalmente intellettuale che richiede creatività e capacità di problem-solving, che sono noti per essere influenzati dagli stati emotivi. Lo sviluppo del software è una attività prettamente collaborativa. Per garantire il successo di progetti software di successo è importante monitorare le emozioni a livello individuale e i team, poichè le emozioni negative possono rappresentare un ostacolo allo sviluppo collaborativo.

Nell’ambito di queste tematiche, l’attività di ricerca e le relative tesi vertono sui seguenti argomenti principali:

  • Sentiment analysis delle interazioni tra gli sviluppatori su piattaforme a supporto dello sviluppo collaborativo quali Stack Overflow, GitHub, Jira, etc.;
  • Riconoscimento di emozioni a partire dall’analisi dei sensori biometrici;
  • Riconoscimento di emozioni a partire dall’analisi delle espressioni del volto;
  • Riconoscimento di atti di dialogo e modellazione dell’interazione tra sviluppatori su piattaforme a supporto dello sviluppo collaborativo.
  • Replica indipendente di studi precedenti che hanno effettuato sentiment analysis su artefatti software (bug report, app review), utilizzando un (nostro) classificatore sviluppato specificatamente sul dominio del software engineering.

Analisi psicometrica della personalità degli sviluppatori software

I progetti software diventano sempre più complessi e, pertanto, diventano il risultato della collaborazione di molti sviluppatori diversi, ciascuno con caratteristiche personali differenti. La collaborazione, spesso a distanza, tra sviluppatori di progetti distribuiti su scala globale nasconde diverse insidie (e.g., scarsa fiducia, mancato senso di appartenenza al team, disallineamento tra obiettivi personali e di progetto). La comprensione della personalità degli sviluppatori, tenuto conto delle attività svolto e del ruolo ricoperto, potrebbe essere in grado di spiegare e, in futuro anticipare, parte delle difficoltà incontrate nei progetti software.

Attualmente, proponiamo le seguenti tesi nell’ambito dell’analisi della personalità:

  • Benchmark di tool di analisi psicometrica, ossia il confronto tra gli strumenti automatici attualmente esistenti (sia commerciali che prototipi di ricerca) in grado di misurare la personalità degli sviluppatori software a partire da testi scritti (e.g., email, messaggi di chat).
  • Sviluppo di uno strumento di riconoscimento automatico della personalità secondo il modello Big 5. Basandosi sui recenti sviluppi delle tecnologie di AI/ML, individuare gli approcci basati su deep learning più promettenti e realizzare un prototipo in Python.

Mining da communità di Social Coding

GitHub è un popolare servizio di hosting per progetti software, costruito intorno a Git, il sistema di version control distribuito ideato da Linus Torvalds. GitHub è una piattaforma di social coding in quanto integra strumenti di supporto allo sviluppo del software con funzionalità simili a quelle di un social network (per es., feed di attività, followers, preferiti). Stack Overflow è il sito di Question and Answer (Q&A) più popolare per la condivisione della conoscenza nello sviluppo del software. Con milioni di utenti in cerca di informazioni e milioni di domande, risposte e commenti, Stack Overflow è un caso di Big Data da analizzare per migliorare l’efficacia della ricerca di informazioni.

L’attività di ricerca, e le relative tesi, vertono sui seguenti rami principali:

  • Nell’ambito delle comunità OSS in GitHub, valutare la perdita di produttività a livello di progetto dopo i break (pause) prese dai core developer (sviluppatori chiave per la sopravvivenza del progetto).
  • Uno studio esplorativo delle vulnerabilità di sicurezza identificati automaticamente in progetti GitHub dai tool di code scanning (e.g., Snyk).
  • Studiare l’effetto del genere (gender effect) e della mancanza di esperienza e reputazione (newbie users) sulla partecipazione in Stack Overflow. In particolare, attraverso il sentiment analysis delle domande poste in Stack Overflow, intendiamo trovare evidenza circa  la presenza di barriere che causano disugualianza nella partecipazione degli utenti.
  • Mining dei milioni di domande e risposte da Stack Overflow al fine di comprendere l’impatto dei sub-topic (o canali, per esempio, Java, Ruby, Python) e la loro età/dimensione (quanto è mainstream la tecnologia?) sull’accettazione delle risposte e la reputazione degli utenti.

I tesisti utilizzeranno librerie di scraping per l’estrazione dei dati, le risorse di cloud computing del data center ReCaS-Bari per il calcolo e lo storage, risorse linguistiche e strumenti di analisi statistica dei dati e di sentiment analysis.

Tesi da assegnare su progetti esterni

Un invito sempre valido è quello di partecipare attivamente a un progetto open source di vostro interesse. Questa è un’opportunità concreta per mettere alla prova e migliorare le vostre capacità, confrontandovi con altri sviluppatori di tutto il mondo. E’ importante che la scelta sia dettata dall’interesse in un’applicazione o una tecnologia, soprattutto se già ne conoscete limiti e pregi: questo renderebbe più semplice l’inizio della collaborazione (ciononostante, ogni vuoto è colmabile). L’applicazione con la quale “provare” la tecnologia potreste averla già individuata oppure potreste trovarla consultando la guida all’open source di GitHub o l’analizzatore di progetti open source Open Hub. Quello che vi si chiede non è granchè diverso dall’iniziativa Google Summer of Code, in cui un manipolo di studenti valorosi sono ingaggiati per pochi mesi al fine di creare o estendere un progetto di open source software. Nel vostro caso il premio è la tesi di laurea.