Cos’è il software testing? - MATLAB & Simulink

Software testing

Cos’è il software testing?

Il software testing, ovvero il processo di valutazione di un programma per garantire che soddisfi i requisiti, è spesso frainteso. È solo un’operazione che ci distrae dalla creazione di nuove funzionalità? Un ostacolo alla produttività? O forse un passaggio inutile, poiché tutto sembra funzionare correttamente sulla propria macchina locale? Immaginiamo questo scenario: sei un ingegnere che ha dedicato anni alla progettazione e alla compilazione del software di controllo di un razzo di prossima generazione. Il giorno del lancio, tutto va secondo i piani fino a quando, dopo pochi secondi di volo, il razzo devia dalla sua traiettoria ed esplode per via di un semplice caso di integer overflow. È proprio quello che è accaduto in occasione del primo volo del razzo Ariane 5, ovvero un esempio di quanto possano essere catastrofiche le conseguenze dei bug nei software.

Illustrazione di un razzo nel cielo, con una linea retta tratteggiata blu e una linea curva tratteggiata rossa. Il razzo segue la linea curva rossa ed esplode.

Anche i più piccoli errori nei software possono avere conseguenze impreviste, come la deviazione dei razzi dalla propria traiettoria.

L’importanza del software testing

Gli errori a livello di software hanno delle conseguenze. Infatti, a causa dei bug, dei macchinari per la radioterapia hanno prodotto dosi sbagliate, algoritmi di trading hanno determinato la perdita di milioni di dollari e addirittura un satellite di Marte è andato perduto a causa di conversioni errate delle unità di misura. Questi eventi realmente accaduti mettono in luce il ruolo fondamentale giocato dal software testing nell’individuare i potenziali bug prima che possano causare danni. L’obiettivo degli ingegneri è quello di scrivere ogni giorno codice che funzioni e continui a funzionare in modo affidabile nel tempo. Tramite il software testing ci si assicura che le decisioni importanti basate sul software siano solide.

Illustrazione di una persona seduta alla scrivania con un computer sul cui schermo si vedono delle righe di codice e colori diversi.

Il software testing garantisce l’affidabilità del codice nel tempo.

Eseguire i test nelle prime fasi del processo di sviluppo può contribuire a una notevole riduzione dei costi: il costo per correggere un bug aumenta man mano che il ciclo di sviluppo avanza. Individuare i problemi precocemente non solo permette di risparmiare tempo e denaro ma minimizza anche il rischio che il progetto subisca ritardi e garantisce un processo di sviluppo più uniforme. Integrando il software testing nelle prime fasi dello sviluppo, i team hanno la possibilità di individuare e affrontare i potenziali problemi prima che si intensifichino, ottenendo di conseguenza un software più robusto e affidabile.

Software testing manuale e automatizzato

Se ti è mai capitato di scrivere del codice, di sicuro lo hai testato anche se non ci hai fatto caso. Il software testing serve a valutare un’applicazione software per identificare bug, errori e requisiti mancanti. Eseguire uno script per vedere se produce il risultato corretto è una forma di test manuale. Tuttavia, i test manuali si basano sul fatto che gli addetti ai test devono ricordare le procedure e valutare la correttezza del risultato, per cui il loro esito dipende dalla conoscenza che ogni singola persona ha dell’applicazione. Se una determinata persona lascia l’azienda, con questa se ne andranno anche le sue conoscenze e, di conseguenza, la sua capacità di testare il codice.

Illustrazione di vari tipi di test del software: cassetta degli attrezzi con la scritta “test manuali” e ingranaggi con la scritta “test automatizzati”.

I test manuali diventano presto difficili da eseguire per i processi ripetibili. Il software testing automatizzato è più vantaggioso man mano che la complessità del codice aumenta.

Le tecniche moderne di software testing si sono evolute da quelle manuali a quelle automatizzate fino a ottenere un metodo sistematico per valutare i software. Tramite la documentazione del comportamento previsto e delle fasi di test, le conoscenze critiche vengono trasferite dalle singole persone al codice di test, in modo tale da ampliare la base di tester e ottenere di conseguenza codice più coerente e affidabile. Il software testing automatizzato permette di confrontare il comportamento effettivo del sistema con gli esiti previsti, evidenziando le discrepanze che meritano attenzione (o i test che devono essere aggiornati).

Obiettivi del software testing

  • Rilevare i bug il prima possibile: identificare i bug nelle prime fasi del processo di sviluppo è essenziale, in quanto il costo associato alla loro correzione aumenta esponenzialmente man mano che il progetto avanza. I bug che arrivano fino alla fase di distribuzione possono essere causa di perdite finanziarie e danni alla reputazione.
  • Mettere in luce problemi legati alle prestazioni e all’affidabilità: è fondamentale testare il codice in tutte le condizioni, anche nei casi limite. I problemi prestazionali, come i tempi di risposta lenti, possono essere tanto problematici quando un risultato non corretto.

Tipi di test per software

