Lo sviluppo di fronte all’AI

Uno scenario che porterà anche a un nuovo approccio operativo: dalla creazione di codice alla revisione, validazione e verifica.

Quando parliamo del contributo che l’intelligenza artificiale (AI) può dare alla qualità del software, non possiamo fare a meno di evidenziare quale ruolo importante questa rivoluzione tecnologica rappresenti per le attività di sviluppo software. È piuttosto sconcertante rendersi conto di quante aree nell’ambito dello sviluppo software possano beneficiare delle potenzialità del Machine Learning e in particolare dell’AI Generativa. Al contempo, man mano che emergono le possibili aree di intervento dell’AI, prendono forma anche aspetti dubbi e controversi, ma procediamo per gradi.

Che cos’è, prima di tutto, l’AI generativa? Parliamo di una sottocategoria dell’intelligenza artificiale che si concentra sulla creazione di contenuti nuovi e originali. A differenza dei sistemi di AI tradizionali che sono progettati principalmente per analizzare e interpretare i dati, le AI generative sono addestrate a produrre output come testi, immagini, musica o video che possono essere indistinguibili da quelli prodotti dagli esseri umani. Ovviamente questi output possono anche includere parti di codice software, che possono essere generate utilizzando tecniche di apprendimento automatico, specialmente l’apprendimento profondo, per apprendere da una grande quantità di dati esistenti. Attraverso il training su vasti dataset di codice sorgente, l’AI generativa può essere utilizzata per scrivere codice automaticamente, suggerire completamenti di codice o correggere errori. Possiamo quindi aumentare la produttività degli sviluppatori riducendo il carico di lavoro ripetitivo e, almeno nelle intenzioni, migliorando la qualità del codice.

Non c’è dubbio che il primo vantaggio che salta all’occhio è la maggiore rapidità con cui le attività svolte dalle applicazioni di AI possono essere eseguite rispetto alle stesse attività svolte dai programmatori, mentre non è ancora chiaro quanto possa essere affidabile il codice creato, corretto o ottimizzato e quanto possa risultare ‘migliore’, in termini di difettosità, rispetto al codice gestito dai software developer.

Naturalmente non è solo la scrittura di nuovo codice software l’ambito in cui l’AI ci può venire in aiuto. Ci sono anche altre attività che sono parte integrante del ciclo di produzione del software a beneficiarne, ad esempio la configurazione di ambienti o la creazione di dati di prova. Ma vediamole più da vicino.

1. Generazione automatica di codice

L’AI può generare codice automaticamente basandosi su descrizioni in linguaggio naturale fornite dagli sviluppatori. Questi strumenti utilizzano modelli di linguaggio di grandi dimensioni che sono stati addestrati su vaste parti di codice open-source, permettendo loro di comporre e suggerire blocchi di codice, funzioni complete e interi script che gli sviluppatori possono utilizzare come punto di partenza, completandoli e integrandoli nei loro progetti.

Strumenti di revisione del codice basati sull’AI possono analizzare il codice per conformità agli standard di codifica, pratiche di sicurezza, e altre metriche di qualità. Questi strumenti possono fornire feedback immediato agli sviluppatori, aiutando a mantenere un alto standard di qualità durante tutto il ciclo di sviluppo.

L’AI può inoltre assistere nella generazione di test automatici, creando casi di test che coprono scenari d’uso estensivi e limiti del software. Questo aiuta a garantire che il software funzioni come previsto in una varietà di condizioni e può ridurre significativamente il carico di lavoro manuale associato alla scrittura di test.

2. Rilevamento e correzione degli errori

L’AI, attraverso strumenti che usano tecniche di apprendimento automatico per analizzare i registri delle applicazioni, può analizzare grandi quantità di codice per identificare schemi e rilevare anomalie che potrebbero indicare la possibile presenza di errori. Questo naturalmente ben oltre i tradizionali analizzatori statici e dinamici di codice, offrendo per esempio correzioni automatiche non solo per errori sintattici, ma anche per quelli logici e per i problemi di performance. Pur volendo rimanere nell’ambito, ad esempio, dell’analisi statica del codice, l’AI può essere utilizzata per eseguire un’analisi statica più avanzata, che va oltre la semplice verifica di sintassi, convenzioni di codifica o violazioni delle best practice. Utilizzando tecniche di machine learning e deep learning, può imparare dai pattern di codice esistenti a identificare vulnerabilità di sicurezza, potenziali problemi di accessibilità o altri errori logici complessi.

