Kualitas Data dalam Tes Regresi Basis Data Relasional

9

Saya telah mengerjakan aplikasi web Museum Collections Management sumber terbuka yang akan digunakan untuk melacak artefak yang diakses, disumbangkan, dipinjam, atau diperoleh dengan cara lain.

Ini melibatkan perancangan dan pembuatan basis data yang agak besar (sehubungan dengan pengalaman saya sebelumnya), yang menyimpan semua jenis informasi yang bervariasi (informasi artefak, informasi lokasi yang berubah, informasi kontak pribadi, gambar, dll), yang perlu fleksibel dan mudah diperluas .

Saya baru saja menyelesaikan gelar sarjana saya dan saya bukan seorang profesional ketika datang ke desain database dan jadi saya benar-benar ingin membuat test suite menyeluruh untuk memastikan bahwa apa yang saya miliki di tempat "berfungsi".

Saya telah membaca tentang pengujian basis data dan menemukan beberapa artikel yang menyebutkan Pengujian Regresi terkait dengan basis data, tetapi saya tidak sepenuhnya memahami apa yang melibatkan semua ini. Dari membaca artikel ini di Dr.Dobbs saya mengerti bahwa satu jenis pengujian yang perlu saya lakukan adalah memvalidasi bahwa logika dalam database sudah benar. Jadi saya akan membuat tes yang memasukkan data tertentu ke dalam basis data dan kemudian menindaklanjutinya dengan kueri untuk memastikan bahwa saya mendapatkan kembali data yang benar dari database (memastikan bahwa semua pemicu atau tampilan yang sesuai berfungsi).

Kebingungan datang dengan menyebutkan pengujian untuk "Kualitas Data". Dalam artikel di atas penulis menyebutkan bahwa Anda ingin memvalidasi tes berikut dengan:

  • Aturan nilai domain kolom
  • Aturan nilai default kolom
  • Aturan keberadaan nilai
  • Aturan nilai baris
  • Aturan ukuran

Apa jenis tes yang akan melibatkan ini dan bagaimana mereka dilaksanakan? Juga ini adalah pertama kalinya saya menulis test suite untuk database, apakah ada pedoman yang baik tentang bagaimana / di mana untuk memulai atau proses yang bisa saya ikuti untuk memandu pengembangan pengujian saya?

Kristen D.
sumber

Jawaban:

3

Jawaban lengkap untuk pertanyaan ini akan sangat panjang. Saya akan mencoba menyebutkan poin utama.

Untuk memisahkan masalah, Anda mungkin melihat tes untuk:

A - Validasi desain basis data.

B - Validasi bahwa program berinteraksi dengan benar dengan database.

Validasi desain database harus dilakukan oleh orang yang mendesain database. Pengembang (saat pengujian unit) harus lebih memperhatikan bagian (B). Perbedaan utama yang saya lihat antara dua jenis tes adalah alat yang digunakan. Untuk (A), Anda akan menggunakan lingkungan yang tidak tergantung pada kode proyek, sedangkan pada (B) Anda tentu saja akan menggunakan kode proyek. Dalam teks berikut, saya akan mencampur keduanya.

Untuk menjawab pertanyaan khusus Anda:

Aturan nilai domain kolom

Setiap kolom memiliki tipe data terkait. Setiap kolom harus divalidasi terhadap aturan bisnis untuk membuktikan bahwa itu mewakili tipe data yang benar. Masalah dapat muncul jika tipe data kolom tidak kompatibel dengan persyaratan bisnis atau jika kode menggunakan tipe data yang berbeda dari bagaimana itu didefinisikan dalam database.

Sebagai contoh:

  • Jika kolom didefinisikan sebagai int kecil, Anda seharusnya tidak dapat menyimpan teks di dalamnya. Ini adalah tes penting terutama ketika kolom bersifat opsional, karena bisa saja tidak diketahui sampai seseorang benar-benar memasukkan beberapa data di dalamnya.

  • Bisakah Anda menyimpan nilai negatif dalam kolom di mana bisnis mengharuskan itu terjadi?

Aturan nilai default kolom

Beberapa kolom dikaitkan dengan spesifikasi nilai default di DDL (Data Def. Language) di mana jika selama menyisipkan insert tidak memberikan nilai, database akan menganggap nilai default. Ini dapat diuji dengan tidak melewatkan nilai dan mengamati nilai hasil menyimpan database. Tes ini juga dapat mencakup memeriksa kolom Nullable. Ini jarang memerlukan tes karena dapat diverifikasi dari DDL kecuali indeks unik dibangun di kolom.

Aturan keberadaan nilai

Seperti yang saya pahami, Anda memverifikasi bahwa data yang dimasukkan atau diperbarui menunjukkan seperti yang diharapkan dalam database.

Aturan nilai baris

Saya tidak tahu persis apa artinya yang satu ini.

Aturan ukuran

Setiap kolom memiliki ukuran dalam database berdasarkan pada bagaimana itu didefinisikan dalam DDL. Anda ingin memastikan bahwa nilai apa pun yang sesuai dengan persyaratan (baik yang dimasukkan dari GUI atau yang dihasilkan sebagai hasil perhitungan) akan disimpan dengan benar di kolom. Misalnya tipe data Integer Kecil tidak memungkinkan Anda untuk menyimpan nilai 5 miliar. Juga, nama yang didefinisikan sebagai VARCHAR2 (30) tidak akan menampung 40 karakter, jadi aturan bisnis harus sangat jelas di sini, khususnya ketika kolom digunakan untuk mengumpulkan data. Anda ingin menguji apa yang terjadi dalam situasi seperti itu.

