Per comprendere il funzionamento di un software l’ideale è sottoporlo sin dai suoi “primi passi” a uno smoke test. Ecco cos’è, com’è strutturato e quali sono i benefici del suo impiego


Dall’edilizia al software, il principio alla base dell’utilità dello smoke test è uguale: identificare le falle prima di subire danni gravi o addirittura catastrofici. Ed è proprio dal settore delle costruzioni che nasce il termine. La prova del fumo è quella messa in atto dagli operai edili. I tubi dell’acqua non possono avere perdite, altrimenti potrebbero causare danni e allagamenti. Ecco perché gli operai a volte fanno passare del fumo attraverso le tubature dell’acqua prima di esporle all’acqua. Se il fumo esce dai tubi da qualche parte, tranne che alle estremità, allora è lì che ci sono le perdite.

Lo stesso avviene nel mondo degli sviluppatori software. Come specificato e reso celebre da Cem Kaner, James Bach, e Brett Pettichord, autori del libro “In Lessons Learned in Software Testing” il concetto di smoke test deriva dalle prove sull’hardware elettronico. “Si inserisce una nuova scheda e si accende la macchina. Se si vede del fumo provenire dalla scheda, si spegne. Non serve fare altri test”. Dietro a questa semplice frase si rivela l’importanza dello smoke test in informatica: lo sviluppo del software è difficile. Oltre a creare un prodotto funzionale, si ha a che fare con bug che possono creare problemi. Se non vengono identificati ed eliminati subito, l’intero processo di sviluppo potrebbe bloccarsi. Da qui l’importanza della “prova del fumo” che ha a che fare con la funzionalità dei sistemi e con la possibilità che un software o un’app abbia successo o meno.

Cos’è lo smoke test

Lo smoke test è il controllo preliminare del software dopo una compilazione e prima di un rilascio. Aiuta gli sviluppatori di software a capire se il programma funziona come dovrebbe, e se è pronto a passare alla fase successiva di test. In altri termini, gli smoke test permettono di verificare la validità delle build (termine che indica il processo di trasformazione del codice sorgente in un artefatto eseguibile) che hanno creato. Attivando la “prova del fumo” prima di altri test formali, possono assicurarsi che non si sprechino tempo e risorse durante le fasi di test successive.

Senza smoke test, si rischia appunto di gettare via tempo e denaro in uno sviluppo di programmi altrimenti inefficaci. Senza di esso, i problemi più importanti sfuggono e hanno la possibilità di rimanere più a lungo: così, grazie a questa prova si possono individuare i bug ed eliminarli.

Inoltre, è importante perché apre la strada ad altri tipi di test, ed eseguire più test sulle build migliora la loro qualità complessiva.

Cosa non è: la differenza con i sanity test

A volte smoke test viene confuso con sanity test. Quest’ultimo è un sottoinsieme del test di regressione, che a sua volta è un tipo di test in cui è possibile verificare che le modifiche apportate nel codebase non abbiano un impatto sul software esistente.

Il test di regressione è il test completo delle funzionalità: viene eseguito dopo aver controllato alcune funzionalità con il sanity test, che a sua volta viene eseguito per garantire che le modifiche al codice apportate funzionino correttamente.

Da qui si rivela la differenza: gli smoke test vengono eseguiti per accertare che le funzionalità del programma funzionino correttamente. Il sanity test viene fatto per controllare che i bug siano stati corretti dopo la compilazione.

Come viene eseguito lo smoke test

I tester del Quality Assurance eseguono lo smoke test dopo che gli sviluppatori consegnano ogni nuova build di un’applicazione. Se il codice lo supera, la build del software passa a test più rigorosi, come i test di unità e di integrazione. Se lo smoke test fallisce, allora i tester hanno scoperto un difetto importante che blocca tutte le altre prove e fasi. Il team QA chiede quindi agli sviluppatori di inviare un’altra build. A proposito invece delle modalità di esecuzione degli smoke test, le tre più comuni sono i test ibridi, i test manuali e i test automatici.

Il test manuale viene svolto da tester umani. Per comprendere come funziona, prendiamo a esempio lo sviluppo di un’app mobile. Nel caso di testing, è possibile far svolgere ai tester una prova di esecuzione su una varietà di dispositivi.

È la modalità che richiede più tempo (anche mezza giornata), ma ha il vantaggio di mettere alla prova più veritiera l’app: i tester possono essere considerati come i primi utilizzatori, una volta immessa sul mercato. L’esito, quindi, sarà più indicativo dell’efficacia e della funzionalità della app.

Nel caso invece del test automatico, i tester sono strumenti. Il pregio è il risparmio di tempo e risorse per eseguire il test, condotto in maniera più rapida da una macchina. Lo svantaggio è che l’elemento umano non viene considerato: in alcuni casi può essere determinante.

Il test ibrido contempla entrambi i metodi descritti. Implica, quindi, l’impiego di una componente di automazione nel processo di smoke testing, mentre si basa anche su un certo grado di lavoro umano manuale per testare il software. Il vantaggio dell’ibrido è proprio di combinare i pregi dei due tipi di test, umano e automatico, con maggiori garanzie della fattibilità delle build.

Quali sono i vantaggi dello smoke test

Sono molteplici i vantaggi offerti dallo smoke test. Innanzitutto, poter verificare, in modo affidabile e dall’inizio, che le build siano stabili è una garanzia per la successiva stabilità del sistema. Tutti coloro che sono coinvolti nelle fasi iniziali e successive del processo di test saranno in grado di lavorare avendo la consapevolezza – e la tranquillità – di non doversi preoccupare di riscontrare significativi bug all’interno del codice, causa di problemi anche gravi.

Uno dei maggiori vantaggi degli smoke test è la loro facilità di esecuzione. Grazie alla loro semplicità, gli smoke test sono compatibili con quasi tutte le metodologie di test con cui si può pensare di combinarli.

Un altro pregio è che esso riesce a individuare rapidamente i bug. Nel mondo dell’informatica in molti conoscono i danni che possono causare queste anomalie. Fa scuola la storia del bug informatico di Knight Capital, che è costato all’azienda 440 milioni di dollari, rendendolo uno degli errori di software più costosi della storia. Facendo spesso lo smoke test, è possibile assicurarsi che il software sia relativamente privo di bug quando viene distribuito.

Lo smoke test ha l’indubitabile pregio di far risparmiare tempo e denaro. Esso permette, infatti, di individuare possibili problemi in modo rapido ed efficiente permettendo – come detto – di non sprecare risorse.