Guida

Software testing, cos’è e come automatizzare il collaudo

Nei moderni ambienti di sviluppo software, come quelli che applicano i paradigmi Agile/DevOps, i tool per l’automazione dei test diventano strumenti insostituibili per eseguire e reiterare molte operazioni, casi di test e cicli di collaudo, altrimenti impraticabili in modalità manuale. Ecco i vantaggi dei test automatici per i team di controllo della qualità del software

Pubblicato il 28 Mar 2022

Concetto di software testing e automazione

Come qualunque altro prodotto esistente sul mercato, anche un programma software non è mai perfetto: una volta sviluppato, prima di essere distribuito, commercializzato o messo in produzione all’interno di un’organizzazione, richiede una meticolosa fase di collaudo, serve il software testing. Questa affermazione è ancora più attuale in un momento, come quello che stiamo attraversando, dove ogni azienda sta diventando una impresa digitale, dove la parte di software è preponderante e i sistemi software based sono sempre più complessi.

Cos’è il software testing

uomo che seleziona software testing su un tablet del futuro

Il software testing funzionale si può definire un’attività per valutare le funzionalità di un programma software, con l’obiettivo primario di identificare bug e malfunzionamenti che possono verificarsi in determinate condizioni di utilizzo.

La fase di collaudo, nei modelli di sviluppo tradizionali, viene pianificata al termine dello sviluppo del codice. Può servire, ad esempio, a verificare la corrispondenza delle funzionalità del software rispetto ai requisiti richiesti dall’utente. Oppure se ci sono difetti in grado di pregiudicare la correttezza del funzionamento. O anche a controllare se il livello di usabilità del programma è basso, al punto da compromettere la produttività dell’utilizzatore a cui è indirizzato.

Il testing del software è quindi imprescindibile per garantirne la qualità e inoltre, d’altra parte, è indispensabile per garantire all’utente una user experience soddisfacente. Quest’ultimo è un fattore sempre più importante. Basti pensare che, secondo un’analisi Stardust, il 72% degli utenti che abbia una brutta esperienza di un servizio software o di una app li abbandona. E non vi ritorna.

Tipi di test software

In generale, pur esistendo diverse tipologie e metodologie di testing del software, eseguibili in modalità manuale o automatica, si possono distinguere due principali approcci di analisi di test, entrambi automatizzabili. Si tratta dei metodi:

  • di analisi statica, che esaminano il codice del programma (analisi del codice, ispezione, revisione) e la documentazione ad esso associata,
  • e di quelli di analisi dinamica. Questi valutano il comportamento del codice mentre è in esecuzione, per esempio fornendo degli input e osservando i risultati di output.

Test software: Valutare anche la qualità strutturale

È tuttavia importante precisare, come emerge dagli esempi indicati, che non tutte le metriche di collaudo sono destinate a misurare e verificare unicamente le caratteristiche e i requisiti funzionali del software, perché esistono anche metriche per valutare la qualità strutturale del codice. I suoi requisiti, cosiddetti, ‘non funzionali’, come le prestazioni, la scalabilità, la manutenibilità, l’usabilità, la sicurezza del programma software.

Ancora, la definizione di software testing è inevitabilmente e indissolubilmente connessa alle modalità di esecuzione del collaudo che, a seconda del ciclo di vita del Software adottato (SDLC) – waterfall o Agile/DevOps – può avvenire attraverso processi, team di tester e tool di automazione differenti.

Perchè è importante il software testing nello sviluppo del codice

Sia che venga eseguito manualmente o attraverso metodi automatici, il processo di testing del software costituisce un tassello fondamentale nel ciclo di sviluppo del codice. Le attività di software testing si orientano per assicurare la qualità dei prodotti software. In particolare nei contesti di business, l’analisi della qualità funzionale del codice, come detto, permette di verificare quanto il software soddisfa gli specifici requisiti per cui è stato progettato. Quindi si valuta se le funzioni richieste non presentano difetti, ed anche, ad esempio, se sono conformi alle normative di un determinato settore. In altri termini si effettua una Verification (il prodotto creato è corretto) e una Validation (è stato creato il prodotto corretto) .

Test funzionali del software

Il test funzionale è poi di vitale importanza nei sistemi ‘safety critical’, in campo automotive, aerospaziale, industriale, medicale: in un’auto, un aereo, un macchinario, collaudare la sicurezza funzionale del software serve a far sì che il sistema funzioni sempre nel modo previsto, e non presenti comportamenti anomali o inattesi che possano mettere in pericolo l’incolumità o la vita stessa delle persone. Si verifica altresì la capacità del Software ad autodeterminare delle anomalie come a verificare che sia in grado di funzionare in condizioni di stress.

Test della qualità strutturale del software

L’altro aspetto, ossia il test della qualità strutturale del software, della sua solidità architetturale, è un requisito importante per una serie di ragioni:

  • perché occorre disporre di un codice scritto in maniera tale da facilitare le attività di test e ridurre i costi totali di collaudo;
  • un codice ben leggibile, facilmente comprensibile e manutenibile, modulare e riusabile, in cui si possa apportare modifiche senza introdurre nuovi bug, e contenendo il grado di complessità al giusto livello;
  • un software che permetta agli sviluppatori di lavorare con maggior rapidità;
  • un servizio efficiente, capace di massimizzare lo sfruttamento delle risorse, specie in sistemi limitati a livello hardware;
  • ma anche un codice sicuro, esente da vulnerabilità che aprono le porte ad attacchi informatici e violazioni della cybersecurity.