3. Personalizzazione dell’esperienza utente

L’intelligenza artificiale può analizzare il comportamento dell’utente per personalizzare l’interfaccia e le funzionalità del software in tempo reale, migliorando l’usabilità e l’efficacia del software per la User Experience. L’AI può analizzare i dati di utilizzo del software da parte degli utenti per apprendere le loro preferenze e comportamenti. Questo include l’analisi di quali funzionalità vengono utilizzate più frequentemente, quanto tempo viene trascorso in certe aree dell’applicazione, e quali impostazioni vengono modificate. Queste informazioni permettono al software di adattare automaticamente interfacce e funzionalità alle esigenze individuali.

Basandosi ancora sull’analisi dei dati, l’AI può fare raccomandazioni personalizzate agli utenti. Per esempio, in un’app di e-commerce, l’AI può suggerire prodotti che corrispondono alle preferenze dell’utente basate sulle sue interazioni precedenti. In un’app dedicata alla formazione, potrebbe suggerire risorse di apprendimento adatte al livello e agli interessi dell’utente.

L’AI può utilizzare il riconoscimento del contesto per adattare le funzionalità e le interazioni del software. Ad esempio, un’app mobile può adattare i suoi servizi e notifiche in base alla posizione dell’utente, al meteo, al momento della giornata o anche alle sue condizioni fisiche rilevate tramite dispositivi indossabili.

I chatbot e gli assistenti virtuali basati sull’AI possono fornire un supporto personalizzato agli utenti, rispondendo alle loro domande e guidandoli nelle operazioni. Questi sistemi possono apprendere nel tempo per migliorare la loro capacità di fornire risposte pertinenti e assistenza proattiva, migliorando l’engagement e la soddisfazione dell’utente.

4. Manutenzione predittiva

Utilizzando l’AI per monitorare le applicazioni in produzione, specialmente in ambienti complessi e dinamici, si può prevedere l’insorgenza di problemi prima che accadano, indicare potenziali crash in arrivo o semplicemente segnalare un degrado delle performance prima che questo diventi visibile e generi impatti sull’operatività. Utilizzando tecniche di apprendimento automatico, l’AI può valutare se il comportamento attuale del sistema devia da quello previsto o ottimale e segnalare eventuali problemi emergenti, consentendo interventi proattivi per prevenire queste problematiche e le conseguenti possibili perdite di dati o più in generale situazioni critiche per gli utilizzatori del software.

L’AI può analizzare enormi volumi di dati di log generati dalle applicazioni per rilevare anomalie o pattern che spesso precedono i failure. Algoritmi di machine learning possono imparare da precedenti incidenti e identificare segnali di allarme precoce che operatori umani potrebbero trascurare o non essere in grado di elaborare a causa della vastità dei dati.

5. Ottimizzazione delle Risorse

L’intelligenza artificiale può aiutare a ottimizzare l’uso delle risorse durante lo sviluppo e il deployment del software. Ad esempio, può prevedere la scalabilità necessaria per le applicazioni cloud, aiutando le aziende a risparmiare costi su risorse non utilizzate. Monitorando con AI l’utilizzo delle risorse da parte delle applicazioni software, è possibile ottimizzare l’allocazione delle risorse, garantendo che il software funzioni in modo efficiente senza sprechi di capacità di elaborazione o memoria.

Un’altra possibile applicazione interessante è quella di prevedere l’impatto delle modifiche al codice sulle prestazioni dell’applicazione o identificare automaticamente i test di non-regressione necessari in base alle modifiche apportate.

6. Assistenza agli Sviluppatori

Alcune piattaforme AI offrono assistenza in tempo reale durante la scrittura del codice, suggerendo completamenti o correzioni automatiche che sono contestualmente rilevanti e adattati allo stile di codifica dell’utente. Questo tipo di supporto aiuta a velocizzare il processo di sviluppo riducendo il numero di errori di battitura e migliorando la qualità generale del codice. Ma non è tutto, vengono suggeriti miglioramenti e refactoring del codice sulla base di un vasto database di codice esistente. Le applicazioni AI possono identificare pattern inefficienti o potenzialmente problematici e proporre alternative più efficienti o più sicure.

