La garanzia della qualità sta diventando sempre più popolare. Gli esperti stimano che i lavori nel settore del testing solo negli Stati Uniti aumenteranno del 25% nel prossimo decennio. Se questo ti interessa, potresti chiederti da dove iniziare per imparare il testing del software.
In questo articolo risponderò a delle domande utili per iniziare nel mondo del software testing. Esaminerò cos’è il software testing, i concetti di testing più importanti e alcuni strumenti di testing del software da considerare.
Spiegazione del Software Testing
Il processo che comprende tutte le attività del ciclo di vita, sia statiche che dinamiche, riguardanti la pianificazione, preparazione e valutazione di un componente o sistema e dei relativi deliverable di lavoro, al fine di determinare che soddisfino i requisiti specificati, dimostrare che siano idonei allo scopo e individuare difetti.
Glossario ISTQB
Il software testing ricopre un ruolo fondamentale nel processo di sviluppo software, in quanto permette di verificare che l’applicazione funzioni come previsto e soddisfi i requisiti e le aspettative degli utenti finali.
L’obiettivo è identificare eventuali difetti, errori e incongruenze nell’applicazione software prima che venga rilasciata al pubblico. Il testing prevede l’esecuzione del software in diverse condizioni, configurazioni e scenari, per assicurarsi che funzioni correttamente ed efficientemente.
Se sei curioso su come iniziare nel campo del software testing, ecco un elenco di domande comuni dei colloqui per QA (e risposte!).
Ciclo di Vita del Software Testing
Il ciclo di vita del software testing (STLC) è il processo seguito dai tester del software per garantire che l’applicazione oggetto del testing rispetti gli standard e i requisiti di qualità specificati. Lo STLC è generalmente suddiviso in varie fasi pensate per assicurare che il software venga testato in modo approfondito e soddisfi il livello di qualità desiderato prima di essere rilasciato agli utenti finali. Le seguenti sono le fasi del ciclo di vita del software testing:

