Test Automation – Uno strumento efficace per migliorare l’affidabilità delle applicazioni

Quella del testing è una fase cruciale del processo di sviluppo software che, come per ogni altro prodotto materiale, deve prevedere delle metodologie per poterne verificare la qualità ed il rispetto dei requisiti di sistema stabiliti in fase di progetto.

Durante lo sviluppo di un nuovo software, le fasi di testing del prodotto sono essenziali per evidenziare malfunzionamenti o possibili discrepanze fra quanto richiesto nelle specifiche del committente e quanto effettivamente sviluppato. La natura astratta del prodotto può infatti rendere difficile verificare oggettivamente che quanto realizzato sia effettivamente attinente alle aspettative dei vari stakeholders.

In seguito al rilascio, è sempre necessario eseguire dei test per verificare che la qualità del software non degradi nel tempo, a causa dell’evoluzione dello stesso (introduzione di nuove funzionalità o modifica di quelle già esistenti) o delle componenti esterne (es. nel caso di un applicativo web, l’aggiornamento del browser usato come client).

Si parla di test funzionali quando si vuol verificare la correttezza del software, ovvero che il suo comportamento sia uguale a quello atteso.

Con requisiti non funzionali ci si riferisce invece alle qualità del software in senso più ampio, come ad esempio le performance, la scalabilità, la semplicità d’uso, ecc.

Sia che si tratti di test funzionali o non funzionali, questi possono indistintamente essere progettati per prevedere una verifica manuale dei requisiti, ad esempio attraverso la navigazione di alcune pagine web ed il controllo del corretto caricamento delle stesse, oppure mediante dei meccanismi di automazione.

Ci si riferisce nel secondo caso alla realizzazione di script in grado di eseguire le medesime operazioni che sarebbero state svolte manualmente, ma in modo automatico e ripetibile. Viene così introdotta la tecnologia alla base del test automation.

Mentre per applicativi molto semplici è ancora possibile scegliere la via manuale, quando cresce la complessità o si devono mantenere più software o più versioni di software, l’approccio al testing automation è ormai divenuto uno “standard”.

Oltre all’efficienza, migliora anche la soddisfazione del team di sviluppo, che può concentrarsi su operazioni creative e dal contenuto intellettuale, piuttosto che sullo svolgere delle attività monotone e ripetitive. Migliora anche l’affidabilità dei risultati, che non sono soggetti ad errori o sviste umane.

Per assecondare le esigenze di business, i SW subiscono cambiamenti molto frequenti durante il loro lifecycle; situazione portata all’estremo dalle metodologie di sviluppo agile.

Può succedere che l’introduzione di una nuova funzionalità vada a compromettere in modo inatteso delle funzionalità già esistenti e validate.

Per accorgersi tempestivamente di queste casistiche, è necessario eseguire tutta la suite di test inerenti all’applicativo ogniqualvolta vengano apportate delle modifiche.

Nelle realtà complesse l’esecuzione dei test set diventa oneroso anche se si dispone di script ripetibili; vengono ancora una volta in aiuto le potenzialità del testing automation, che includono metodologie di schedulazione automatica delle esecuzioni.

Ricapitolando, il testing automation permette di rendere più efficienti le fasi di testing e validazione dei requisiti tramite due pratiche:

  • Scrittura di script di testing ripetibili che automatizzino la navigazione di un sito web, di un’applicazione ecc, senza la necessità che un individuo debba farlo manualmente;
  • Utilizzo di strumenti per l’esecuzione automatica di questi script a fronte di eventi (come il rilascio di una release del software). I test vengono eseguiti anche con una cadenza temporale, poiché le qualità del software potrebbero variare anche per cause esterne, quali l’aggiornamento del sistema operativo o modifiche ad altri software di terze parti integrati con l’applicativo in oggetto.

Il testing automation permette di abbattere i costi di validazione del software, riducendo significativamente la necessità di interazioni umane nel processo di testing.

Così facendo, la fase di test può perdere la concezione comune di “onere aggiuntivo” ed essere vista per ciò che realmente è: un’opportunità di risparmio.

I problemi individuati nelle prime fasi del processo possono infatti essere risolti con costi molto inferiori rispetto agli stessi problemi trovati solo nelle fasi più avanzate.

In ambiente di produzione, la notifica tempestiva delle anomalie può ridurre i danni sia economici che di immagine.

L’adozione completa del concetto di “test automation” enfatizza questi vantaggi economici, anticipando sempre più l’emergere delle problematiche attraverso l’aumento della frequenza di esecuzione dei test, senza aggiungere overhead al processo di sviluppo e manutenzione del software. Si possono inoltre reinvestire le risorse prima necessarie all’esecuzione manuale dei test per ampliare il test coverage, ovvero la quantità e la capillarità delle qualità del software validate con i test.

 

Francesco Cencioni – A.I. & UX Lab developer