Qualità dei dati nei test di regressione del database relazionale


9

Ho lavorato su un'applicazione web open source per la gestione delle collezioni museali che deve essere utilizzata per tenere traccia dei manufatti acceduti, donati, prestati o altrimenti acquisiti.

Ciò ha comportato la progettazione e la creazione di un database piuttosto grande (in relazione alle mie precedenti esperienze), che memorizza tutti i tipi di informazioni variabili (informazioni sugli artefatti, informazioni sulla posizione che cambiano, informazioni di contatto personali, immagini, ecc.), Che devono essere flessibili e facilmente estensibili .

Sto solo finendo il mio diploma universitario e non sono un professionista quando si tratta di progettazione di database e quindi voglio davvero creare una suite di test approfondita per garantire che ciò che ho in atto "funzioni".

Ho letto i test sui database e mi sono imbattuto in alcuni articoli che menzionano i test di regressione per quanto riguarda i database, ma non capisco completamente cosa comporta tutto ciò. Dalla lettura di questo articolo su Dr.Dobbs capisco che un tipo di test che dovrò fare è convalidare che la logica nel database è corretta. Quindi creerei test che inseriscono determinati dati nel database e quindi li seguirò con una query per assicurarmi di ottenere i dati corretti dal database (assicurando che tutti i trigger o le viste appropriati funzionino).

La confusione arriva con la menzione di test per "Data Quality". Nell'articolo sopra l'autore menziona che si desidera convalidare quanto segue con i test:

  • Regole del valore del dominio della colonna
  • Regole del valore predefinito della colonna
  • Valori delle regole di esistenza
  • Regole del valore di riga
  • Regole di dimensione

Quali tipi di test comporterebbero e come verrebbero implementati? Anche questa è la prima volta che scrivo una suite di test per un database, ci sono delle buone linee guida su come / dove iniziare o sui processi che potrei seguire per guidare lo sviluppo del mio test?

Risposte:


3

Una risposta completa a questa domanda sarebbe molto lunga. Proverò a menzionare i punti principali.

Per separare le preoccupazioni, potresti esaminare i test per:

A - Convalida la progettazione del database.

B - Convalida che i programmi stiano interagendo correttamente con il database.

La convalida della progettazione del database deve essere eseguita dalla persona o dalle persone che hanno progettato il database. Gli sviluppatori (mentre test unitari) dovrebbero preoccuparsi maggiormente della parte (B). La differenza principale che vedo tra i due tipi di test è gli strumenti utilizzati. Per (A), useresti un ambiente indipendente dal codice del progetto, mentre su (B) useresti ovviamente il codice del progetto. Nel testo seguente, mescolerò entrambi.

Per rispondere alle tue domande specifiche:

Regole del valore del dominio della colonna

Ogni colonna ha un tipo di dati associato. Ogni colonna deve essere convalidata in base alle regole aziendali per dimostrare che rappresenta il tipo di dati corretto. Potrebbero sorgere problemi se il tipo di dati della colonna non è compatibile con i requisiti aziendali o se il codice utilizza un tipo di dati diverso da come è definito nel database.

Per esempio:

  • Se la colonna è definita come int piccolo, non dovresti essere in grado di memorizzare il testo al suo interno. Questo è un test importante specialmente quando le colonne sono opzionali, dal momento che potrebbe passare inosservato fino a quando qualcuno non inserisce effettivamente alcuni dati al suo interno.

  • Potresti memorizzare un valore negativo in una colonna in cui l'attività richiede che ciò accada?

Regole del valore predefinito della colonna

Alcune colonne sono associate a una specifica del valore predefinito nel DDL (Data Def. Language) in cui se durante l'inserimento l'inserimento non fornisce un valore, il database assumerà il valore predefinito. Questo può essere testato non passando il valore e osservando il valore del risultato archiviato dal database. Questo test può anche includere il controllo delle colonne Nullable. Ciò richiede raramente un test poiché può essere verificato da DDL a meno che non venga creato un indice univoco sulla colonna.

Valori delle regole di esistenza

A quanto ho capito, verifichi che i dati inseriti o aggiornati mostrino come previsto nel database.

Regole del valore di riga

Non sono chiaro su cosa significhi esattamente questo.

Regole di dimensione

Ogni colonna ha una dimensione nel database in base alla sua definizione in DDL. si desidera assicurarsi che qualsiasi valore che soddisfi i requisiti (o immesso nella GUI del modulo o risultante come output di un calcolo) venga archiviato correttamente nella colonna. Ad esempio, un tipo di dati Numero intero piccolo non consente di memorizzare un valore di 5 miliardi. Inoltre, un nome definito come VARCHAR2 (30) non può contenere 40 caratteri, quindi le regole aziendali devono essere molto chiare qui, specialmente quando la colonna viene utilizzata per aggregare i dati. Vuoi provare cosa succede in tali situazioni.