Analisi dei Requisiti
In questa fase, i tester analizzano i requisiti e le specifiche. Identificano i requisiti funzionali e non funzionali, comprendono le finalità dell’applicazione e il suo pubblico di destinazione, e sviluppano di conseguenza casi di test e scenari.
Pianificazione dei Test
In questa fase, il team di testing definisce l’ambito delle attività di test, la strategia di testing e le risorse necessarie per il test. Il piano di test identifica inoltre i rischi e le restrizioni associati al processo di test, evidenziando anche le tempistiche previste.
Progettazione dei Test
In questa fase, il team di testing progetta i casi e gli scenari di test basandosi su requisiti e specifiche. Identifica anche i dati di test necessari ed elabora gli script di test per automatizzare il processo di validazione.
Esecuzione dei Test
I tester eseguono i casi di test e gli scenari sviluppati nella fase precedente. I risultati vengono documentati e ogni difetto o errore individuato durante il testing nell’applicazione viene riportato.
Reporting dei Test
In questa fase, il team di testing prepara un report con i risultati dei test e i difetti identificati. Il report può includere raccomandazioni su come risolvere i difetti e spunti per migliorare la qualità complessiva dell’applicazione.
Chiusura dei Test
Questa è l’ultima fase, in cui il team di testing valuta il processo di test e identifica possibili aree di miglioramento. Viene inoltre preparato un report di chiusura che riassume il processo di testing e gli esiti ottenuti.
Il ciclo di vita del software testing è un processo continuo che richiede la collaborazione tra team di testing e team di sviluppo, per garantire che l’applicazione software soddisfi il livello atteso di qualità e funzionalità.
Tipi di Software Testing
Esistono diverse tipologie di software testing utilizzate dai team di QA, a seconda del contesto e dei requisiti del progetto.
Possiamo distinguere tra test manuali e test automatizzati, a seconda di come vengono eseguiti i test. In base a ciò che viene testato, possiamo differenziare tra test funzionali e non funzionali. A seconda dei metodi utilizzati, abbiamo test statici e dinamici. In base all'approccio, possiamo identificare i tipi di test white box e black box. Abbiamo anche il test esplorativo, il test smoke e sanity, e il test di regressione. Tutti questi tipi di test possono sovrapporsi tra loro, a seconda di come vengono utilizzati.
Test Manuale
Con il test manuale, il collaudo viene effettuato di persona, senza l'uso di strumenti o script automatizzati. Può essere più soggetto a errori e di solito richiede più tempo.
Test Automatizzato
Il test automatizzato viene eseguito da una macchina che esegue script scritti in precedenza. Richiede maggiori competenze tecniche, ad esempio la conoscenza di un linguaggio di programmazione e strumenti di automazione come Selenium. Può essere più costoso rispetto al test manuale e ci sono alcuni aspetti del processo di test che non possono essere automatizzati.
Test Funzionale
Il test funzionale significa verificare cosa fa l'applicazione. Il test funzionale controlla le funzionalità e le capacità dell'applicazione software e garantisce che soddisfino i requisiti e le specifiche.
Test Non Funzionale
Al contrario del test funzionale, i test non funzionali si concentrano su come si comporta l'applicazione. Esistono molteplici sottotipi di test non funzionali, a seconda di quale sia l'obiettivo principale dei test. Ne tratterò solo alcuni in questo articolo.
Test delle Prestazioni: Misura i tempi di risposta, la produttività e la scalabilità dell'applicazione software sotto varie condizioni di carico. Verifica la capacità dell'applicazione di gestire più utenti e transazioni contemporaneamente e di garantire che funzioni in modo efficiente anche durante i picchi di carico.
Test di Carico: Simula i carichi utente reali ed è eseguito per determinare il comportamento di un sistema in condizioni normali e di picco. Viene utilizzato per identificare se l'infrastruttura utilizzata per ospitare l'applicazione è sufficiente e ci dice quanti utenti simultanei l'applicazione può gestire e quale scala hardware, capacità di rete ecc. è necessaria affinché più utenti possano accedere all'applicazione.
Test di Stress: Consiste nel testare oltre la capacità normale, spesso fino al punto di rottura, per osservarne i risultati. L'obiettivo è assicurarsi che il software non si blocchi in condizioni di risorse computazionali insufficienti (come memoria, spazio su disco, richieste di rete, ecc.).
Test di Sicurezza: Garantisce che l'applicazione software sia sicura e protetta da accessi non autorizzati. Il test di sicurezza verifica la presenza di vulnerabilità e debolezze nei protocolli di sicurezza dell'applicazione e identifica eventuali potenziali minacce.
Test di Usabilità: Viene utilizzato per valutare se l'applicazione è facile da usare. Verifica quanto sia semplice per gli utenti navigare nell'applicazione e svolgere le funzioni previste in modo efficiente.
Test di Accessibilità: Considerato una sottocategoria dei test di usabilità, il test di accessibilità viene effettuato per assicurarsi che l'applicazione sia utilizzabile anche da persone con disabilità.
Test di Localizzazione: Un tipo di test software in cui il comportamento del software viene verificato rispetto a una regione, a un'area geografica o a una cultura specifica. Alcuni attributi da considerare durante il test di localizzazione: testo correttamente tradotto, valuta, unità di misura, caratteri speciali consentiti e formati dei numeri di telefono.
Test di Compatibilità: Verifica se l'applicazione è in grado di funzionare correttamente su diversi browser, database, hardware, sistemi operativi, dispositivi mobili e reti.
Test Statici e Dinamici
Il test statico si basa sull'esaminazione manuale dei prodotti di lavoro (ad esempio, revisioni) o sull'analisi tramite strumenti del codice (come le revisioni del codice) o altri prodotti di lavoro (ad esempio, analisi statica). Può essere eseguito su (ma non è limitato a) specifiche, requisiti aziendali, criteri di accettazione, codice sorgente, piani di test, casi di test, script di test e guide utente.
Il test dinamico consiste nell'effettiva esecuzione del software sotto test. Può essere manuale o automatizzato.
Test White Box e Black Box
Il test white box è un tipo di test in cui il collaudatore conosce la struttura interna del codice dell’applicazione, mentre il test black box viene effettuato senza conoscere il codice sorgente. Ognuno di questi tipi di test applica tecniche di test diverse, come il partizionamento di equivalenza, l’analisi dei valori limite e la tabella delle decisioni per il test black box, e la copertura delle istruzioni più la copertura delle decisioni per il test white box.
Test Esplorativo
Il test esplorativo è un tipo di test basato sull'esperienza. Prevede una pianificazione minima e la massima esecuzione dei test.
Le attività di progettazione ed esecuzione dei test vengono svolte in parallelo, solitamente senza documentare formalmente le condizioni di test, i casi di test o gli script di test.
È un approccio utile quando le specifiche sono assenti o carenti e il tempo è molto limitato, oppure funziona bene come complemento ai test automatizzati.
Smoke Testing
Lo Smoke Testing, talvolta chiamato “Build Verification Testing” o “Confidence Testing”, è un processo di collaudo del software in cui i tester verificano se la build distribuita è stabile. Lo smoke testing è una validazione che consente di proseguire con ulteriori test sul software. Consiste in un numero minimo di test che vengono eseguiti su ogni build per testare le funzionalità critiche del software.
Sanity Testing
Il sanity testing è un tipo di collaudo che viene effettuato dopo la consegna di una build software contenente modifiche minori al codice o alle funzionalità, per confermare che i bug siano stati risolti e che non siano stati introdotti nuovi problemi a seguito di tali modifiche. L'obiettivo è confermare che la funzionalità proposta funzioni più o meno come previsto.
Regression Testing
Il regression testing è un tipo di collaudo del software in cui vengono ritestate le funzionalità esistenti per verificare che continuino a funzionare correttamente dopo ogni modifica o aggiornamento dell'applicazione. Il regression testing garantisce che le nuove modifiche o aggiornamenti non abbiano impattato sulle funzionalità già esistenti dell'applicazione.
Compatibility Testing
Il compatibility testing viene utilizzato per garantire che l'applicazione software funzioni correttamente su diverse piattaforme, dispositivi e browser. Verifica che l'applicazione sia compatibile con varie configurazioni hardware e software.