Test automatici di collaudo del software: i vantaggi

Nel testing automatizzato si usano strumenti software per scrivere ed eseguire test automatici. Tali test collaudano rapidamente vari aspetti e requisiti di un’applicazione, prima del rilascio della stessa in produzione.

Negli scenari descritti, come si è visto, i tipi di test da effettuare sul codice sono numerosi e complessi. Per certe tipologie di collaudo è preferibile, o necessario, l’intervento di un tester dotato di determinate competenze sul prodotto. Il testing del software eseguito manualmente, quindi senza l’ausilio di tool di automazione, può però rivelarsi un’attività caratterizzata da operazioni spesso laboriose, ripetitive e noiose. Operazioni che rischiano di abbassare la qualità delle verifiche in essere. Può essere necessario reiterare molte volte su un computer uno stesso test funzionale, per osservare il comportamento dell’applicazione, o ripetere il test in altre condizioni, ad esempio su più macchine con diversi sistemi operativi, o differenti configurazioni hardware. Utilizzando operatori umani, il test manuale implica tempi e costi elevati, dipendenti dalla complessità di analisi del codice e dall’entità delle risorse umane utilizzate.

Perché il collaudo automatizzato

Nel collaudo automatizzato, invece, gli strumenti di software testing sono in grado di eseguire in autonomia svariati tipi di analisi. E di condurre anche migliaia di differenti test case e operazioni. I test automatici sono vantaggiosi soprattutto nei collaudi con operazioni ripetitive. Operazioni in cui occorre rieseguire molte volte di seguito gli stessi, complessi casi di test a fronte di dati di input differenti.

Velocità e ripetibilità dei test automatici del software

Durante i cicli di sviluppo software, per assicurare la qualità, ogni qualvolta il codice subisce modifiche, i test si ripetono. Questo per accertarsi che le nuove features introdotte siano tra di loro integrabili. E, inoltre, per verificare che le features in essere non subiscano una regressione (Regression Test). Per esempio, a ogni rilascio di una nuova versione di un software, occorre rieseguire i test su tutti i sistemi operativi e le configurazioni hardware supportate. In queste situazioni, avere a disposizione test automatizzati che, una volta creati, possono essere riutilizzati e ripetuti con rapidità quante volte si desidera. Il tutto, senza ulteriori costi, rappresenta senza dubbio un notevole vantaggio.

Va poi considerato che il testing automatizzato permette di eliminare gli errori che anche il tester più zelante, prima o poi, finisce per commettere, collaudando manualmente l’applicazione in monotone operazioni di routine. Non solo, ma lo stesso tester, liberato da questo genere di compiti, può dedicarsi ad attività a più alto valore aggiunto. Attività quali la creazione di nuovi test software automatizzati, o il collaudo e la verifica di requisiti non funzionali, come l’usabilità dell’applicazione.

La tecnologia di automazione dei test

Ancora, la tecnologia di automazione dei test consente di eseguire il collaudo di applicazioni software altrimenti difficili, se non impossibili, da mettere alla prova. Può essere il caso di quando è necessario collaudare un’applicazione web con migliaia di utenti. Qui il testing automatizzato è in grado di simulare centinaia o migliaia di utenti virtuali che interagiscono con l’applicazione. Obiettivo in quest’ultimo caso è la valutazione del grado di scalabilità.

Automazione e ambienti Agile/DevOps

Oggi implementare una strategia di automazione delle attività di test del software è ormai un mantra sempre più diffuso. E questo, specie nei moderni ambienti di sviluppo, che adottano il modello Agile/DevOps. A differenza del tradizionale paradigma ‘waterfall’, in cui la fase di testing del software è eseguita solo al termine del processo di sviluppo, nel modello Agile/DevOps, che abbraccia la filosofia dell’integrazione e della distribuzione continua (CI/CD), anche il testing deve essere eseguito continuamente. E procedere alla stessa velocità, altrimenti rischia di fallire tutto il ciclo di design del prodotto.

Tuttavia, collaudare di continuo manualmente una app sviluppata in ambiente Agile/DevOps, a cui si aggiungono nuove funzionalità a ogni rilascio di una nuova versione, diventa arduo o impraticabile. Ecco perché il testing automatico assume una valenza fondamentale.

In generale, occorre però anche precisare che, per quanto in molti casi si riveli utile o necessaria, l’implementazione di un framework di automazione dei test può richiedere molto tempo. Le soluzioni di automazione, commerciali o open source, spesso sono complicate da gestire. Esse richiedono ai tester attività di sviluppo, personalizzazione e manutenzione. Oggi, dunque, in fase di selezione dei tool di automazione dei test, è bene orientarsi verso soluzioni di facile utilizzo e amministrazione. Soluzioni adottabili non solo da sviluppatori esperti, ma anche dai ‘business tester’, dotati di competenze sulle funzionalità dell’applicazione da collaudare. Profili non necessariamente preparati a livello tecnico su interventi di ‘customizzazione’ dello strumento d’automazione da usare nel test.

Valuta la qualità di questo articolo

La tua opinione è importante per noi!

Articoli correlati

Articolo 1 di 3