Un passaggio imprescindibile per garantire che il software risponda alle specifiche richieste è condurre correttamente la fase di testing.
Fare testing è una delle fasi più delicate nella gestione di una commessa, perché le strategie messe in atto a questo punto del development variano molto in tempi e modi, cosa resa ancor più complessa dal continuo sviluppo delle tecnologie che utilizziamo.
Ogni software house lo sa: una scorretta o inadeguata procedura di testing porta inevitabilmente a un cliente insoddisfatto, ma anche a costi elevati per correggere gli errori.
Tipi di testing
Esistono diversi tipi di test nel ciclo di sviluppo del software, ognuno con un obiettivo specifico. I più basilari sono i testi unitari, che verificano il corretto funzionamento delle singole unità di codice, ad esempio delle funzioni o dei metodi.
Generalmente i test unitari sono automatizzati e rappresentano il primo livello di difesa contro i bug.
Oppure, è possibile condurre dei test di integrazione, che verificano le diverse componenti del sistema e il loro funzionamento complessivo.
Altra possibilità sono i test sulla singola funzione del software, oppure i test di regresso, utili per quando si modifica il codice e si teme il possibile insorgere di nuovi bug.
Infine, abbiamo gli importantissimi test di carico e stress, che valutano le prestazioni del software sotto carico elevato, simulando condizioni di utilizzo estreme per garantire la stabilità del sistema.
L’automazione: una possibilità concreta nel testing per lo sviluppo software
A questo punto è opportuno introdurre un altro argomento: l’automazione del testing del software.
Perché continuare a svolgere complessi passaggi manuali, passibili di errore e costosi in termini di tempo, quando esistono dei validi strumenti di automazione?
Ormai l’affidabilità di questi strumenti è certa, e i risultati che ottengono sono affidabili.
Altro grande vantaggio dei testi automatizzati è la possibilità di coprire più scenari e variabili rispetto ai test manuali, con anche un feedback più rapido sul risultato.
Strumenti di automazione dei test
Passiamo a qualche istruzione operativa. Il mercato offre vari strumenti, ma i principali sono:
1. Selenium
Selenium è uno degli strumenti più utilizzati per l'automazione dei test di interfaccia utente (UI) per applicazioni web, e crea dei test complessi che simulano le interazioni degli utenti, come il click, l’inserimento di testo e la navigazione tra le pagine.
È open source e supporta diversi linguaggi di programmazione come Java, C#, Python e Ruby, il che lo rende altamente versatile.
Grazie alla sua capacità di integrarsi con altre soluzioni, come Jenkins per l'integrazione continua, Selenium è ottimo in termini di flessibilità e potenza.
2. Jenkins
Jenkins non è uno strumento di test vero e proprio, ma più una piattaforma di integrazione continua (CI).
Jenkins consente di eseguire automaticamente i test ogni volta che il codice viene aggiornato, integrandosi con strumenti come Selenium, JUnit e altri.
Questo flusso di lavoro automatizzato garantisce che il codice venga costantemente monitorato e testato.
3. TestNG
TestNG è un framework per test basato su Java che supporta cui test unitari, test funzionali e test di integrazione.
È stato progettato per coprire un'area più ampia rispetto a JUnit, e offre funzionalità come test paralleli, gestione avanzata delle dipendenze tra test e possibilità di generare report dettagliati.
L'integrazione con strumenti come Selenium lo rende molto popolare per i progetti Java.
Come condurre un test manuale del software (e quando serve)
I test manuali, pur essendo più dispendiosi in termini di tempo rispetto ai test automatizzati, sono fondamentali per garantire che un'applicazione funzioni correttamente.
Alcuni bug infatti potrebbero sfuggire ai test automatizzati e soprattutto i testi automatizzati non sono così intuitivi quanto a user experience (UX).
In più, il testing nello sviluppo software beneficia sempre di una maggiore flessibilità, per testare delle situazioni e aree non previste in fase di pianificazione, e i test manuali in questo rispondono molto bene.
Inoltre, nei primi stadi di sviluppo, quando l'automazione non è ancora implementabile o il software è in rapido cambiamento, i test manuali permettono di mantenere comunque un livello di controllo sulla qualità.
Esempio di strategia per il software testing manuale: una checklist
1. Definizione degli obiettivi di test
Prima di iniziare i test, è essenziale avere una chiara comprensione degli obiettivi. Questo aiuta a garantire che i test si concentrino sulle aree critiche del software.
In questa fase bisogna determinare quali parti dell'applicazione devono essere testate manualmente, come funzionalità nuove o modificate, aree ad alto rischio, o componenti critici per il business.
Poi, è il momento di definire degli obiettivi legati alla facilità d'uso, alla navigazione e all'intuitività dell'interfaccia.
2. Pianificazione del test
Una pianificazione accurata è fondamentale per garantire che tutti gli aspetti del software siano coperti e che i test vengano eseguiti in modo sistematico.
Delinea la strategia di test!
Dovrai elencare le funzionalità da testare, i tipi di test da eseguire (come test funzionali, test di regressione, test di usabilità), e l'ordine in cui verranno eseguiti.
Poi, sviluppa casi di test dettagliati per ogni funzionalità o modulo. Ogni caso di test dovrebbe includere i seguenti elementi:
- Titolo del caso di test: Un nome chiaro e descrittivo.
- Pre-condizioni: Tutti i requisiti che devono essere soddisfatti prima di eseguire il test.
- Passi del test: Una sequenza dettagliata di azioni che l'utente deve eseguire.
- Risultato atteso: La condizione che deve essere verificata se il software funziona correttamente.
Ultimo consiglio: assegna i test a specifici membri del team, tenendo conto delle loro competenze e delle esigenze del progetto.
3. Esecuzione dei test
Questa fase consiste nell'esecuzione pratica dei test, seguendo i casi di test preparati.
La best practice è sempre eseguire i casi di test uno alla volta, seguendo rigorosamente i passi descritti, annotando tutto.
Oltre ai casi di test predefiniti, è utile eseguire test esplorativi, dove il tester interagisce con il software in modo non strutturato.
Crea delle procedure per riprodurre i risultati che hai visto nei test, con passaggi scritti e/o screenshot o video, se serve.
4. Segnalazione e gestione dei bug
Una volta individuati i bug, è essenziale gestirli in modo efficiente.
Puoi usare uno strumento di tracciamento dei bug (come Jira, Trello, o Clickup).
Ogni segnalazione dovrebbe includere:
- Descrizione dettagliata: Un resoconto chiaro e conciso del problema.
- Passi per la riproduzione: Una lista di azioni che portano al bug, per permettere agli sviluppatori di riprodurre e risolvere il problema.
- Gravità e priorità: Classifica il bug in base alla sua gravità (quanto impatta il sistema) e alla priorità (quanto è urgente risolverlo).
Dopo che un bug è stato risolto dagli sviluppatori, esegui nuovamente i test per verificare che la correzione funzioni correttamente e che non abbia introdotto nuovi problemi.
5. Report finale e documentazione
Alla fine della fase di test, conviene creare un report che riassuma i risultati, incluse le funzionalità testate, i bug trovati e risolti, e l'esito finale di ogni caso di test.
Distribuisci il report ai membri del team e agli stakeholder per mantenere tutti informati sullo stato del progetto e per pianificare eventuali fasi successive.
È tutto chiaro?
Se vuoi approfondire il dietro le quinte dello sviluppo software, forse potrebbe interessarti leggere:
- 5 miti da sfatare nel mondo dello sviluppo software
- Mantenere il software: guida alla gestione dell’assistenza e della manutenzione post-lancio
E se vuoi lavorare con noi a progetti freschi e innovativi… Contattaci!