I diversi tipi di test del software
Confronta diversi tipi di test del software, come unit test, test di integrazione, test funzionali, test di accettazione e molto altro.
Sten Pittet
Scrittore collaboratore
Esistono numerosi tipi di tecniche di test del software da poter utilizzare per assicurarti che le modifiche al tuo codice funzionino come previsto. Tuttavia, non tutti i test sono uguali: scopriamo le differenze tra le varie pratiche di test.
Test manuali o automatizzati
A livello generale, dobbiamo fare una distinzione tra test manuali e automatizzati. I test manuali vengono eseguiti di persona, facendo clic sull'applicazione o interagendo con il software e le API con gli strumenti appropriati. Questi test sono molto costosi, in quanto richiedono che qualcuno configuri un ambiente ed esegua i test manualmente e sono soggetti a errori umani, perché il tester potrebbe commettere errori di battitura, oppure omettere passaggi nello script del test.
I test automatizzati, d'altra parte, vengono eseguiti da una macchina che esegue uno script di test scritto in precedenza. Questi test possono variare in termini di complessità, dal controllo di un singolo metodo in una classe all'assicurarsi che l'esecuzione di una sequenza di azioni complesse nell'interfaccia utente porti agli stessi risultati. È molto più robusto e affidabile dei test manuali, ma la qualità dei tuoi test automatizzati dipende da come sono stati scritti i tuoi script di test. Se hai appena iniziato a usare i test, puoi leggere il nostro tutorial sulla continuous integration per ricevere assistenza con la tua prima suite di test. Cerchi altri strumenti di test? Dai un'occhiata a questi tutorial sui test DevOps.
I test automatizzati rappresentano un componente chiave della continuous integration e della continuous delivery e sono un ottimo modo per rendere il processo di controllo di qualità scalabile, a mano a mano che aggiungi nuove funzionalità alla tua applicazione. Tuttavia, sarà comunque utile fare alcuni test manuali con quelli che vengono chiamati test esplorativi, come vedremo in questa guida.
Scopri la soluzione
Compilare e gestire software con Open DevOps
Materiale correlato
Test automatizzati in DevOps
I diversi tipi di test
1. Unit test
Gli unit test sono di livello molto basso, vicini all'origine di un'applicazione. Consistono nel testare singoli metodi e funzioni delle classi, dei componenti o dei moduli utilizzati dal tuo software. Gli unit test sono in genere abbastanza economici da automatizzare e possono essere eseguiti molto rapidamente da un server di continuous integration.
2. Test di integrazione
I test di integrazione verificano che i diversi moduli o servizi utilizzati dall'applicazione funzionino bene insieme. Ad esempio, possono testare l'interazione con il database o assicurarsi che i microservizi funzionino insieme come previsto. Questi tipi di test sono più costosi da eseguire, in quanto richiedono che più parti dell'applicazione siano attive e funzionanti.
3. Test funzionali
I test funzionali si concentrano sui requisiti aziendali di un'applicazione. Verificano solo l'output di un'azione e non controllano gli stati intermedi del sistema quando eseguono tale azione.
A volte si fa confusione tra i test di integrazione e i test funzionali, poiché entrambi richiedono più componenti per interagire tra loro. La differenza è che un test di integrazione può semplicemente verificare che tu possa interrogare il database mentre un test funzionale si aspetterebbe di ottenere un valore specifico dal database come definito dai requisiti del prodotto.
4. Test end-to-end
I test end-to-end replicano il comportamento dell'utente con il software in un ambiente applicativo completo. Verificano che i vari flussi utente funzionino come previsto e possono essere semplici come il caricamento di una pagina web o il relativo accesso, o possono comportare scenari molto più complessi, che prevedono la verifica delle notifiche e-mail, dei pagamenti online, ecc.
I test end-to-end sono molto utili, ma sono costosi da eseguire e possono essere difficili da mantenere quando sono automatizzati. Si consiglia di eseguire alcuni test end-to-end chiave e fare maggiormente affidamento su tipi di test di livello inferiore (unit test e di integrazione) per poter identificare rapidamente le modifiche sostanziali.
5. Test di accettazione
I test di accettazione sono test formali eseguiti per verificare se un sistema soddisfa i requisiti aziendali. Richiedono che tutta l'applicazione sia attiva durante il test e si concentri sulla replica dei comportamenti degli utenti. Ma possono anche andare oltre e misurare le prestazioni del sistema e rifiutare le modifiche se determinati obiettivi non vengono raggiunti.
6. Test delle prestazioni
I test delle prestazioni valutano le prestazioni di un sistema con un particolare carico di lavoro. Questi test aiutano a misurare l'affidabilità, la velocità, la scalabilità e la reattività di un'applicazione. Ad esempio, un test delle prestazioni può osservare i tempi di risposta durante l'esecuzione di un numero elevato di richieste o determinare come si comporta un sistema con una quantità significativa di dati. Può determinare se un'applicazione soddisfa i requisiti di prestazione, individuare i colli di bottiglia, misurare la stabilità durante i picchi di traffico e molto altro.
7. Smoke test
Gli smoke test sono test di base che controllano le funzionalità di base dell'applicazione. Sono pensati per essere veloci da eseguire e il loro obiettivo è garantirti che le principali funzionalità del tuo sistema funzionino come previsto.
Gli smoke test possono essere utili subito dopo la creazione di una nuova build per decidere se è possibile eseguire test più costosi o subito dopo una distribuzione per verificare che l'applicazione funzioni correttamente nell'ambiente appena distribuito.
Come automatizzare i tuoi test
Per automatizzare i tuoi test, dovrai prima scriverli a livello di programmazione utilizzando un framework di test adatto alla tua applicazione. PHPUnit, Mocha, RSpec sono esempi di framework di test che puoi usare rispettivamente per PHP, Javascript e Ruby. Ci sono molte opzioni disponibili per ogni linguaggio, quindi potresti dover fare qualche ricerca e chiedere alle community di sviluppatori di identificare il framework migliore per te.
Quando i tuoi test possono essere eseguiti tramite script dal tuo terminale, puoi farli eseguire automaticamente da un server di continuous integration come Bamboo o utilizzare un servizio cloud come Bitbucket Pipelines. Questi strumenti monitoreranno i tuoi repository ed eseguiranno la tua suite di test ogni volta in cui vengono inviate nuove modifiche al repository principale.
Test esplorativi
Più funzionalità e miglioramenti verranno apportati al tuo codice, più dovrai testare per assicurarti che tutto il tuo sistema funzioni correttamente. E poi, per ogni bug che correggi, sarebbe saggio controllare che non si presentino versioni più recenti. L'automazione è fondamentale per questo processo e la scrittura dei test prima o poi diventerà parte del tuo flusso di lavoro di sviluppo.
Quindi la domanda è: vale ancora la pena fare test manuali? La risposta è sì e potrebbe essere meglio eseguire test esplorativi per scoprire errori non evidenti.
Una sessione di test esplorativi non deve superare le due ore e deve avere un ambito chiaro per aiutare i tester a concentrarsi su un'area specifica del software. Una volta completato il briefing dei tester, sarà necessario intraprendere varie azioni per verificare il comportamento del sistema.
Una nota sui test
Per terminare questa guida, è importante parlare dell'obiettivo dei test. Sebbene sia importante verificare che gli utenti possano utilizzare un'applicazione (possono accedere, possono salvare un oggetto), è altrettanto importante verificare che un'applicazione non si guasti in caso di dati errati o azioni impreviste. Devi anticipare cosa succederebbe in caso di errori di battitura, tentativi di salvataggio di moduli incompleti o utilizzi di API sbagliate. Devi verificare se qualcuno può facilmente compromettere i dati, oppure ottenere l'accesso a risorse a cui non dovrebbe accedere. Una buona suite di test dovrebbe analizzare ogni parte della tua app e aiutarti a comprenderne i limiti.
E infine, anche i test sono codice! Quindi non dimenticarli durante la revisione del codice perché potrebbero essere l'ultimo punto di accesso alla produzione.
Open DevOps di Atlassian fornisce una piattaforma di toolchain aperta che ti consente di creare una pipeline di sviluppo basata su CD con gli strumenti che preferisci. Dai un'occhiata ai nostri tutorial sui test DevOps per scoprire come Atlassian e gli strumenti di terze parti possono integrare i test nel tuo flusso di lavoro.
Condividi l'articolo
Argomento successivo
Letture consigliate
Aggiungi ai preferiti queste risorse per ricevere informazioni sui tipi di team DevOps e aggiornamenti continui su DevOps in Atlassian.