Esistono tante tipologie di test per i software e talvolta è difficile capire da dove iniziare. Ecco alcuni tipi di test per software essenziali che ogni ingegnere deve conoscere:

  • Test unitari: servono a verificare la funzionalità dei singoli componenti o delle singole unità di codice in isolamento. I test unitari aiutano a isolare e identificare i bug fin da subito e possono essere relativamente facili e veloci da scrivere ed eseguire.
  • Test di integrazione: verificano le interfacce tra unità di codice per garantire un’interazione corretta. Rilevano problemi quali incongruenze nel formato dei dati e incompatibilità a livello di interfaccia del codice.
  • Test di sistema: consistono nel testare l’intero sistema integrato per assicurarsi che soddisfi i requisiti specificati. Vengono simulati degli scenari del mondo reale per verificare se il software si comporta correttamente nelle condizioni previste.
  • Smoke testing: verifica il funzionamento delle funzionalità essenziali e si accerta che il software sia pronto all’esecuzione di test aggiuntivi. È un modo rapido per verificare la funzionalità di base del software. 
  • Test di regressione: verificano se le modifiche apportate al codice causano delle variazioni impreviste nel comportamento. Garantiscono che il software continuerà a funzionare come previsto dopo le modifiche.
  • Test delle prestazioni: valutano le prestazioni del software in condizioni diverse. Misurano criteri quali i tempi di risposta e l’utilizzo delle risorse per individuare eventuali colli di bottiglia e ottimizzare le prestazioni.

Il mocking, sebbene non sia un vero e proprio tipo di test, è un meccanismo che testa i componenti in isolamento simulando le dipendenze. Aiuta a isolare e testare delle parti specifiche del sistema senza basarsi su componenti effettivi.

Questi tipi di test possono essere combinati in base alle esigenze specifiche di un determinato progetto. Ad esempio, è possibile implementare un test unitario che usa il mocking, oppure un test di integrazione che è un test di regressione.

Tipi di software testing

Scopri sette tipologie essenziali di sotware testing che ogni ingegnere deve conoscere, tra cui test unitari, smoke test e test di regressione e molto altro ancora.

Esempio: Test unitari con MATLAB

Il test più basilare che possiamo fare è un test manuale, eseguibile in corrispondenza della riga di comando per testare se l’output funziona come previsto. Questo tipo di software testing manuale, però, ha delle limitazioni ed è soggetto a errori.

In alternativa a queste tecniche, è possibile utilizzare il framework per test unitari di MATLAB per scrivere dei test ripetibili.

Analizziamo un semplice esempio di test unitario che usa la funzione fibonacci.

Screenshot del software testing in MATLAB con menu a comparsa per creare un test unitario.

Fare clic con il tasto destro su una funzione in MATLAB per creare un test.

Screenshot del codice MATLAB per il software testing con riquadri arancioni che indicano i valori da fornire per la classe di test unitario.

Uso di MATLAB per il software testing: man mano che si inseriscono i valori corretti, viene creata una classe di test. Il test può quindi essere eseguito per verificare la funzione.

Creare un test unitario con Test Browser in MATLAB è molto semplice. Tale test valuta la funzione creata e confronta il risultato effettivo con quello previsto per controllare se sono presenti errori.

Che cos’è Test Browser in MATLAB?

Scopri come usare Test Browser per il test iterativo del codice. Questa interfaccia semplifica il processo di test e debug per passare in modo più efficiente dallo scripting alla pubblicazione.

Questo semplice esempio di software testing garantisce che la tua funzione restituisca i risultati previsti e verifica in automatico l’output. 

Best practice per eseguire il software testing

Automazione dove e quando possibile

L’automazione può velocizzare i test e coprire più aree grazie all’esecuzione automatica. Automatizzando i test lunghi e ripetitivi, è possibile liberare risorse da dedicare a scenari più complessi. I test automatizzati possono essere eseguiti con maggiore frequenza e uniformità, a garanzia che le modifiche al codice non introducano nuovi bug. Prendi in considerazione l’idea di usare framework e strumenti che si integrano alla perfezione nel tuo ambiente di sviluppo per ottimizzare la procedura di software testing.

Scrittura di test in concomitanza con lo sviluppo del codice

Scrivere i test man mano che viene sviluppato il codice, invece di aspettare la fine del progetto, aiuta a identificare i problemi fin dalle prime fasi e garantisce che ogni parte del codice sia coperto dai test durante l’intera fase di sviluppo. Tale pratica spinge gli sviluppatori a riflettere sui requisiti e sulla progettazione prima di implementare le funzionalità, in modo tale da ottenere codice più robusto e manutenibile.

Tre file di icone che raffigurano il codice nella colonna di sinistra e i test corrispondenti nella colonna di destra.

Una delle best practice per il software testing consiste nello scrivere i test e il codice contemporaneamente.

Priorità alla copertura del test

Non tutto il codice creato è uguale. Lo stesso vale per i test. Dai priorità al test delle aree da cui dipendono altri componenti, che hanno una logica complessa o che storicamente sono più inclini a presentare bug. Cerca di adottare un approccio equilibrato, ottenendo un livello di copertura sufficiente senza sovraccaricare la procedura di test. Usa gli strumenti di coverage del codice per individuare le parti di codebase non testate e concentrati su quelle aree.

Integrando queste best practice di software testing, i team hanno la possibilità di aumentare la qualità e l’affidabilità del loro software, ottenendo di conseguenza risultati migliori e utenti più soddisfatti.


Esempi e consigli pratici


Riferimenti software


Vedere anche: integrazione continua