Coerentemente con le caratteristiche di Machine Learning, molti strumenti di AI per la scrittura del codice continuano ad apprendere dalle interazioni con gli sviluppatori, migliorando le loro raccomandazioni nel tempo e adattandosi alle esigenze specifiche del team o del progetto. Sfruttando i grandi dataset di codice e i relativi bug storici, l’AI può identificare le probabilità di errore in parti specifiche del codice. Può prevedere quali nuove modifiche o aggiunte al codice potrebbero portare a problemi in base ai dati storici e ai modelli di errore appresi, permettendo agli sviluppatori di concentrarsi preventivamente su queste aree. Con lo stesso principio l’AI può automatizzare e ottimizzare la generazione di casi di test. Può analizzare il codice per determinare quali parti sono a più alto rischio e generare test che coprano specificamente questi scenari critici. Inoltre, può eseguire test dinamici simulando interazioni utente per identificare errori di runtime in scenari d’uso reale.

Cambia l’approccio

In conclusione, l’AI non sostituirà gli sviluppatori di software, ma modificherà l’approccio a questa professione, dotandoli di strumenti che possono aumentare la loro produttività, spostando probabilmente il focus della professione dalla prevalente creazione di codice alla revisione, validazione e verifica del codice. Come dire: meno sviluppo e più testing? Probabile, anche perché tutti gli ambiti di cui abbiamo parlato finora in cui l’AI supporta lo sviluppo del software hanno un rovescio della medaglia, perché possono essere messi in atto anche da chi è interessato a sviluppare applicazioni, per esempio, a supporto del cybercrime, e la capacità di deep learning delle applicazioni AI ci deve necessariamente mettere in guardia dal ‘lato oscuro della forza’ dell’AI quando si attiva nelle mani sbagliate.

ITA-STQB (www.ita-stqb.org), l’organismo che in Italia certifica le competenze nelle professioni da cui dipende la qualità del software, è da tempo attenta alle evoluzioni che l’AI sta portando alle stesse professioni. Nel 2021 è stata introdotta in Italia la certificazione ISTQB®, tuttora in evoluzione, per i professionisti dell’AI testing, inteso sia come testing di applicazioni AI, sia come utilizzo di AI per il testing. Da qualche tempo c’è molto interesse per l’evoluzione delle certificazioni stesse, che al classico modello che mira a valutare la preparazione principalmente teorica dei candidati, punta ad abbinare un approccio alla valutazione pratica delle competenze acquisite, utilizzando anche qui il contributo di applicazioni AI che consentono di formulare quesiti strutturati di esercizi pratici o esempi applicativi ai candidati, ai quali viene richiesto di rispondere in modo discorsivo, e non più solo con la selezione tra un set di risposte prestabilite. Il livello di correttezza delle risposte a queste domande aperte viene valutato dalle applicazioni AI, attraverso un punteggio che consente al termine della prova di ottenere o meno la certificazione.

Chiaramente in una prima fase sperimentale queste applicazioni sono affiancate da esperti che valutano la pertinenza dei quesiti proposti, e la capacità di valutazione delle risposte da parte dell’applicazione AI. Non c’è dubbio che questo nuovo modo di valutare le competenze comporterà vantaggi enormi anche in ambito aziendale, per identificare i bisogni formativi e per valutare l’idoneità di candidati per le posizioni lavorative aperte.

Office Automation è il periodico di comunicazione, edito da Soiel International in versione cartacea e on-line, dedicato ai temi dell’ICT e delle soluzioni per il digitale.


Soiel International, edita le riviste

Officelayout 198

Officelayout

Progettare arredare gestire lo spazio ufficio
Luglio-Settembre
N. 198

Abbonati
Innovazione.PA n. 56

innovazione.PA

La Pubblica Amministrazione digitale
Luglio-Agosto
N. 56

Abbonati
Executive.IT n.5 2024

Executive.IT

Da Gartner strategie per il management d'impresa
Settembre-Ottobre
N. 5

Abbonati