Nel campo del testing software lo smoke test rappresenta il controllo preliminare del software in seguito ad una compilazione e prima del rilascio ufficiale. Un processo del genere è di aiuto per gli sviluppatori per comprendere se il programma funziona a dovere e se è pronto a passare alla successiva fase di test.
In parole più semplici, lo smoke test permette di verificare la validità delle build che sono state create. Infatti, applicando la “prova del fumo” prima di altri test preliminari, è possibile ridurre gli sprechi di tempo e risorse nelle successive fasi.
Nel tempo poi la terminologia è stata utilizzata anche riferirsi genericamente ad un modello di verifica di un’idea di business prima del lancio sul mercato di un prodotto da parte delle startup. Andiamo allora a capire nel dettaglio in cosa consiste lo smoke test, come funziona e quali benefici comporta per le aziende.
Definizione di smoke test
Dall’edilizia fino al software, il principio di fondo dello smoke test è lo stesso: individuare le falle prima di subire danni più o meno gravi. Ed infatti è proprio dal campo edile che è nata l’espressione “smoke test”.
La prova del fumo è quella che viene eseguita dagli operai dei cantieri che fanno passare del fumo attraverso i tubi prima di esporli al passaggio dell’acqua. Se il fumo fuoriesce dalle tubature, allora è lì che si trovano le perdite.
La stessa cosa avviene per quanto riguarda il lavoro degli sviluppatori di software. Come spiegato nel libro “In Lessons Learned in Software Testing” di Cem Kaner, James Bach, e Brett Pettichord, l’idea dello smoke test proviene dalle prove effettuate su hardware elettronico.
Gli autori semplificano il concetto dicendo che basta inserire una nuova scheda e accendere la macchina. Se si vede uscire del fumo dalla scheda, si spegne tutto, senza fare ulteriori test. Dietro tale semplificazione si nasconde l’importanza di un test di questo tipo in informatica poiché lo sviluppo software è particolarmente complesso.
Spesso si ha anche a che fare con bug che possono creare potenziali difficoltà e se non vengono indentificati in tempi brevi, tutto il processo di sviluppo può arrestarsi. Dunque, lo smoke test è essenziale per verificare la possibilità o meno che un software abbia successo e viene eseguito quando le nuove funzionalità sono integrate con una build esistente per essere sicuri che tutte le funzionalità critiche vadano a girare correttamente.
Lo smoke test si può anche svolgere per decidere se annunciare una produzione o se tornare indietro, secondo i risultati dell’indagine. Così facendo, la gran parte dei difetti vengono individuati nelle fasi preliminari del ciclo di vita dello sviluppo.
Chi svolge lo smoke test e come funziona?
Di solito lo smoke test viene realizzato dal team QA (Quality Assurance) che, oltre a definire i requisiti a cui il software indagato deve rispondere, verifica che non ci siano difetti. I tester eseguono l’esame diagnostico quando gli sviluppatori hanno dato loro la nuova build di un’applicazione.
Se il codice passa con successo lo smoke test, la build viene sottoposta a diversi test più rigorosi, tra cui quelli di integrazione e unità. Se però lo smoke test evidenzia delle lacune, si chiede agli sviluppatori del software un’altra build.
Tra le altre figure operative addette allo smoke test abbiamo gli UX Designer che svolgono il test dal punto di vista della User Experience. Sono questi ultimi ad accertare l’accessibilità del sistema e della User Interface (UI), il sistema di login e se c’è corrispondenza tra una funzione e l’azione associata.
Dal punto di vista pratico, ci sono 3 diversi modi per effettuare uno smoke test: manuale, automatico oppure ibrido. Prima però di entrare nei dettagli, è bene evidenziare alcuni accorgimenti da seguire in tutte e 3 le procedure. Per cominciare, è indispensabile decidere in anticipo il numero di casi di smoke test dei quali si ha bisogno per non doverlo decidere poi dopo.
In aggiunta, è bene preparare casi e script di test adattandoli alla tipologia di business nella quale si opera. Infatti, una cosa è eseguire uno smoke test in una società di prodotti SaaS e un’altra è farlo in un’azienda che propone piattaforme di e-commerce.
Infine, è preferibile registrare i risultati di ogni test per capire con chiarezza se il risultato è un successo oppure un fallimento. Soprattutto in caso di insuccesso, è importante disporre di un quadro definito degli elementi deficitari per poter correggere gli errori.
Tornando ai metodi per svolgere uno smoke test, vediamo in cosa consistono le 3 tecniche.
Manuale
Il sistema manuale prevede l’utilizzo di tester umani ed ha il pregio di poter coinvolgere risorse anche differenti dagli sviluppatori. Per esempio, nel caso dei test sulla UI, questi possono essere affidati a colleghi senza conoscenze di programmazione che siano però capaci di capire se un’app funziona lo stesso su device e sistemi operativi diversi.
Tale modalità di esecuzione dello smoke test è più dispendiosa in confronto a quella automatica, ma permette di verificare il reale impiego di un software da parte di una persona reale prima del lancio sul mercato.
Automatico
Uno smoke test automatico è indubbiamente molto più rapido di quello manuale. Ciò non toglie però che l’automazione delle operazioni abbia bisogno di un altro progetto specifico di ingegneria del software. Attualmente gli strumenti più diffusi in tal senso si focalizzano sui browser con framework open source, tra cui Selenium.
In realtà, la simulazione di come le persone interagiscono con un’applicazione nel browser può non considerare alcune variabili quali le chiamate asincrone alle API, il rendering dei caratteri in real time, gli eventi JavaScript e così via.
Ibrido
Lo smoke test di tipo ibrido mescola le componenti migliori delle altre due categorie di test. Prevede fondamentalmente l’utilizzo di una parte di automazione, ma senza rinunciare ad una certa quantità di lavoro umano per testare l’applicazione. Oggi forse rappresenta la soluzione più diffusa o comunque più praticabile per assicurare la fattibilità delle build.
I vantaggi dello smoke test
A rendere molto utile lo smoke test è il fatto di offrire una garanzia di stabilità delle build, in modo da ridurre il carico di lavoro che gli sviluppatori devono sostenere nella ricerca di errori e bug. Poter identificare le fonti dei problemi in maniera rapida vuole dire che i team di sviluppo devono perdere meno tempo nel controllare il codice per cercare potenziali falle.
Infatti, nel mondo dell’informatica sono ben noti i danni che possono causare i bug. Come non ricordare la vicenda del bug di Knight Capital che è costato alla società 440 milioni di dollari, diventando uno degli errori software più dannosi della storia.
Altro beneficio è che lo smoke test consente una verifica immediata e più veloce e ciò lo rende compatibile con altri test e metodologie. Questo vale anche per le integrazioni, in quanto lo smoke test eseguito su ciascuna componente software produce un’integrazione più stabile e fluida.
Infine, lo smoke test ha l’indubbio vantaggio di far risparmiare denaro e tempo prezioso. Tale tipologia di controllo è in grado di trovare possibili problemi velocemente, impedendo di sprecare risorse inutilmente.
Smoke test vs regression test
Quando si parla di test di controllo sui software, è importante distinguere gli smoke test dai regression test. Questi ultimi sono pensati per determinare la qualità di un codice di una componente specifica del software e sono utili per accertarsi che le modifiche non comportino nuovi bug.
Al contrario degli smoke test, i regression test però si eseguono su prodotti già in vendita e distribuiti sul mercato che presentano dei difetti da correggere e solitamente sono molto più approfonditi. Non a caso, possono richiedere ore per essere eseguiti e si continuerà finché tutti i bug non sono stati eliminati.
Per esempio, i regression test si possono usare per controllare se ciascun link di una pagina web continui a funzionare dopo la modifica o se l’aggiunta di un prodotto al carrello di un e-commerce non comporti un arresto della navigazione del cliente.