Riuscire a fornire prodotti software di elevata qualità oggi diventa sempre più difficile, ma al tempo stesso costituisce un requisito non negoziabile nel dinamico e competitivo mercato delle applicazioni e servizi digitali, ormai ampiamente diffusi e adottati nel mondo business e consumer. Il compito è difficile perché i team di sviluppo sono sotto pressione costante, da un lato per integrare nel software le sempre nuove funzionalità e caratteristiche richieste, dall’altro per rispettare le tabelle di marcia e le tempistiche di consegna dei vari progetti.
L’incremento delle funzionalità comporta un aumento della complessità del codice e della probabilità di introdurre errori e difetti che, se identificati in una fase tardiva del ciclo di sviluppo software (SDLC – software development lifecycle), rischiano di generare un nuovo effort di sviluppo e conseguenti costi in termini di tempo e denaro. Inoltre, fornendo software di qualità scadente o non rispondente alle esigenze e alle aspettative degli utenti, si rischia che prodotti e applicazioni digitali vengano subito scartati e disinstallati con un click del mouse o un tap sullo schermo dello smartphone. Bassa qualità del software significa deterioramento della reputazione e dell’immagine aziendale, ma anche minor capacità di fidelizzare i clienti. In tale contesto, dunque, per accelerare e ottimizzare le attività di software testing, le strategie di test automation stanno assumendo un’importanza molto maggiore rispetto al passato.
Test automation: che cos’è
Tradizionalmente, le procedure di test manuale richiedono, da parte del tester, la definizione, scrittura ed esecuzione di tutti i test case ritenuti necessari per verificare il funzionamento del codice, con notevole dispendio di tempo e probabilità di commettere vari errori. Una strategia di test automation, invece, si può identificare come un insieme di metodologie, tecnologie e strumenti di automazione che ha l’obiettivo di ridurre il più possibile procedure e interventi manuali, tramite l’uso di script programmati per eseguire in automatico i test e validare il software. L’obiettivo è completare l’esecuzione dei test in minor tempo, accelerare velocità e qualità delle operazioni di collaudo e verifica e ottimizzare nel loro complesso i processi di software testing.
Benefici dei tool di test automation rispetto ai test manuali
Oggi la test automation è una strategia imprescindibile, soprattutto quando si tratta di analizzare in tempi brevi prodotti o applicazioni complessi, costituiti da migliaia o milioni di linee di codice, utilizzando lunghe routine di collaudo ripetitive e tediose. In questi casi, tramite i tool di test automation, i tester riescono non solo a rendere più agile e veloce il proprio lavoro, ma anche a diminuire, o eliminare, i possibili errori. I test automatizzati si possono programmare per funzionare senza necessità di presidio, e confrontare gli esiti delle verifiche con i risultati attesi. Naturalmente, ciò non significa mancanza di controllo, in quanto i tool di test automation possono integrare funzionalità di reportistica in grado di registrare l’attività di ogni script di test, e controllare in qualunque momento l’andamento e lo stato di ciascun collaudo.
La test automation aiuta a risparmiare tempo e risorse, permettendo di migliorare la precisione e la copertura dei test, e d’identificare con maggior efficacia ed efficienza bug e difetti del codice. Inoltre, consente ai team di assicurazione della qualità (QA) d’incrementare la riusabilità degli script di automazione dei test, e di adottarli sapendo che, ad ogni nuovo controllo del codice, lo script eseguirà la verifica esattamente nello stesso modo, mantenendo uniforme e coerente la configurazione del test e la procedura di collaudo. Ancora, attraverso la test automation è possibile automatizzare test funzionali, test delle prestazioni, stress test, in maniera estesa e su larga scala, ad esempio, quando occorre verificare la qualità del software in infrastrutture e siti multilingua distribuiti in più aree geografiche.
Con il modello DevOps, test automation ancora più centrale
L’importanza dei tool di test automation sta crescendo anche in relazione al modello DevOps, che, rispetto alle metodologie tradizionali, improntate sul classico paradigma ‘waterfall’, si propone d’introdurre ulteriore velocizzazione e automazione nel ciclo di sviluppo e distribuzione del software. Oggi, nei reparti IT delle imprese, la strategia per accelerare velocità e frequenza dei rilasci software, ridurre i costi, e mantenere comunque la qualità e affidabilità del codice, è adottare in modo sempre più diffuso e massivo i metodi di sviluppo Agile e DevOps. Quest’ultimo, attraverso le pratiche CI/CD (continuous integration, continuous delivery/continuous deployment), permette di costruire una pipeline di creazione, distribuzione e implementazione del codice completamente integrata e automatizzata.
All’interno di tale pipeline a elevata automazione è però chiaro che la fase di test non può trasformarsi nel collo di bottiglia in grado di rallentare tutto il processo: per questa ragione, DevOps adotta la pratica di collaudo definita continuous testing, in cui il codice viene testato ad ogni avanzamento del processo di distribuzione continua, tramite un meccanismo ricorsivo di feedback continuo. Ad esempio, quando uno sviluppatore apporta modifiche a una porzione di codice, esso viene subito verificato attraverso un set di unit test automatizzati. Se il test fallisce, il codice viene respinto, se il test ha successo, il codice passa alle successive fasi di deployment, e così via. Il continuous testing si articola poi in maniera sinergica con lo ‘shift-left testing’, una strategia indirizzata a spostare il software testing subito nelle fasi iniziali del ciclo di sviluppo.
Test automation, componente chiave per il continuous testing
Una metodologia di collaudo come il continuous testing non si può realizzare semplicemente implementando nuove tecnologie o strumenti di test, ma richiede necessariamente un cambiamento culturale nella mentalità dei tester e una trasformazione dei processi di sviluppo. Tuttavia, il continuous testing non può essere implementato senza l’ausilio di adeguati strumenti di test automation.
Nell’ambito del continuous testing, i test automatizzati servono infatti a svolgere in automatico svariate operazioni. Queste includono, ad esempio, la verifica di singoli componenti e porzioni di codice del programma (unit testing); il collaudo delle funzionalità (functional testing); i test di regressione (regression testing), concentrati sulla verifica del corretto funzionamento del software anche dopo l’aggiunta di ulteriori caratteristiche e funzioni; i test d’integrazione (integration testing), che servono a testare il comportamento del sistema nel suo complesso e la correttezza delle interazioni tra moduli del programma, API (application programming interface), software di terze parti e altri componenti dell’architettura applicativa.
Tipologie di tool di test automation
Nel settore del software testing sono disponibili numerosi tool di test automation, sia di tipo commerciale, quindi ‘closed source’, sia di tipo open source. In questi ultimi, tra l’altro sempre più adottati per i benefici che forniscono in termini di costi, facilità di personalizzazione e libertà dal rischio di vendor-lock-in, sono inclusi numerosi strumenti software.
Uno tra i principali strumenti open source è, ad esempio, Selenium, un insieme di differenti tool e librerie che formano un framework di testing automatizzato, utile per eseguire la validazione di applicazioni web su diversi tipi di browser (Google Chrome, Internet Explorer, Firefox, Edge, Safari, Opera). Selenium supporta diversi linguaggi (Python, Java, C#) per lo sviluppo dei test script, e, come accennato, è costituito da diversi componenti (WebDriver, IDE, Grid). In particolare, IDE (integrated development environment) è lo strumento per sviluppare i test case, mentre Grid consente di eseguirli su macchine e piattaforme differenti.
Un altro framework open source di test automation, anch’esso basato sull’interfaccia WebDriver, è Appium, utile per il testing di mobile app in modalità “cross -platform” (iOS, Android, Windows). In altre parole, attraverso Appium, i test si possono scrivere per molteplici piattaforme usando la stessa API (Application Programming Interface), e ciò permette il riutilizzo del codice tra i set di test case sviluppati per iOS, Android, Windows.
Nel mondo dei tool open source di test automation si può anche ricordare Cucumber, uno strumento fondato sull’approccio BDD (Behaviour-Driven Development), che ha l’obiettivo di consentire la scrittura di test case comprensibili per chiunque, indipendentemente dalle personali conoscenze tecniche.
Negli ambienti di sviluppo che in maniera crescente adottano la metodologia DevOps, applicando le pratiche di continuous testing, sono poi disponibili altri strumenti, in grado di facilitare il test automatizzato e continuo. Il server open source di automazione CI/CD (continuous integration/continuous delivery) Jenkins, ad esempio, può essere utilizzato per automatizzare le attività di testing, grazie alla possibilità d’installare plugin che aiutano a eseguire le test suite.
Sempre all’interno del framework DevOps, vi sono poi tool di gestione automatica della configurazione basati sull’approccio IaC (Infrastructure-as-Code). Questi strumenti, tra cui si possono citare software come Ansible, Chef, Puppet, Terraform, sono utili ai tester e ai team QA (Quality Assurance) per configurare e sincronizzare le operazioni di testing su diversi sistemi operativi e ambienti IT. Tramite questi tool è quindi possibile eseguire il deployment delle modifiche in tutti gli ambienti, e standardizzare le implementazioni dei test tra diversi team di tester e QA.
Nuovi strumenti di test automation: dai tool ‘AI-powered’ al crowdtesting
Attualmente, i tradizionali tool di test automation stanno evolvendo le funzionalità e integrando intelligenza artificiale (AI) e machine learning (ML) per migliorare ulteriormente efficacia ed efficienza dei test. Ad esempio, i nuovi tool di test automation sono in grado di utilizzare il ML per comprendere quali modifiche sono state apportate a una data applicazione e adattare i test di conseguenza. In tal modo, i tool, gli script di test, e i test stessi, possono diventare più affidabili e migliorare la propria manutenibilità.
Un’altra nuova funzionalità, basata sulla capacità di AI e ML di riconoscere immagini, è il ‘visual testing’. Quest’ultimo permette di verificare se l’interfaccia utente (UI) di un dispositivo viene visualizzata in modo corretto, e se tutti i suoi elementi hanno forma, dimensioni, posizione, colore tali da non sovrapporsi l’uno sull’altro.
Altro aspetto chiave, soprattutto nel contesto di continua espansione del volume di linee di codice, è l’uso di AI e ML per ottimizzare, e ridurre al minimo, il numero di test case necessari per eseguire il collaudo di una porzione di codice su cui sono state apportate modifiche. Oltre a determinare qual è il numero minimo di test per verificare quel codice, i tool AI-powered sono anche in grado di analizzare l’attuale copertura dei test, individuando le aree caratterizzate da bassa copertura, o indicando quelle in cui l’applicazione è più a rischio.
Complementare alla test automation è poi la metodologia di crowdtesting. Il suo beneficio chiave è la capacità di velocizzare i test e migliorarne la copertura, facendo affidamento sulla potenza di fuoco di ampie comunità di tester motivati, e reperiti esternamente tramite l’uso di piattaforme cloud. Testando per la prima volta, ciascuno con il proprio dispositivo personale, applicazioni, prodotti e servizi digitali in contesti di vita reale, questi collaudatori riescono a trovare bug e difetti non individuabili con i classici strumenti di test automation; difetti che spesso passano inosservati agli occhi dei tradizionali team di tester.