Questo sito web utilizza cookie tecnici e, previo Suo consenso, cookie di profilazione, nostri e di terze parti. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsente all'uso dei cookie. Leggi la nostra Cookie Policy per esteso.OK

Testing del software e automazione: guida all’uso

pittogramma Zerouno

Guida

Testing del software e automazione: guida all’uso

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

22 Mar 2019

di Giorgio Fusari

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. 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

La fase di collaudo, nei modelli di sviluppo tradizionali, viene pianificata al termine dello sviluppo del codice, e 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.

Valutare la qualità del software: diverse metriche automatizzabili

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.

È 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.

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:

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

Quence Point of view Quence - Quality in Essence SCOPRI DI PIU' hbspt.cta.load(3901390, ‘ede2940d-45a0-49aa-9456-a871fe2fdd68’, {});

Valore dei test 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 sono indirizzate ad assicurare la qualità dei prodotti software e, in particolare nei contesti di business, l’analisi della qualità funzionale del codice, come detto, permette di verificare quanto il software è in grado di soddisfare gli specifici requisiti per cui è stato progettato, quindi 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) .

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.

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 codice che permetta agli sviluppatori di lavorare con maggior rapidità;
  • un codice 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.

Perché automatizzare il collaudo del software: i benefici

Nel testing automatizzato si usano strumenti software per scrivere ed eseguire test automatici, in grado di collaudare 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: anche se 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ò rivelarsi un’attività caratterizzata da operazioni spesso laboriose, ripetitive e noiose 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.

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, in cui occorre rieseguire molte volte di seguito gli stessi, complessi casi di test a fronte di dati di input differenti

Automazione significa velocità e ripetibilità dei test

Durante i cicli di sviluppo software, per assicurare la qualità, ogni qualvolta il codice subisce modifiche, i test vanno ripetuti sia per accertarsi che le nuove features introdotte siano tra di loro integrabili sia per verificare che le features in essere non subiscano una regressione (Regression Test). Ad esempio, ad 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, 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, come la creazione di nuovi test software automatizzati, o il collaudo e la verifica di requisiti non funzionali, come l’usabilità dell’applicazione.

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, in modo da valutarne il 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, 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 vengono aggiunte nuove funzionalità ad ogni rilascio di una nuova versione, diventa arduo o impraticabile, ed 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, perché le soluzioni di automazione, commerciali o open source, spesso sono complicate da gestire e 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, ma non necessariamente preparati a livello tecnico su interventi di ‘customizzazione’ dello strumento d’automazione da usare nel test.

Giorgio Fusari

Giornalista

Nel settore giornalistico dal 1989, Giorgio Fusari negli anni ha collaborato per numerose pubblicazioni nel panorama tecnologico e ICT italiano, tra cui la rivista NetworkWorld Italia (gruppo IDG); il settimanale di tecnologia @alfa, del quotidiano Il Sole 24 Ore, la testata Linea EDP. Dal 2012 collabora con il gruppo Digital360 e in particolare con ZeroUno. Tra le aree di maggior specializzazione di Giorgio, il crescente universo dei servizi cloud, il networking, le tecnologie di cybersecurity.

Argomenti trattati

Approfondimenti

G
Guida
S
Software Quality
S
Software Testing

Articolo 1 di 3