key successful unit testing how developers test their own code
Tester Black Box non ti importa degli unit test. Il loro obiettivo principale è convalidare l'applicazione rispetto ai requisiti senza entrare nei dettagli di implementazione.
Ma come curiosità o Pensiero fuori dagli schemi , ti sei mai chiesto come gli sviluppatori testano il loro codice? Quale metodo usano per testare prima di rilasciare il codice per il test? In che modo è importante il test di sviluppo in un processo agile? La risposta a tutto questo è lo Unit Testing. Voglio istruirti sull'importanza dello Unit Testing in modo che i team di sviluppo e test possano lavorare in modo più collaborativo per progettare, testare e rilasciare un'applicazione eccellente.
Chissà che in futuro alcuni di voi potrebbero persino passare al test white box e utilizzare queste tecniche di convalida e miglioramento del codice!
Cosa imparerai:
Che cos'è lo unit test?
Lo unit test non è un concetto nuovo. È presente fin dai primi giorni di programmazione. Di solito, sviluppatori e talvolta Tester della scatola bianca scrivere test unitari per migliorare la qualità del codice verificando ogni unità del codice utilizzato per implementare i requisiti funzionali (aka test driven development TDD o test-first development).
La maggior parte di noi potrebbe conoscere la definizione classica:
'Unit Testing è il metodo per verificare la più piccola parte di codice testabile rispetto al suo scopo.' Se lo scopo o il requisito non è riuscito, lo unit test non è riuscito.
In parole semplici, significa: scrivere un pezzo di codice (test unitario) per verificare il codice (unità) scritto per i requisiti di implementazione.
Unit test in SDLC
In Unit testing, gli sviluppatori utilizzano test manuali o automatizzati per garantire che ogni unità nel software soddisfi i requisiti del cliente. Questa unità può essere una singola funzione, oggetto, metodo, procedura o modulo nel software in prova.
Scrivere unit test per testare le singole unità semplifica la scrittura di test completi poiché tutte le unità vengono messe insieme. Durante lo sviluppo del software, viene eseguito come primo livello di test.
Importanza della scrittura di unit test
Unit Testing viene utilizzato per progettare componenti software robusti che aiutano a mantenere il codice ed eliminare i problemi nelle unità di codice. Conosciamo tutti l'importanza di trovare e correggere i difetti nella fase iniziale del ciclo di sviluppo del software. Questo test ha lo stesso scopo.
È parte integrante del processo di sviluppo del software agile. Quando deve essere eseguita una suite di test di unità di esecuzione notturna della build e il report deve essere generato. Se uno degli unit test ha avuto esito negativo, il team QA non dovrebbe accettare quella build per la verifica.
Se impostiamo questo come processo standard, molti difetti verrebbero rilevati nel ciclo di sviluppo iniziale, risparmiando molto tempo per i test.
So che molti sviluppatori odiano scrivere unit test. Ignorano o scrivono casi di unit test errati a causa di una pianificazione serrata o mancanza di serietà (sì, scrivono unit test vuoti, quindi il 100% di loro passa con successo ;-)). È importante scrivere buoni unit test o non scriverli affatto. È ancora più importante fornire tempo sufficiente e un ambiente favorevole per vantaggi reali.
Metodi di unit test
Può essere eseguito in 2 modi:
- Test manuale
- Test automatizzati
Nel Test manuale , il tester esegue manualmente i casi di test senza utilizzare alcuno strumento di automazione. Qui, ogni fase del test viene eseguita manualmente. Il test manuale è noioso soprattutto per i test ripetitivi e richiede uno sforzo maggiore per creare ed eseguire casi di test. Il test manuale non richiede la conoscenza di alcuno strumento di test.
È un dato di fatto che il 100% dell'automazione non è possibile e quindi ci sarà sempre un certo livello di test manuale eseguito.
Nel Test automatizzati, Gli strumenti di automazione del testing del software vengono utilizzati per automatizzare i test / casi di test. Lo strumento di automazione può registrare e salvare il test e può essere riprodotto tutte le volte necessarie senza alcun ulteriore intervento umano.
Questi strumenti possono persino inserire dati di test nel sistema in fase di test, nonché confrontare i risultati attesi con i risultati effettivi e generare automaticamente i report. Tuttavia, il costo iniziale della configurazione degli strumenti di automazione dei test è elevato.
Tecniche nell'ambito degli unit test
# 1) Test della scatola bianca:
quale programma per aprire il file eps
Nel test white box, il tester conosce la struttura interna del software incluso il codice e può testarlo rispetto al design e ai requisiti. Quindi il test della scatola bianca è anche noto come test trasparenti .
# 2) Test della scatola nera:
Nei test black-box, il tester non conosce le strutture interne né il codice del software.
# 3) Test della scatola grigia:
Questo è anche indicato come prova tecnica semitrasparente che significa, i tester ne sono solo parzialmente consapevoli della struttura interna, delle funzioni e dei progetti insieme ai requisiti. Il debug viene eseguito tramite input effettivo dal front-end per ottenere dati esatti nel back-end. La scatola grigia è quindi considerata come una combinazione di tecniche di prova scatola nera e scatola bianca.
Il test della scatola grigia copre i seguenti tipi di test:
- Matrix Testing.
- Test di pattern.
- Test di pattern ortogonali.
- Test di regressione.
Vantaggi degli unit test
- Il processo diventa agile: Per aggiungere nuove funzioni o caratteristiche al software esistente, è necessario apportare modifiche al vecchio codice. Ma cambiare le cose al codice già testato può essere rischioso oltre che costoso.
- La qualità del codice migliora: La qualità del codice viene automaticamente migliorata quando viene eseguito il test dell'unità. I bug identificati durante questo test vengono corretti prima che venga inviato per la fase di test di integrazione. Ottieni una progettazione e uno sviluppo affidabili mentre gli sviluppatori scrivono i casi di test comprendendo prima le specifiche.
- Rileva i bug in anticipo: Quando gli sviluppatori eseguono test unitari, rilevano i bug nelle prime fasi del ciclo di vita dello sviluppo del software e li risolvono. Ciò include difetti o parti mancanti nella specifica nonché bug nell'implementazione del programmatore.
- Modifiche più facili e integrazioni semplificate: L'esecuzione di unit test rende facile per lo sviluppatore ristrutturare il codice, apportare modifiche e mantenere il codice. Inoltre, rende molto più semplice il test del codice dopo l'integrazione. La risoluzione di un problema in Unit Testing può risolvere molti altri problemi che si verificano nelle fasi successive di sviluppo e test
- Disponibilità della documentazione: Gli sviluppatori che stanno esaminando la funzionalità in una fase successiva possono fare riferimento alla documentazione di unit test e possono trovare facilmente l'interfaccia di unit test e correggere o lavorare velocemente e facilmente.
- Facile processo di debug: Aiuta a semplificare il processo di debug. Se il test fallisce in qualsiasi fase, è necessario eseguire il debug del codice, altrimenti il processo può essere continuato senza ostacoli.
- Costo più basso: Quando i bug vengono rilevati e risolti durante i test unitari, i costi e il tempo di sviluppo si riducono. Senza questo test, se gli stessi bug vengono rilevati in una fase successiva dopo l'integrazione del codice, diventa più difficile rintracciarlo e risolverlo, rendendolo più costoso e aumentando i tempi di sviluppo.
- La completezza del codice può essere dimostrata utilizzando i test unitari: Questo è più utile nel processo agile. I tester non ottengono le build funzionali da testare fino al completamento dell'integrazione. Il completamento del codice non può essere giustificato dimostrando di aver scritto e controllato il codice. Ma l'esecuzione di unit test può dimostrare la completezza del codice.
- Risparmia tempo di sviluppo: Il completamento del codice potrebbe richiedere più tempo, ma a causa di un minor numero di bug nei test di sistema e di accettazione, è possibile risparmiare tempo di sviluppo complessivo.
- Copertura del codice può essere misurato
Ciclo di unit test
[Immagine fonte ]
Cosa rende un buon test unitario?
Beh, non sono la persona giusta per dire cosa rende un buon Unit Test, ma sulla base delle mie osservazioni su vari progetti posso raccontare le caratteristiche di un buon Unit Test. Il cattivo Unit Test non aggiunge valore al progetto. Invece, il costo del progetto aumenta in modo significativo la scrittura e la gestione di test unitari non validi.
Come scrivere buoni test unitari?
- È necessario scrivere un test unitario per verificare una singola unità di codice e non l'integrazione.
- Unit test piccoli e isolati con nomi chiari renderebbero molto facile la scrittura e la manutenzione.
- La modifica di un'altra parte del software non dovrebbe influire sullo Unit test se questi sono isolati e scritti per una specifica unità di codice.
- Dovrebbe funzionare velocemente
- Un test unitario dovrebbe essere riutilizzabile
Framework di test unitari
I framework di unit test vengono utilizzati principalmente per aiutare a scrivere test unitari in modo rapido e semplice. La maggior parte dei linguaggi di programmazione non supporta i test di unità con il compilatore integrato. Open source di terze parti e strumenti commerciali possono essere utilizzati per rendere i test unitari ancora più divertenti.
Elenco dei popolari Strumenti di unit test per diversi linguaggi di programmazione:
- Framework Java - JUnit
- Framework PHP - PHPUnit
- Framework C ++ - UnitTest ++ e Google C ++
- .NET framework - NUnit
- Framework Python - py.test
Idee sbagliate e verità
- Ci vuole più tempo per scrivere codice con i casi di test unitari e non abbiamo tempo per questo: in realtà, risparmierebbe il tuo tempo di sviluppo a lungo termine.
- I test unitari rileveranno tutti i bug: non lo faranno, poiché lo scopo dello unit test non è trovare bug ma sviluppare componenti software robusti che avranno meno difetti nelle fasi successive dell'SDLC.
- Copertura del codice al 100% significa copertura del test del 100% - Ciò non garantisce che il codice sia privo di errori.
Come accettare gli unit test?
Un buon test unitario può essere eseguito in 3 parti fondamentali.
- Scrivi il codice di unit test
- Eseguire il codice di unit test per verificare se soddisfa i requisiti di sistema
- Eseguire il codice software per verificare la presenza di eventuali difetti e se il codice soddisfa i requisiti di sistema.
Dopo aver eseguito i 3 passaggi precedenti, se il codice sembra essere corretto, si dice che lo unit test è stato superato. E se non soddisfa i requisiti di sistema, il test fallisce. In questo caso, lo sviluppatore deve ricontrollare e correggere il codice.
In alcuni casi, è necessario separare il codice per eseguire questo test in modo più accurato.
La migliore pratica
Per creare il codice migliore durante questo test, considera i punti seguenti:
- Il codice dovrebbe essere forte: Ci sono casi in cui il test fallisce o, nel peggiore dei casi, non viene eseguito affatto se il codice è rotto.
- Comprensibile e ragionevole: Il codice dovrebbe essere facile da capire. Ciò rende facile per lo sviluppatore scrivere il codice e anche altri sviluppatori che lavoreranno sul codice successivamente troveranno facile eseguire il debug.
- Dovrebbe essere il caso singolo: I test che definiscono più casi in uno sono complessi con cui lavorare. Pertanto, scrivere un singolo codice caso è la migliore pratica, il che rende il codice più facile da capire e da eseguire il debug.
- Consenti test automatici: Gli sviluppatori dovrebbero assicurarsi che il test venga eseguito in una forma automatizzata. Dovrebbe essere in un processo di fornitura continua o processo di integrazione.
Altri punti da tenere a mente sono i seguenti:
- Invece di creare casi di test per tutte le condizioni, concentrati sul test che influenza il comportamento del sistema.
- Ci sono possibilità che il bug si ripresenti a causa della cache del browser.
- I casi di test non dovrebbero essere interdipendenti.
- Prestare attenzione anche alla condizione del loop.
- Pianifica i casi di test più frequentemente.
Conclusione
Il test unitario entra in scena quando è necessario testare ogni funzione separatamente. È molto ragionevole rilevare e correggere i bug durante questo test e risparmiare tempo e costi, piuttosto che trovarli nella fase successiva dello sviluppo del software.
Sebbene offra molti vantaggi, ci sono anche limitazioni legate al suo utilizzo. Disciplina rigorosa e coerenza sono richieste durante il processo di sviluppo del software per superare i limiti e ottenere i benefici previsti.
I tuoi commenti sono i benvenuti!
In qualità di tester della scatola nera, quali sono le tue osservazioni sugli Unit Testing nel tuo team? Qualcuno ha un'idea migliore per un test unitario di successo?
Lettura consigliata
- Le differenze tra test unitari, test di integrazione e test funzionali
- 20 strumenti di unit test più popolari nel 2021
- Scrittura di unit test con Spock Framework
- Migliori strumenti di test del software 2021 [Strumenti di automazione del test QA]
- Differenze chiave tra il test della scatola nera e il test della scatola bianca
- Test di carico con HP LoadRunner Tutorial
- Differenza tra desktop, test server client e test Web
- Cos'è il Gamma Testing? La fase finale del test