AI-Powered

AI in grado di automatizzare il rilevamento e correzione di vari tipi di bug in modo da ridurre i tempi di manutenzione del codice.

L'idea

Durante l'AI-Disruption Hackathon organizzato dal Gruppo Reply, un team internazionale, che includeva anche un collega di Technology Reply, ha sviluppato in 48 ore un'applicazione innovativa per individuare bug in frammenti di codice e fornire versioni corrette. L'idea è che uno sviluppatore invii parti di codice a questa applicazione, che utilizza una rete neurale per analizzare e identificare una lista di possibili errori. Lo sviluppatore può quindi selezionare quali errori correggere, e l'applicazione genera una versione priva di tali errori.

Il team ha elaborato due richieste principali: una per il rilevamento e una per la correzione dei bug. Attraverso invii reiterati alla rete neurale, è possibile ottenere il risultato desiderato.

Codex: la soluzione!

La soluzione si basa su Codex, un set di motori ("engine") di Intelligenza Artificiale sviluppati da OpenAI come specializzazione di GPT-3 (Generative Pre-trained Transformer 3). GPT-3 è una rete neurale di apprendimento automatico che mima testo prodotto da un umano (linguaggio naturale).

Codex è quindi un derivato di GPT-3 in quanto il risultato di un ulteriore addestramento di GPT-3 con miliardi di righe di codice nei più svariati linguaggi di programmazione (Python, SQL, etc.). Il risultato è una rete neurale in grado di comprendere e generare sia linguaggio naturale che di programmazione. Tale rete può essere quindi utilizzata per analizzare e per produrre codice sorgente partendo da semplici istruzioni scritte in linguaggio naturale.

I compiti del Codex

Sintetizzare programmi a partire dai brevi testi che documentano una specifica porzione di codice (i commenti) è stato l'obiettivo principale per il quale GPT-3 è stato ulteriormente addestrato con codice macchina. Questi commenti sono trasformati in codice eseguibile con una precisione maggiore al 70% rispetto alla metrica "Correttezza Funzionale", cioè rispetto al fatto che il codice generato svolga correttamente l'operazione richiesta.

Pur interagendo con molti linguaggi di programmazione senza bisogno di alcuna configurazione specifica, Codex è stato addestrato principalmente con Python. Durante l'Hackathon abbiamo quindi testato la nostra applicazione solo con codice Python, lasciando gli altri linguaggi per futuri casi di studio.

Come i moderni servizi mail (GMail, Outlook, etc.) offrono automaticamente suggerimenti dei testi che stiamo componendo, così è possibile utilizzare Codex per effettuare il completamento automatico delle righe di codice che stiamo scrivendo.

In quanto potenzialmente in grado di aumentare la produttività dei programmatori, una versione di Codex perfezionata per questa funzionalità specifica è già stata integrata in alcuni degli strumenti usati per sviluppare codice (gli IDE, "Integrated Development Environment") come IntelliJ o Visual Studio.

Rimane tuttavia da misurare il reale impatto sulla produttività degli sviluppatori, sulla loro qualità della vita e sui loro compensi.

Intere porzioni di codice possono esser riproposte mantenendo inalterata la logica, ma aumentandone la leggibilità e quindi la manutenibilità.

Ripetute invocazioni di Codex hanno dimostrato essere una strategia sorprendentemente efficace per migliorare la leggibilità del codice. Applicando tale tecnica a porzioni autonome di un progetto software si possono abbattere i tempi di manutenibilità di intere applicazioni.

Per esempio, in un’applicazione sviluppata con un linguaggio orientato agli oggetti è possibile sostituire un’implementazione intricata di un metodo con una sua versione più intellegibile e quindi più facilmente modificabile in caso di errori di sintassi, errori funzionali, o anche di vulnerabilità a livello implementativo.


Codex è in grado di generare codice sorgente in una dozzina tra i linguaggi di programmazione più diffusi (Python, SQL, Java, etc.) a partire dal linguaggio naturale (inglese, italiano, etc.). Questo può esser sfruttato da uno sviluppatore per:

  1. Aumentare le proprie competenze in uno specifico linguaggio di programmazione;

  2. Tradurre in codice funzionante richieste formulate in linguaggio naturale;

  3. Apprendere come certe funzionalità possano esser implementate utilizzando librerie o API specifiche.

Rimane tuttavia da misurare l’effettiva capacità di Codex da una parte nel ridurre le barriere all’ingresso al settore, dall’altra nella progressione formativa e di carriera, sia degli sviluppatori che degli ingegneri del software.

Conclusioni