Un assistente virtuale per lo sviluppo del software
Servizio comunicazione istituzionale
10 Ottobre 2022
Un assistente virtuale in grado di aiutare i programmatori svolgendo compiti non banali anche di una certa complessità: con questa proposta nel 2019 Gabriele Bavota, attualmente professore straordinario alla Facoltà di scienze informatiche dell’USI, ha ottenuto un ERC Starting Grant, i fondi di ricerca attribuiti dal Consiglio europeo della ricerca ai più promettenti giovani ricercatori.
Al progetto DEVINTA ha lavorato un team che comprende, oltre al professor Bavota, tre dottorandi – Rosalia Tufano, Matteo Ciniselli e Antonio Mastropaolo – e i ricercatori postdoc Emad Aghajani, adesso passato al settore privato, e Luca Pascarella che sta per iniziare a lavorare al Politecnico federale di Zurigo.
Professor Bavota, da dove nasce l'idea di creare un "assistente artificiale" per sviluppare software?
L’idea nasce da tre osservazioni. La prima è che i sistemi software sono tra i costrutti più complessi creati dall’uomo e, come tali, pongono sfide sostanziali sia durante il loro sviluppo che nella successiva fase di manutenzione. Tali sfide devono essere affrontate in un mercato sempre più competitivo, richiedendo agli sviluppatori software di creare prodotti di alta qualità nel minor tempo possibile. Massimizzare la produttività degli sviluppatori e supportarli in task complessi è quindi una priorità nell’ingegneria del software.
Tuttavia, ed è la seconda osservazione, il supporto fornito da tool di sviluppo esistenti è molto limitato, soprattutto quando ci si focalizza su task complessi come la comprensione del codice o la correzione di errori.
Infine, i progressi fatti nell’Intelligenza Artificiale (IA) e la quantità di dati disponibili in progetti open source rendono l’applicazione di IA a problemi rilevanti per gli sviluppatori una chiara opportunità. Per esempio, è possibile allenare modelli di IA per imparare come correggere automaticamente errori nel codice (bug-fixing). Questo può essere fatto imparando da milioni di attività di bug-fixing effettuate da sviluppatori software in migliaia di progetti open source.
Quali sono i vantaggi rispetto a strumenti che non usano intelligenza artificiale come librerie di software?
Stiamo parlando di tipologie di supporto diverse. Una libreria software fornisce allo sviluppatore delle funzionalità già implementate che può riutilizzare, risparmiando tempo e conseguentemente costi. Noi ci focalizziamo nel supportare gli sviluppatori in problemi complessi per i quali l’unica via all’automazione è imparare da ciò che sviluppatori reali hanno fatto in passato. Per esempio, in una delle nostre linee di ricerca stiamo automatizzando il processo di code review, ovvero l’attività attraverso la quale un team di sviluppatori (revisori) analizza il codice scritto da un altro sviluppatore, identificando eventuali problemi e suggerendo soluzioni su come migliorare la qualità del codice. Questo processo è costoso in termini di tempo (può richiedere diverse iterazioni tra i revisori e lo sviluppatore che ha scritto il codice) e aumenta sostanzialmente i costi di sviluppo, visto che diversi sviluppatori sono allocati sullo stesso task. In DEVINTA abbiamo allenato modelli di IA che possono parzialmente sostituire i revisori in questo processo, fornendo un feedback automatizzato e immediato allo sviluppatore, così come farebbe un revisore “umano”. Questi modelli hanno imparato “come revisionare il codice” grazie all’attività di decine di migliaia di revisori in progetti open source.
Lo scopo di DEVINTA è costruire uno strumento concreto o è un lavoro più teorico?
Il progetto non mira a costruire un prodotto concreto, ma una serie di approcci che automatizzano diversi task non banali per gli sviluppatori. Al momento siamo focalizzati, oltre che sulla code review di cui ho già detto, principalmente sull’automatizzazione di task di implementazione, ovvero raccomandare allo sviluppatore il codice necessario per implementare una determinata funzionalità, e sulla documentazione automatica del codice per supportarne la comprensione.
Le soluzioni sviluppate sono già pronte per essere utilizzate?
Non ancora, ma ci aspettiamo lo siano almeno in parte entro la fine del progetto. Questo è dovuto alla necessità di migliorare l’accuratezza delle raccomandazioni generate dagli approcci che sviluppiamo. Per esempio, nel già citato caso di code review, il modello di IA è in grado di comportarsi come un revisore umano in circa il 20% dei casi su cui l’abbiamo sperimentato. Questo indica la necessità di più ricerca prima di considerare il modello utilizzabile in pratica.