Per disegnare insieme alcuni aspetti di alcune risposte e aggiungere il mio 2p ...
Nota: i miei commenti si riferiscono in particolare al test del database e non al test dell'interfaccia utente (anche se ovviamente simile si applica).
I database hanno bisogno di essere testati tanto quanto le applicazioni front-end, ma tendono a essere testati sulla base di "funziona con il front-end?" o 'i rapporti producono il risultato corretto?', che secondo me sta testando molto tardi nel processo di sviluppo del database e non molto robusto.
Abbiamo un numero di clienti che utilizzano test unitari / di integrazione / di sistema per il loro database di data warehouse oltre al consueto UAT / performance / et al. test. Scoprono che con una continua integrazione e test automatizzati rilevano molti problemi prima di arrivare all'UAT tradizionale, risparmiando così tempo in UAT e aumentando le possibilità di successo UAT.
Sono sicuro che la maggior parte concorderebbe sul fatto che un simile rigore dovrebbe essere applicato ai test di database come front-end o report test.
La cosa chiave con i test è testare piccole entità semplici, assicurandone la correttezza, prima di procedere su combinazioni complesse di entità, assicurandone la correttezza prima di espandersi nel sistema più ampio.
Quindi, dando un po 'di contesto alla mia risposta ...
Test unitari
- ha un focus di prova per dimostrare che l'unità funziona, ad esempio una tabella, vista, funzione, procedura memorizzata
- dovrebbe "stub" le interfacce per rimuovere le dipendenze esterne
- fornirà i propri dati. È necessario uno stato iniziale noto dei dati, quindi se esiste la possibilità che i dati pre-test esistano, allora dovrebbero verificarsi troncamenti / eliminazioni prima della popolazione
- verrà eseguito idealmente nel proprio contesto di esecuzione
- chiarirà dopo se stesso e rimuoverà i dati utilizzati; questo è importante solo quando non vengono utilizzati stub.
I vantaggi di questo sono che si stanno rimuovendo tutte le dipendenze esterne dal test ed eseguendo il minor numero di test per dimostrare la correttezza. Ovviamente, questi test non possono essere eseguiti sul database di produzione. È possibile che ci siano diversi tipi di test che farai, a seconda del tipo di unità, tra cui:
- controllo dello schema, alcuni potrebbero chiamare questo un test di "contratto dati"
- valori della colonna che passano
- l'esercizio di percorsi logici con diversi valori di dati per funzioni, procedure, viste, colonne calcolate
- test dei casi limite - NULL, dati errati, numeri negativi, valori troppo grandi
(Unità) Test di integrazione
Ho trovato utile questo post SE nel parlare di vari tipi di test.
- ha l'obiettivo di test per dimostrare che le unità si integrano insieme
- eseguito su un numero di unità insieme
- dovrebbe "stub" le interfacce per rimuovere le dipendenze esterne
- fornirà i propri dati per rimuovere gli effetti di influenze esterne dei dati
- verrà eseguito idealmente nel proprio contesto di esecuzione
- chiarirà dopo se stesso e rimuoverà i dati creati; questo è importante solo quando non vengono utilizzati stub.
Passando dai test unitari a questi test di integrazione, spesso ci saranno leggermente più dati, al fine di testare una più ampia varietà di casi di test. Ovviamente, questi test non possono essere eseguiti sul database di produzione.
Questo procede quindi con System Testing , System Integration Testing (ovvero test end-2-end), con volumi di dati crescenti e portata crescente. Tutti questi test dovrebbero diventare parte di un framework di test di regressione. Alcuni di questi test potrebbero essere scelti dagli utenti per essere eseguiti come parte dell'UAT, ma UAT sono i test definiti dagli utenti , non come definiti dall'IT - un problema comune!
Quindi, ora che ho dato un po 'di contesto, per rispondere alle tue domande reali
- la prepopolazione dei dati per i test di unità e integrazione può causare errori di test spuri e deve essere evitata.
- L'unico modo per garantire test coerenti è di non fare ipotesi sui dati di origine e controllarli rigorosamente.
- è importante un contesto di esecuzione del test separato, per garantire che un tester non sia in conflitto con un altro tester che esegue gli stessi test su un diverso ramo del codice del database controllato dalla sorgente.