Negli ultimi anni, l'Intelligenza Artificiale generativa (GenAI) ha rivoluzionato diversi settori, spingendo i confini di ciò che è possibile nell'automazione e nella creatività assistita. Uno dei campi più promettenti e innovativi in cui la GenAI sta avendo un impatto significativo è la scrittura di codice di programmazione. Utilizzando modelli di linguaggio avanzati, è ora possibile generare codice sorgente complesso con input minimi da parte degli sviluppatori. Questo progresso non solo accelera il processo di sviluppo software, ma introduce anche nuovi paradigmi di collaborazione tra esseri umani e macchine, rendendo lo sviluppo del software più accessibile e inclusivo.
La GenAI per la scrittura di codice sfrutta tecniche di apprendimento profondo per analizzare grandi volumi di dati di programmazione e apprendere modelli e strutture comuni. Questi modelli possono quindi essere utilizzati per suggerire frammenti di codice, correggere errori, generare intere funzioni o persino scrivere programmi completi sulla base di descrizioni in linguaggio naturale, ma anche per ottimizzare e modificare il codice esistente per renderlo più sostenibile e manutenibile o aderente a delle specifiche.
L'adozione della GenAI nella programmazione promette di trasformare il ciclo di vita dello sviluppo e manutenzione del software, riducendo il tempo necessario per scrivere e testare il codice, minimizzando gli errori umani e aumentando la produttività. Tuttavia, come ogni tecnologia emergente, presenta anche sfide e considerazioni quali ad esempio la sicurezza del codice generato e l’impronta di carbonio che genera.
Come evidenziato anche in questo articolo:
L'ottimizzazione del codice è fondamentale per la sostenibilità: Ridurre il consumo energetico dei data center è una sfida importante. Se gli sviluppatori scrivessero codice più efficiente, il consumo energetico potrebbe essere significativamente ridotto.
L'AI può aiutare nell'ottimizzazione del codice: Gli strumenti di intelligenza artificiale possono analizzare il codice e suggerire modifiche per renderlo più efficiente.
L'efficacia degli strumenti di AI però non sempre risponde alle aspettative, In alcuni casi, l'AI restituisce il codice originale senza modifiche, mentre a volte, altri suggerimenti sono di scarsa utilità.
Per ottenere risultati significativi, diventa fondamentale utilizzare il prompt engineering, una tecnica che consiste nel formulare richieste precise all'AI. Fornire un contesto adeguato infatti, come l'identificazione dei colli di bottiglia nel codice o il tipo di ottimizzazione o modifica che si vuole fare, è fondamentale per ottenere suggerimenti utili.
Qui entra in gioco la Software Intelligence (SI), come spiegato nell’interessante articolo di Stefano Castelluccio, che evidenzia come le due tecnologie siano interconnesse e si rafforzino a vicenda.
L'AI può infatti essere impiegata per migliorare l'efficacia e l'usabilità degli strumenti di SI, consentendo una comprensione più profonda del software e delle analisi più accurate.
Al contrario, se vogliamo trarre il massimo beneficio dall’utilizzo della GenAI nell'ottimizzazione del codice, è fondamentale sfruttare le informazioni fornite dagli strumenti di SI per fare del Prompt tuning sia esso automatizzato che manuale.
Gli strumenti di CAST (Highlight e Imaging), offrono il massimo supporto agli sviluppatori, permettendo di "comprendere" come funzionano le applicazioni custom. La tecnologia CAST Imaging, infatti, fornisce informazioni sul funzionamento interno delle applicazioni, sui dati e sugli elementi principali del codice e le loro dipendenze, sulle transazioni, sulle API e sugli eventuali difetti strutturali o violazioni di sicurezza. Inoltre, permette anche di eseguire analisi di impatto e di fornire percorsi di analisi basati su obiettivi specifici (ad esempio, percorso di accesso ai dati...).
Molto utile quando abbiamo a che fare con architetture complesse e codice sorgente datato composto da milioni di righe e non più manutenibile ma ancora necessario e che, ad esempio, deve essere migrato verso nuove tecnologie e linguaggi.
Unendo le due tecnologie, possiamo estrarre dagli strumenti di CAST le informazioni relative al contesto in cui serve fare una modifica o una migrazione per poter creare un prompt efficace ed ottimizzarlo per approssimazioni successive.
Da CAST Imaging ad esempio si possono estrarre le violazioni rilevate all’interno del codice che possono minare le prestazioni, la manutenibilità, la leggibilità (vedi ISO 5055) e predisporre un Action Plan per la mitigazione delle stesse.
Per ogni violazione, poi possono essere estratte le informazioni di contesto (punto del codice in cui la violazione è avvenuta, collegamenti con altre funzioni, classi di appartenenza, dati a cui accede per esempio) per poter creare un prompt contestualizzato da inviare ad un motore LLM per ottenere informazioni più precise sulle modifiche da fare al codice, potendo verificare al contempo l’impatto che queste possono avere sul resto del codice.
Bisogna inoltre porre attenzione al fatto che gli strumenti di GenAI dovrebbero essere utilizzati come supporto per gli sviluppatori, non come sostituti del loro giudizio e della loro esperienza. Hanno infatti delle limitazioni come, ad esempio, possono avere una conoscenza limitata delle librerie software più recenti, il che può portare a suggerimenti non validi. È importante essere consapevoli di queste limitazioni e verificare l'accuratezza delle informazioni fornite dall'AI.
In conclusione, la combinazione di Software Intelligence e Generative AI rappresenta una rivoluzione nel modo in cui sviluppiamo, manteniamo e modernizziamo le applicazioni software. Queste tecnologie non solo migliorano l'efficienza e la precisione degli sviluppatori, ma offrono anche una comprensione più profonda e dettagliata delle strutture complesse che costituiscono il cuore delle nostre soluzioni digitali.
La Generative AI, con la sua capacità di generare codice e suggerire soluzioni innovative, insieme alla Software Intelligence, che offre una visione completa del funzionamento interno delle applicazioni, permette di affrontare con successo le sfide legate alla gestione di codici legacy e alla modernizzazione delle architetture software.
Guardando al futuro, possiamo aspettarci che queste tecnologie continuino a evolversi e a integrarsi sempre più nei nostri processi di sviluppo, rendendo la programmazione più accessibile, efficiente e sostenibile. L'adozione crescente di queste soluzioni non solo ottimizzerà i tempi e le risorse, ma aprirà anche nuove opportunità per innovazioni che oggi possiamo solo immaginare.
In definitiva, Software Intelligence e Generative AI non sono solo strumenti potenti, ma catalizzatori di un cambiamento che ridefinirà i confini di ciò che è possibile nel mondo del software.
SHARE