Livelli di testing
Il collaudo del software può essere suddiviso in diversi livelli in base all’ambito e agli obiettivi delle verifiche. Ecco i livelli più comuni di testing del software:
Unit Testing
L’unit testing è il primo livello di test e si concentra sulla verifica delle singole componenti o unità di codice in isolamento. Il test di unità verifica che ogni blocco di codice funzioni come previsto e soddisfi i requisiti specificati.
Integration Testing
L’integration testing si concentra sulla verifica delle interazioni tra i diversi moduli o componenti dell’applicazione software. Il test d’integrazione verifica che i moduli o componenti lavorino insieme come previsto e rispettino i requisiti specificati.
System Testing
Il system testing è il livello in cui l’intera applicazione software viene testata come un sistema completo. Il test di sistema verifica che l’applicazione rispetti i requisiti stabiliti e funzioni come previsto in vari scenari.
User Acceptance Testing
L’acceptance testing è il livello in cui l’applicazione viene testata dal punto di vista dell’utente finale. L’utente verifica che l’applicazione soddisfi le sue esigenze e aspettative e che funzioni regolarmente nel proprio ambiente. Tra i principali tipi di accettazione vi sono l’alpha testing e il beta testing.
Ogni livello di collaudo è importante e svolge una funzione specifica nel processo di testing del software. I test dovrebbero essere effettuati su ciascun livello per garantire che il software abbia il livello di qualità e funzionalità desiderato e si comporti correttamente in diversi scenari.
Principi del testing software
Esistono sette principi fondamentali del testing, come definiti dall’ISTQB:
- I test mostrano la presenza di difetti, non la loro assenza: Non puoi garantire che l'applicazione sia priva di difetti solo perché è stata testata. Tuttavia, dopo i test, la fiducia nel prodotto può aumentare.
- Test esaustivi sono impossibili: La maggior parte delle applicazioni è incredibilmente complessa, quindi testare ogni possibile combinazione e variante è impossibile, soprattutto perché anche il tempo e le risorse a disposizione sono limitati.
- Test anticipato: Prima vengono scoperti bug e difetti durante il ciclo di vita dello sviluppo del software, più facile sarà correggerli. È qui che Agile ha successo, poiché le attività di test iniziano molto presto.
- I difetti tendono a concentrarsi: Questo significa che le aree in cui sono stati trovati difetti avranno molto probabilmente altri difetti. Secondo il principio di Pareto, l'80% dei difetti si trova nel 20% delle funzionalità.
- Il paradosso dei pesticidi: Eseguire ripetutamente gli stessi test senza aggiornarli difficilmente porterà a trovare nuovi problemi.
- I test sono dipendenti dal contesto: Le applicazioni verranno testate in modo diverso a seconda del contesto: ad esempio, un'API viene testata in modo diverso rispetto a un'interfaccia utente, e le applicazioni web vengono testate in modo diverso rispetto a quelle mobile o desktop.
- La fallacia dell'assenza di errori: In breve, il fatto che i difetti siano stati trovati e corretti non significa che il software sia utile agli utenti.
Conclusione
Il testing del software è un dominio molto complesso e possono essere eseguiti molti tipi diversi di test. È importante adattare la strategia di test in base al contesto del prodotto software che viene testato. Esistono infinite risorse sul testing del software, inclusi podcast, libri e altro ancora.
Se ti è piaciuto questo articolo, iscriviti alla newsletter del QA Lead per essere il primo a conoscere i nuovi articoli su testing e qualità.
