I database non sono molto diversi dal codice:
-
Dovrebbero essere sempre sotto controllo di versione . Questa regola è essenziale per qualsiasi team di uno o più sviluppatori.
-
I database sono versionati in modo simile al codice.
-
I database richiedono architettura, design e implementazione.
-
Più tempo è dedicato alla gestione dei database rispetto alla loro creazione.
-
I database dovrebbero essere testati.
Se hai scritto test unitari per testare la tua applicazione, immagina i test del database come la stessa cosa, ma per i database: invece di testare la logica del tuo codice, si concentrano sul database stesso e su come gestisce i dati.
Analogamente all'applicazione stessa che può mantenere una complessa logica aziendale con più regole complesse, le regole del database possono diventare particolarmente complesse nelle applicazioni di grandi dimensioni. Un database può contenere:
-
Vincoli, che devono essere testati come qualsiasi altro codice. I vincoli di controllo, ad esempio, possono diventare piuttosto difficili nel tempo, ma anche i vincoli più semplici come la lunghezza massima di un campo o un vincolo univoco dovrebbero essere testati anche se il database contiene dati business-critical.
-
Query, ad esempio sotto forma di vista. Quando le visualizzazioni iniziano a fare join interni, raggruppamenti, ecc., È il momento di testarli pure.
-
Codice, ad esempio nelle stored procedure. I progetti che utilizzano le stored procedure molto e ne hanno di grandi non sono inusuali. Un modo è verificare che quelle stored procedure contengano codice che è puramente correlato al database e che non contiene la logica aziendale: spesso contengono una logica di business che può quindi essere spostata all'esterno del database. A volte, questo non è possibile; in tal caso, questo codice dovrebbe almeno essere attentamente testato.
-
Funzioni, come il supporto Unicode. Le funzionalità complesse sono complicate e ci si può aspettare che il database si comporti in un modo, mentre fa l'opposto. Un esempio di base dalla seguente lista: se una delle tue applicazioni gestisce i moduli di normalizzazione Unicode, un'altra non lo fa e il database no, potresti trovarti a caricare due prodotti con lo stesso identico nome, mentre ti aspetti i nomi essere unico.
Facciamo un esempio di una tabella che memorizza i prodotti. Ecco alcuni test di database che possono esistere:
-
Assicurati che il nome del prodotto possa contenere un massimo di 100 caratteri.
Funzionalità testata: vincoli di lunghezza.
-
Verifica che i nomi Unicode siano insert
ed e select
ed correttamente.
Funzionalità testata: supporto Unicode.
-
Assicurati che il nome del prodotto possa contenere un massimo di 100 caratteri Unicode.
Funzionalità testata: vincoli di lunghezza associati al supporto Unicode.
-
Assicurati che sia impossibile inserire due prodotti con lo stesso nome.
Funzionalità testata: vincolo unico.
-
Assicurarsi che sia impossibile inserire due prodotti con lo stesso nome Unicode scritto utilizzando diversi moduli di normalizzazione Unicode.
Funzionalità testata: caso complesso che mescola vincoli univoci e supporto Unicode.
-
Assicurati che sia impossibile insert
di un prodotto senza nome.
Funzionalità testata: vincolo non NULL (e infine un vincolo di controllo).
-
Assicurati che il prodotto non possa essere creato senza essere assegnato ad almeno una categoria.
Funzionalità testata: controlla il vincolo.
-
Assicurati che il prezzo in RebateProductsView
sia determinato come previsto sulla base di un prodotto campione con un prezzo e uno sconto specificati.
Funzionalità testata: visualizza.
-
Assicurati che il prezzo in RebateProductsView
sia ancora determinato correttamente quando il prezzo del prodotto è uguale a zero.
Funzionalità testata: visualizza.
-
Assicurati che sia possibile memorizzare 5.000.000 di prodotti.
Funzionalità testata: scalabilità.
-
Assicurati che un dato select
impieghi meno di 4 ms. nel 95% dei casi testati su una determinata macchina quando la tabella contiene 1.000.000 di prodotti.
Funzionalità testata: prestazioni.
-
Assicurati che quando insert
ing un prodotto con il prezzo 13.95
mentre la cultura predefinita del database è fr-FR
dove il modo corretto di scriverlo sarebbe 13,95
produce il risultato atteso.
Funzionalità testata: codifica.