Costruire Software di Qualità
L’impatto sul testing, le verifiche degli algoritmi e le nuove competenze in gioco quando si parla di AI
Nell’ambito della qualità del software, oggi stiamo affrontando uno dei passaggi più cruciali degli ultimi cinquant’anni, che pure hanno visto un’evoluzione importante, a partire dall’approccio tradizionale che ruotava intorno alle metodologie sequenziali, o waterfall, sostanzialmente basate sul testing manuale del software, fino all’avvento nell’ultima decade di tecniche basate su una maggiore automazione, strutturata nel Continuous Integration, Continuous Testing e Continuous Delivery. Se infatti negli ultimi cinquant’anni le aziende hanno principalmente preso coscienza dell’importanza del testing del software, in molti casi introducendo da zero, in altri consolidando nei propri processi di quality assurance metodologie e tecniche di testing, nei prossimi anni l’impatto dell’Intelligenza Artificiale potrà portare a un cambio di passo nell’approccio alla qualità del software, tale da costituire un’autentica rivoluzione per il software testing.
L’Intelligenza Artificiale, o più brevemente AI, non è certo una novità degli ultimi anni. È però entrata nel linguaggio comune solo recentemente, grazie soprattutto alla possibilità di disporre di potenze di elaborazione e calcolo finalmente adeguate a sviluppare prodotti basati sull’Intelligenza Artificiale che fossero utilizzabili da tutti e fruibili in modo semplice e immediato. Parlando di qualità del software, la rivoluzione che l’AI porta con sé è una medaglia che ha due facce ben distinte. Da un lato l’impatto che l’AI ha sulle attività di software testing e sulle relative tecniche e strumenti (e più in generale sulla gestione della qualità del software), dall’altro lato in che modo posso e devo testare al meglio gli algoritmi stessi di AI e tutte le sue applicazioni.
Automazione, creazione e altro ancora
Concentrandoci sul primo dei due lati, vediamo alcune applicazioni dell’AI nell’ambito del software testing che si possono facilmente intuire e spesso sono già disponibili o in fase di studio o di realizzazione.
• Contribuire all’automazione del lavoro di software testing attraverso la scrittura automatica di casi di test a partire dai requisiti e dalle specifiche funzionali, sia che si parli di documentazione di casi di test manuali, sia che si parli della vera e propria implementazione di test automatici.
• Ottimizzare la selezione dei casi di test in modo da massimizzare la copertura, riducendo parallelamente tempi e costi del testing. E contribuire anche all’interpretazione dei risultati dei test automatici, ad esempio con la validazione visuale dei medesimi test.
• Contribuire alla creazione dei dati di test. Attraverso un apprendimento delle diverse casistiche inerenti le tipologie (ad esempio i dati sensibili) e i valori che i dati di input possono assumere, incluse situazioni limite e anomale, l’AI può aiutare a creare una base di dati di input ai test utile a garantire la maggior copertura possibile dei casi di test.
• Consentire una maggiore semplicità, rapidità ed efficacia nell’utilizzo di strumenti di test, contribuendo nella raccolta, analisi e sintesi di attività di code review e analisi statica, rendendo questa attività molto più rapida e probabilmente efficace per completezza rispetto alle stesse attività time-consuming svolte direttamente dai software tester.
• Permettere una maggiore efficacia nelle attività di Quality Assurance supportando nell’analisi predittiva, utile a concentrare gli sforzi di testing in aree a maggiore rischio di difettosità o dove la stessa presenza di difetti nel software porterebbe a maggiore impatto e criticità per l’utilizzatore. E contribuire anche nelle operazioni di reporting e triaging dei bug, ad esempio a valle dell’attività di interpretazione dei risultati dei test automatici, rendendo anche queste attività più rapide, complete e sistematiche.
• Consentire una maggiore capacità di mantenere attuali i test case e le suite di test al variare dei contenuti del software, facilitando una manutenzione automatica dei casi di test al variare dei contenuti e del comportamento delle applicazioni.
Quelle sopra elencate sono solo alcune delle possibili aree del software testing dove l’AI può dare un contributo rilevante, sia in termini di efficienza e di costi, sia in termini di copertura e sistematicità delle attività coinvolte. Considerando che siamo solo all’inizio, è facile intuire quali a quanti possano essere i campi di applicazione ancora da delineare, sperimentare e consolidare sui quali l’AI può imprimere alle discipline per la qualità del software un’accelerazione mai vista in precedenza.
Non è solo il software testing a beneficiare dell’AI. La qualità del software è fortemente legata ad esempio a una efficace ingegneria dei requisiti. Anche in quest’ambito l’AI può contribuire a migliorare la comprensione, l’analisi e la gestione dei requisiti software. Ecco alcune delle principali applicazioni dell’AI nell’ingegneria dei requisiti.
• In primo luogo, con le tecniche di NLP (Natural Language Processing) e analisi semantica, l’AI può aiutare a comprendere e interpretare meglio i requisiti espressi in linguaggio naturale. Questo include l’estrazione automatica di informazioni, la classificazione dei requisiti e la rilevazione delle ambiguità o delle incongruenze nel testo.
• L’AI può essere poi utilizzata per generare automaticamente documenti basati sui requisiti, per esempio use case, modelli realizzati con diagrammi UML, a partire da specifiche di input in linguaggio naturale o da altri modelli disponibili. Questo va a tutto vantaggio della riduzione del lavoro manuale e della sistematicità delle attività che precedono l’implementazione, agevolando il processo di ‘shift-left’, cioè di anticipazione dei meccanismi che devono garantire la qualità di un prodotto software.
• L’AI può assumere un ruolo fondamentale nell’aiutare a identificare e valutare la priorità dei requisiti in base a criteri come il valore commerciale, il rischio associato o la complessità tecnica, criteri che sono alla base di tutti i paradigmi più attuali e diffusi che guidano oggi lo sviluppo software, a cominciare dall’approccio Agile. L’utilizzazione di sistemi intelligenti di gestione dei requisiti, permette di adattare dinamicamente i requisiti in base ai cambiamenti nel contesto, ad esempio seguendo i cambiamenti delle condizioni del mercato o delle priorità degli stakeholder. Inoltre l’AI può semplificare il tracciamento bidirezionale dei requisiti, consentendo di identificare le dipendenze tra di essi, di analizzare gli impatti delle modifiche e di aiutare a garantire la coerenza e l’integrità dei requisiti durante tutto il ciclo di vita del progetto.
• Infine, l’AI può essere utilizzata per creare simulazioni e modelli predittivi basati sui requisiti. Ciò consente, soprattutto nei sistemi più critici e ad alto tasso di incertezza, di valutare anticipatamente le prestazioni, la scalabilità e altri aspetti critici del sistema prima della sua implementazione effettiva.
L’impatto sulle professionalità
Dato lo scenario che abbiamo davanti, non possiamo ignorare quale possa essere l’impatto sulle professionalità legate ad ogni ambito della qualità del software. Come sempre accade quando siamo di fronte a innovazioni tecnologiche in qualche modo rivoluzionarie, queste creeranno certamente un profondo cambiamento sulle professionalità come oggi le conosciamo, creando come effetto delle nuove competenze e specializzazioni che le andranno gradualmente ad affiancare prima e a sostituire in un secondo momento. È ragionevole ipotizzare che alcune delle nuove specializzazioni saranno le seguenti.
• Con l’automazione dei Test basata sull’AI, saranno necessari professionisti esperti nell’utilizzo dei corrispondenti strumenti e tecnologie, tra le quali la generazione automatica di script di test, l’integrazione di algoritmi di apprendimento automatico nei test, e l’ottimizzazione dell’esecuzione dei test mediante l’AI. Gli analisti dei dati di test si andranno quindi a concentrare sull’analisi approfondita dei risultati dei test ottenuta con strumenti di machine learning e big data per l’analisi dei dati. Saranno in grado di identificare trend, correlazioni significative, metriche di qualità e suggerire azioni correttive basate sui risultati dell’analisi.
• Sarà certamente necessario disporre di esperti di sicurezza dei test basata sull’AI. Questi professionisti si specializzeranno nel testing della sicurezza delle applicazioni andando a utilizzare, e quindi a conoscere in modo approfondito, tecniche basate sull’AI per svolgere test penetrativi intelligenti, il rilevamento automatico di vulnerabilità e l’analisi dei rischi.
• Gli ingegneri dei test predittivi si concentreranno su modelli di machine learning pensati per anticipare e prevenire difetti, identificare aree critiche sulle quali concentrare i test e ottimizzare la strategia di test in base a dati storici e dati raccolti in tempo reale.
• Come trascurare infine chi si dovrà specializzare nel testare e certificare i sistemi stessi che implementano l’AI, ad esempio per il Natural Language Processing o la Visual Validation basata sull’AI.
Naturalmente le nuove professionalità non saranno solo circoscritte al software testing, ma riguarderanno diverse discipline nell’ambito della qualità del software
• Nuovi professionisti dell’ingegneria dei requisiti si concentreranno su come alimentare i meccanismi di machine learning legati all’apprendimento dei criteri per individuare il business value, i rischi e di conseguenza le priorità dei requisiti di prodotto, e di come adattare questi modelli alle variazioni delle condizioni di mercato, del contesto di business e delle priorità lato cliente.
• Non potranno certo mancare esperti nella gestione di strumenti basati sull’AI per la produzione di documenti di specifica dei requisiti, di modelli, di strategie di test basate sulle analisi predittive, o di layout di configurazione degli ambienti di test e di programmazione ottimale delle relative risorse.
Queste specializzazioni sono solo alcune di quelle che si potranno ipotizzare man mano che l’impatto dell’Intelligenza Artificiale diventerà sempre più definito e necessario, e che permetteranno alle aziende di tenere il passo con chi utilizzerà al meglio le nuove tecnologie e le nuove pratiche e tecniche che ne derivano, e ancora di più con chi saprà anticipare l’introduzione di queste nuove conoscenze.
Il ruolo delle certificazioni
Gli organismi che a livello internazionale si occupano di definire gli schemi di certificazione delle competenze professionali orientate alla qualità del software, tra cui ISTQB® per il software testing, IREB® per l’ingegneria dei requisiti, iSAQB® per le architetture software e IQBBA® per la business analysis, sono tutte molto attente all’impatto che l’AI sta portando ad ognuna delle proprie discipline, per intercettare i profili di competenze che dovranno avere le nuove figure professionali che si stanno delineando sullo scenario internazionale.
ITA-STQB, l’organizzazione che in Italia rappresenta gli organismi sopra citati, è particolarmente attenta alle evoluzioni degli schemi di certificazione nel settore dell’AI. La disponibilità di materiale di studio prontamente tradotto in lingua italiana e l’offerta di corsi di formazione, non obbligatori, offerti da enti di formazione accreditati, consente alle aziende e ai professionisti italiani di rimanere perfettamente aggiornati rispetto alla rivoluzione in corso, e di accedere ad un completo programma di esami per ottenere la certificazione delle prossime professioni nell’ambito della qualità del software, dove l’AI sarà protagonista.
Nonostante lo scenario disegnato rappresenti una prospettiva di profondo cambiamento nelle professionalità del software, tutti gli analisti concordano nell’affermare che insieme alle nuove conoscenze che l’AI richiede, restano essenziali le competenze di base che già oggi sono necessarie per svolgere un lavoro nell’ambito della qualità del software. I principi di fondo, i concetti fondamentali, le tecniche basilari che è necessario conoscere oggi, continueranno ad essere bagaglio irrinunciabile delle nuove professioni della software quality in futuro.