L’utilizzo dei modelli generativi nel campo dello sviluppo software è sempre più “gettonato”. Usando il linguaggio naturale, il programmatore può richiedere la generazione di codice utile alla risoluzione di un problema specifico, evitando di perdere tempo in attività ripetitive e focalizzandosi invece sugli aspetti più importanti.
Parlando dei migliori chatbot, abbiamo visto che alcuni di essi – proprio grazie ai modelli generativi sottostanti – sono particolarmente abili nell’elaborare e nel produrre codice funzionante in decine di linguaggi di programmazione diversi. Tra i più abili ci sono Claude con i suoi Artifacts recentemente aggiunti, il meno conosciuto ma abilissimo Phind e ovviamente ChatGPT.
In passato abbiamo presentato alcuni consigli utili per programmare con ChatGPT. Ma quanto sono davvero “competenti” le ultime versioni del modello GPT (generative pre-trained transformer) nella generazione di codice.
Quanto è davvero bravo a programmare ChatGPT
Jensen Huang, CEO di NVIDIA, ha dichiarato a febbraio 2024 che si può smettere di imparare a programmare perché allo sviluppo software ci penseranno le moderne intelligenze artificiali.
In altri nostri articoli abbiamo a più riprese manifestato i nostri dubbi, non condividendo la posizione del numero uno di NVIDIA. Come avviene, in generale, per un uso professionale di qualunque modello generativo, è sempre essenziale disporre di un adeguato bagaglio di conoscenze per verificare quanto prodotto dall’intelligenza artificiale e assicurarsi, nel caso del codice di programmazione, che non contenga problemi di vario genere. Abbiamo affrontato l’argomento anche con Oracle, confrontandosi sul futuro dell’intelligenza artificiale generativa.
Una recente ricerca, pubblicata su IEEE Transactions on Software Engineering, ha valutato il codice generato da ChatGPT utilizzando tre criteri principali: funzionalità, complessità e sicurezza. Gli esperti accademici hanno messo sotto la lente il “vecchio” modello GPT-3.5 evidenziando che i risultati generati sono molto variabili a seconda della difficoltà del compito presentato il linguaggio naturale. In alcuni casi il modello ottiene valutazioni che rasentano la perfezione (90% circa); in altri fallisce miseramente.
Uno degli autori dell’articolo, Yutian Tang, docente di ingegneria del software presso l’Università di Glasgow, sottolinea che la generazione di codice da parte dell’AI “può portare benefici in termini di miglioramento della produttività e automazione delle attività nello sviluppo software“, ma è anche importante comprendere i punti di forza e i limiti del modello.
Sebbene l’AI possa generare codice migliore rispetto agli esseri umani, il report universitario evidenzia anche significative preoccupazioni sul piano della sicurezza del codice.
Le prove di ChatGPT su LeetCode
Per investigare più nel dettaglio i punti di forza e le “zone d’ombra” legati alla generazione del codice mediante IA, i ricercatori hanno messo alla prova ChatGPT su 728 compiti di sviluppo software, raccolti dalla piattaforma di test LeetCode in cinque linguaggi di programmazione: C, C++, Java, JavaScript e Python. Le capacità di coding evidenziate da ChatGPT sono risultate eccellenti nel complesso, con performance particolarmente buone per problemi antecedenti al 2021.
Per le attività di sviluppo condivise su LeetCode dopo il 2021, le probabilità che ChatGPT (basato sul modello GPT-3.5) generi codice funzionante diminuiscono significativamente. Questo vale anche per problemi di bassa difficoltà, tanto che “in alcuni casi, ChatGPT non riesce a comprendere il significato del problema“, ha osservato Tang.
Tang ha spiegato che “ChatGPT manca della capacità di pensiero critico che hanno gli esseri umani, quindi può affrontare solo problemi che ha già incontrato in passato. Questo è il motivo per cui ChatGPT non riesce a gestire bene problemi di codifica relativamente nuovi“. Per questo mettiamo il termine “comprensione” sempre tra virgolette nel caso dei modelli generativi: lo abbiamo spiegato nell’articolo in cui ci chiediamo se e quando l’intelligenza artificiale supererà quella umana.
GPT-3.5 è insomma molto bravo a riconoscere problemi che già conosce ma si è mostrato carente nell’affrontare attività di sviluppo più moderne e articolate.
Correzione degli errori e presenza di vulnerabilità nel codice generato
Lo studio ha rilevato che ChatGPT è bravo a correggere gli errori nel codice, ma non si comporta altrettanto bene nell’individuare e correggere i suoi propri errori.
ChatGPT può generare codice errato perché non comprende il significato dei problemi algoritmici. Il team di ricerca ha inoltre evidenziato che il codice generato da ChatGPT presenta spesso della lacune, anche se la maggior parte delle vulnerabilità è di facile correzione. Inoltre, il codice generato in C è risultato essere il più complesso, seguito da C++ e Python, complessi tanto quanto il codice scritto dagli esseri umani.
Il prompt fornito al modello generativo assume un’importanza ancora più cruciale nel caso dello sviluppo software. Il programmatore dovrebbe infatti fornire al chatbot o comunque al modello quante più informazioni utili e pertinenti, per stimolare in questo caso ChatGPT a sviluppare una visione più completo delle potenziali vulnerabilità (attivandosi per evitarne l’inserimento).
Quando si incontrano problemi di programmazione più complessi, gli sviluppatori devono fornire quante più conoscenze possibili a ChatGPT indicando gli aspetti cruciali da considerare.
Se quindi l’uso dell’IA nella generazione di codice offre vantaggi concreti in termini di produttività e automazione, è fondamentale essere consapevoli delle sue limitazioni e vulnerabilità. Solo con un’analisi continua e un miglioramento delle tecniche, si potrà sfruttare appieno il potenziale di questi innovativi strumenti.