Per disegnare aspetti di alcune risposte insieme e aggiungere il mio 2p ...
Nota: i miei commenti si riferiscono al test del database in particolare , e non al test dell'interfaccia utente (anche se ovviamente è simile).
I database hanno bisogno di essere testati come applicazioni front end, ma tendono a essere testati sulla base di "funziona con il front-end?" o 'i rapporti producono il risultato corretto?', che a mio parere sta testando molto tardi nel processo di sviluppo del database e non molto robusto.
Abbiamo un certo numero di clienti che utilizzano test di unità / integrazione / sistema per il loro database di data warehouse in aggiunta al solito UAT / performance / et al. test. Scoprono che con un'integrazione continua e test automatici hanno raccolto molti problemi prima di arrivare al tradizionale UAT, risparmiando così tempo in UAT e aumentando le possibilità di successo UAT.
Sono sicuro che la maggior parte sarebbe d'accordo sul fatto che un rigore simile dovrebbe essere applicato al test del database come al front end o al test del report.
La cosa fondamentale con i test è testare piccole entità semplici, assicurandone la correttezza, prima di procedere a complesse combinazioni di entità, assicurandone la correttezza prima di espandersi al sistema più ampio.
Quindi dando un contesto alla mia risposta ...
Test unità
- ha un obiettivo di test per dimostrare che l'unità funziona, ad es. una tabella, vista, funzione, stored procedure
- dovrebbe 'stub' le interfacce per rimuovere le dipendenze esterne
- fornirà i propri dati. È necessario uno stato iniziale noto dei dati, quindi se esiste una possibilità di pre-test dei dati esistenti, i troncamenti / le eliminazioni dovrebbero verificarsi prima della popolazione
- funzionerà idealmente nel proprio contesto di esecuzione
- si risolverà da solo e rimuoverà i dati utilizzati; questo è importante solo quando gli stub non sono usati.
I vantaggi di questa operazione sono la rimozione di tutte le dipendenze esterne dal test e l'esecuzione della più piccola quantità di test per dimostrare la correttezza. Ovviamente, questi test non possono essere eseguiti sul database di produzione. Potrebbe essere che ci siano un certo numero di tipi di test che farai, a seconda del tipo di unità, tra cui:
- controllo dello schema, alcuni potrebbero chiamarlo test "contratto dati"
- valori di colonna che passano attraverso
- l'esercizio di percorsi logici con diversi valori di dati per funzioni, procedure, viste, colonne calcolate
- test caso limite - NULL, dati non validi, numeri negativi, valori troppo grandi
Test di integrazione (unità)
Ho trovato questo post di SE utile nel parlare di vari tipi di test.
- ha lo scopo di testare 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 delle influenze esterne dei dati
- funzionerà idealmente nel proprio contesto di esecuzione
- si risolverà dopo se stesso e rimuoverà i dati creati; questo è importante solo quando gli stub non vengono utilizzati.
Nel passaggio dai test di unità a questi test di integrazione, spesso ci saranno un po 'più di 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 a Test di sistema , Test di integrazione di sistema (ovvero test end-2-end), con aumento dei volumi di dati e aumento dell'ambito. Tutti questi test dovrebbero diventare parte di un quadro di test di regressione. Alcuni di questi test potrebbero essere scelti dagli utenti per essere eseguiti come parte dell'UAT, ma UAT è i test definiti dagli utenti , non così definiti dall'IT - un problema comune!
Quindi ora che ho fornito un contesto, per rispondere alle tue domande reali
I dati di precompilazione - per i test di unità e di integrazione possono causare errori di test spuri e devono essere evitati.
- L'unico modo per garantire test coerenti è di non fare supposizioni sui dati di origine e di 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 ramo diverso del codice del database controllato all'origine.