pedoman tentang bagaimana / di mana untuk memulai

Salah satu cara untuk melakukan ini adalah dengan membuat rencana pengujian. Anda ingin memastikan Anda menggunakan versi spesifikasi yang benar (seperti dokumen persyaratan dan Use Cases) dan perangkat lunak. Anda juga perlu mengoordinasikan tes ini dengan tes yang dilakukan oleh Unit Testing (jika ada). Anda mungkin menemukan tes duplikat yang tidak perlu Anda lakukan lagi. Anda ingin mengambil salinan database sebelum pengujian sehingga Anda bisa mengulangi tes tertentu jika perlu. DBA dapat membantu Anda dengan ini. Anda juga perlu memeriksa dengan tim Anda bagaimana mereka mendokumentasikan tesis tesis dan memverifikasi cakupan pengujiannya. Anda dapat memecah database Anda menjadi bagian logis dan memulai pengujian setiap bagian logis secara terpisah. Proses pengujian dapat dimulai dengan mempelajari DDL dari database dan memverifikasi bahwa kolom didefinisikan dengan benar seperti yang disyaratkan oleh bisnis. Anda harus menggunakan perangkat lunak aplikasi dan bukan alat lain untuk melakukan sebagian besar tes. Misalnya pertanyaan berikut:

  • Apakah kolom seharusnya dari tipe yang ditentukan (tidak ada gunanya membuat Nama sebagai Int).

  • Apakah ukurannya kompatibel dengan persyaratan bisnis?

  • Apakah semua kolom dalam persyaratan bisnis ditemukan dalam database?

  • Apakah kolom nol benar-benar opsional?

  • dll.

Selanjutnya, Anda bisa mendesain kasus uji untuk menguji hal di atas. Anda dapat menggunakan GUI untuk melakukan sebagian besar tes.

Ada tes database penting lainnya yang belum Anda sebutkan. Mereka berurusan dengan:

1 - Menguji bahwa kunci utama benar-benar unik dari perspektif bisnis.

2 - Menguji bahwa indeks unik (selain PK) benar-benar unik dari perspektif bisnis.

3 - Menguji kendala Kunci Asing berfungsi.

4 - Menguji apa yang terjadi ketika suatu baris dihapus dan pengaruhnya terhadap baris terkait.

5 - Tes lain tentang konstruksi basis data khusus seperti CHEKC, Pemicu jika ada.

6 - Normalisasi tabel yang benar dan kolom yang dinormalisasi memiliki nilai yang benar.

Di atas bukan daftar lengkap tetapi harus Anda mulai.

Tidak ada kesempatan
sumber
Terima kasih atas perincian jawaban Anda dan saran Anda untuk pengembangan tes sepertinya adalah tempat yang baik untuk memulai. Terima kasih atas bantuan Anda.
Kristen D.
KristenD. @Songo Saya menghargai umpan baliknya.
NoChance
1

Saya pikir Anda mendekati ini dengan cara yang salah.

Basis data apa pun yang saya tahu memverifikasi data sebelum memasukkannya ke dalam tabel - ini memvalidasi terhadap definisi setiap kolom. Anda tidak dapat memasukkan string 80 karakter ke dalam kolom SMALLINT (3) - database akan gagal dalam upaya itu dan memberi tahu Anda bahwa Anda telah membuat kesalahan. Anda tidak perlu mengujinya sendiri dengan memasukkan data dan kemudian mengambilnya.

Apa yang ingin Anda miliki adalah aturan validasi / penyaringan data sebelum dikirim ke database.

  • Memastikan data sesuai dengan jenis dan rentang yang diterima untuk setiap kolom, dan memfilter konten yang tidak diinginkan
  • Pastikan untuk menghindarinya dengan benar untuk menghindari kesalahan (dan kemungkinan injeksi SQL jika Anda memiliki antarmuka publik)

Aturan validasi / penyaringan tersebut harus dijalankan pada data di aplikasi Anda yang sebenarnya. Anda kemudian dapat mengatur tes untuk memastikan mereka benar, dengan mengumpankannya dengan data yang benar dan salah untuk memastikan itu lulus atau gagal validasi sesuai.

Sejauh desain database berjalan, Anda tidak dapat benar-benar memverifikasinya dengan tes - karena banyak desain akan berfungsi bahkan jika mereka tidak ideal (dan definisi perubahan ideal di antara orang yang berbeda). Desain basis data yang tepat dilengkapi dengan pengalaman dan pengetahuan, bukan dengan tes otomatis.

Eran Galperin
sumber
Saya melihat dari mana Anda berasal dan saya sepenuhnya bermaksud membuat dan menguji filter yang memvalidasi data sebelum bahkan menyentuh database, tetapi dalam pertanyaan ini niat utama saya adalah untuk mencoba memverifikasi desain database (sebanyak yang saya bisa sebelum benar-benar sebelum menggunakannya) dan juga memverifikasi bahwa apa yang sebenarnya ada berfungsi sebagaimana mestinya (misalnya memastikan batasan kunci asing tidak rusak seperti yang disebutkan @EmmadKareem dalam jawabannya. Terima kasih telah memunculkan validasi data meskipun karena ini sangat integral) bagian dari aplikasi apa pun yang menggunakan basis data
Kristen D.