linee guida su come / dove iniziare

Un modo per farlo è quello di elaborare un piano di test. Desideri assicurarti di utilizzare la versione corretta delle specifiche (come documenti sui requisiti e casi d'uso) e del software. È inoltre necessario coordinare questi test con i test effettuati da Unit Testing (se presente). Potresti trovare test duplicati che non devi ripetere. Volete prendere una copia del database prima del test in modo da poter ripetere un test specifico, se necessario. Il DBA può aiutarti in questo. È inoltre necessario verificare con il proprio team come documentare questi test e verificare l'ambito dei test con loro. È possibile suddividere il database in parti logiche e iniziare il test di ciascuna parte logica separatamente. Il processo di test potrebbe iniziare studiando il DDL del database e verificando che le colonne siano definite correttamente come richiesto dall'azienda. Dovresti utilizzare il software dell'applicazione e non altri strumenti per eseguire la maggior parte dei test. Ad esempio, domanda quanto segue:

  • La colonna dovrebbe essere del tipo definito (non ha senso fare un nome come Int)?

  • Le dimensioni sono compatibili con i requisiti aziendali?

  • Tutte le colonne dei requisiti aziendali sono state trovate nel database?

  • Le colonne null sono davvero opzionali?

  • eccetera.

Successivamente, è possibile progettare casi di test per testare quanto sopra. È possibile utilizzare la GUI per eseguire la maggior parte dei test.

Esistono altri importanti test del database che non hai menzionato. Quelli si occupano di:

1 - Test che le chiavi primarie sono davvero uniche dal punto di vista aziendale.

2 - Test che indici unici (diversi dal PK) sono davvero unici dal punto di vista aziendale.

3 - Test dei vincoli di chiave esterna funzionano.

4 - Testare cosa succede quando una riga viene eliminata e il suo effetto sulle righe correlate.

5 - Altri test riguardanti costrutti di database speciali come CHEKC, Trigger se esistono.

6 - Corretta normalizzazione della tabella e che le colonne normalizzate contengono valori corretti.

Quanto sopra non è un elenco completo ma dovrebbe iniziare.


Grazie per i dettagli nella tua risposta e i tuoi suggerimenti per lo sviluppo dei test sembrano un buon punto di partenza. Grazie per l'aiuto.
Kristen D.,

KristenD. @Songo Apprezzo il feedback.
NoChance,

1

Penso che ti stai avvicinando a questo nel modo sbagliato.

Qualsiasi database che conosco verifica i dati prima di inserirli nelle tabelle: li convalida rispetto alla definizione di ogni colonna. Non è possibile inserire una stringa di 80 caratteri in una colonna SMALLINT (3) - il database fallirà quel tentativo e ti farà sapere che hai fatto un errore. Non è necessario verificarlo da soli inserendo i dati e quindi recuperandoli.

Quello che vuoi avere sono le regole di convalida / filtro sui dati prima che vengano inviati al database.

  • Assicurarsi che i dati si adattino ai tipi e agli intervalli accettati per ogni colonna e filtrare il contenuto indesiderato
  • Assicurarsi di evitarlo correttamente per evitare errori (e possibili iniezioni di SQL se si dispone di un'interfaccia pubblica)

Tali regole di convalida / filtro devono essere eseguite sui dati nell'applicazione effettiva. È quindi possibile impostare i test per assicurarsi che siano corretti, fornendo i dati corretti e errati per assicurarsi che superi o non superi la convalida di conseguenza.

Per quanto riguarda la progettazione del database, non è possibile verificarlo realmente con i test, poiché molti progetti funzioneranno anche se non sono ideali (e la definizione di cambiamenti ideali tra persone diverse). La corretta progettazione del database viene fornita con esperienza e conoscenza, non con test automatizzati.


Vedo da dove vieni e intendo creare e testare i filtri che convalidano i dati prima ancora che colpiscano il database, ma in questa domanda le mie intenzioni principali erano di provare a verificare il design del database (il più possibile prima in realtà utilizzandolo) e verifica anche che ciò che sta realmente funzionando come previsto (ad esempio assicurandoti che i vincoli di chiave esterna non vengano rotti come indicato da @EmmadKareem nella sua risposta. Grazie per aver avviato la convalida dei dati, sebbene sia molto integrato parte di qualsiasi applicazione che utilizza un database.
Kristen D.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.