İlişkisel Veritabanı Regresyon Testlerinde Veri Kalitesi


9

Bir müzenin katılımlı, bağışlanmış, ödünç verilmiş veya başka bir şekilde edinilmiş eserlerini takip etmek için kullanılacak açık kaynaklı bir Müze Koleksiyonlar Yönetimi web uygulaması üzerinde çalışıyorum.

Bu, esnek ve kolayca genişletilebilir olması gereken her türlü değişken bilgiyi (artefakt bilgileri, konum bilgilerini, kişisel iletişim bilgilerini, resimleri vb.) Depolayan oldukça büyük bir veritabanı (önceki deneyimlerimle ilgili olarak) tasarlamayı ve oluşturmayı içeriyordu. .

Ben sadece üniversite diplomamı bitiriyorum ve veritabanı tasarımı söz konusu olduğunda profesyonel değilim ve bu yüzden yerinde "çalışıyor" olduğundan emin olmak için kapsamlı bir test paketi oluşturmak istiyorum.

Ben veritabanı testi okudum ve veritabanları ile ilgili Regresyon Testi bahseden birkaç makale rastladım ama bunların ne olduğunu tam olarak anlamıyorum. Dr.Dobbs'ta bu makaleyi okuduktan sonra, yapmam gereken bir tür testin veritabanındaki mantığın doğru olduğunu doğrulamak olduğunu anlıyorum. Bu yüzden veritabanına belirli verileri eklemek ve sonra veritabanından (tüm uygun tetikleyicilerin veya görünümlerin çalıştığından emin olmak) doğru verileri geri sağlamak için bir sorgu ile takip testleri oluşturmak.

Karışıklık, "Veri Kalitesi" için yapılan testlerden bahsediyor. Yukarıdaki makalede yazar, aşağıdakileri testlerle doğrulamak istediğinizden bahseder:

  • Sütun etki alanı değer kuralları
  • Sütun varsayılan değer kuralları
  • Değer varlığı kuralları
  • Satır değeri kuralları
  • Boyut kuralları

Bu ne tür testler içerecek ve nasıl uygulanacak? Ayrıca bu benim ilk kez bir veritabanı için bir test paketi yazmak, nasıl / nereden başlayacağımı veya test geliştirmemi yönlendirmek için izleyebileceğim herhangi bir işlemi var mı?

Yanıtlar:


3

Bu soruya tam bir cevap çok uzun olacaktır. Ana noktalardan bahsetmeye çalışacağım.

Endişeleri ayırmak için aşağıdakilere yönelik testlere bakabilirsiniz:

A - Veritabanı tasarımını doğrulayın.

B - Program (lar) ın veritabanıyla doğru bir şekilde etkileşime girdiğini doğrulayın.

Veritabanı tasarımı doğrulaması, veritabanını tasarlayan kişiler tarafından gerçekleştirilmelidir. Geliştiriciler (birim testi yaparken) daha çok (B) kısmı ile ilgilenmelidir. İki test türü arasında gördüğüm temel fark kullanılan araçlardır. (A) için proje kodundan bağımsız bir ortam kullanırken, (B) üzerinde elbette projenin kodunu kullanırsınız. Aşağıdaki metinde her ikisini de karıştıracağım.

Belirli sorularınızı cevaplamak için:

Sütun etki alanı değer kuralları

Her sütunun ilişkili bir veri türü vardır. Her sütun, doğru veri türünü temsil ettiğini kanıtlamak için iş kurallarına göre doğrulanmalıdır. Sütun veri türü iş gereksinimleriyle uyumlu değilse veya kod, veritabanında tanımlanma biçiminden farklı bir veri türü kullanıyorsa sorunlar oluşabilir.

Örneğin:

  • Sütun küçük int olarak tanımlanmışsa, metni depolayamamalısınız. Bu, özellikle sütunlar isteğe bağlı olduğunda önemli bir testtir, çünkü birisi gerçekten içine bazı veriler girene kadar fark edilmeyebilir.

  • İşletmenin gerçekleşmesini gerektirdiği bir sütunda negatif bir değer saklayabilir misiniz?

Sütun varsayılan değer kuralları

Bazı sütunlar, ekleme sırasında bir değer sağlamazsa, veritabanının varsayılan değeri alacağı DDL'de (Veri Tanımı Dili) varsayılan bir değer belirtimi ile ilişkilidir. Bu değer geçilmez ve veritabanının depoladığı sonuç değeri gözlenerek test edilebilir. Bu sınama, Null olabilecek sütunların denetlenmesini de içerebilir. Sütun üzerinde benzersiz bir dizin oluşturulmadıkça DDL'den doğrulanabildiğinden bu nadiren bir test gerektirir.

Değer varlığı kuralları

Bunu anladığım gibi, eklenen veya güncellenen verilerin veritabanında beklendiği gibi gösterildiğini doğrularsınız.

Satır değeri kuralları

Bunun tam olarak ne anlama geldiği konusunda net değilim.

Boyut kuralları

Her sütunun, DDL'de nasıl tanımlandığına bağlı olarak veritabanında bir boyutu vardır. gereksinimlere uyan herhangi bir değerin (GUI formuna girilen veya bir hesaplama çıktısı olarak ortaya çıkan) sütunda doğru saklanacağından emin olmak istersiniz. Örneğin, Küçük Tamsayı veri türü 5 milyarlık bir değeri depolamanıza izin vermez. Ayrıca, VARCHAR2 (30) olarak tanımlanan bir ad 40 karakter içermez, bu nedenle iş kuralları burada, özellikle sütun verileri toplamak için kullanıldığında çok açık olmalıdır. Bu gibi durumlarda ne olduğunu test etmek istersiniz.

nasıl / nereden başlayacağınıza dair yönergeler

Bunu yapmanın bir yolu bir test planı oluşturmaktır. Spesifikasyonların (gereksinimler belgeleri ve Kullanım Örnekleri gibi) ve yazılımın doğru sürümünü kullandığınızdan emin olmak istiyorsunuz. Ayrıca bu testleri Birim Testi (varsa) tarafından yapılan testlerle koordine etmeniz gerekir. Tekrar yapmanıza gerek olmayan yinelenen testler bulabilirsiniz. Gereksinim duyduğunuzda belirli bir testi tekrarlayabilmeniz için testten önce veritabanının bir kopyasını almak istiyorsunuz. DBA size bu konuda yardımcı olabilir. Ayrıca, bu testleri nasıl belgelendirdiklerini ve test kapsamını onlarla nasıl doğruladıklarını ekibinize danışmanız gerekir. Veritabanınızı mantıksal parçalara bölebilir ve her mantıksal parçayı ayrı ayrı test etmeye başlayabilirsiniz. Sınama işlemi, veritabanının DDL'sini inceleyerek ve sütunların işletme tarafından gerektiği şekilde doğru tanımlandığını doğrulayarak başlayabilir. Testlerin çoğunu gerçekleştirmek için uygulamanın başka bir aracını değil yazılımını kullanıyor olmalısınız. Örneğin, aşağıdakileri sorun:

  • Sütunun tanımlı türde olması gerekiyor mu (Int olarak Ad oluşturmanın anlamı yoktur).

  • Boyut iş gereksinimleriyle uyumlu mu?

  • İşletme gereksinimlerindeki tüm sütunlar veritabanında mı bulunuyor?

  • Boş sütunlar gerçekten isteğe bağlı mı?

  • vb.

Daha sonra, yukarıdakileri test etmek için test senaryoları tasarlayabilirsiniz. Testlerin çoğunu yapmak için GUI'yi kullanabilirsiniz.

Bahsetmediğiniz başka önemli veritabanı testleri de vardır. Bunlar:

1 - Birincil anahtarların işletme açısından gerçekten benzersiz olduğunu test etmek.

2 - Benzersiz dizinlerin (PK dışında) gerçekten iş açısından benzersiz olduğunu test etmek.

3 - Yabancı Anahtar kısıtlamalarının test edilmesi çalışması.

4 - Bir satır silindiğinde ne olacağını ve ilgili satırlar üzerindeki etkisini test etme.

5 - CHEKC, varsa Tetikleyiciler gibi özel veritabanı yapılarına ilişkin diğer testler.

6 - Tablo normalleştirmesini düzeltin ve normalleştirilmiş sütunlar doğru değerleri tutar.

Yukarıdakiler tam bir liste değildir, ancak başlamanız gerekir.


Cevabınızdaki ayrıntılar için teşekkür ederiz ve test geliştirme önerileriniz başlamak için iyi bir yer gibi görünüyor. Yardımın için teşekkürler.
Kristen D.

KristenD. @Songo Geri bildirimi takdir ediyorum.
NoChance

1

Sanırım buna yanlış yaklaşıyorsun.

Bildiğim herhangi bir veritabanı, tablolara eklemeden önce verileri doğrular - her sütunun tanımına göre doğrular. SMALLINT (3) sütununa 80 karakterlik bir dize giremezsiniz - veritabanı bu denemede başarısız olur ve hata yaptığınızı bildirir. Verileri ekleyip ardından geri alarak bunu kendiniz test etmeniz gerekmez.

Sahip olmak istediğiniz , veritabanına gönderilmeden önce veriler üzerinde doğrulama / filtreleme kurallarıdır .

  • Verilerin her sütun için kabul edilen türlere ve aralığa uyduğundan emin olmak ve istenmeyen içeriği filtrelemek
  • Hatalardan kaçınmak için düzgün bir şekilde kaçtığınızdan emin olun (ve genel bir arayüzünüz varsa olası SQL enjeksiyonları)

Bu doğrulama / filtreleme kuralları, gerçek uygulamanızdaki veriler üzerinde çalışmalıdır. Ardından doğrulamanın doğru olduğundan emin olmak için testleri yapıp doğrulamayı doğru ve yanlış verilerle besleyerek doğrulamayı geçip geçmediğinden emin olabilirsiniz.

Veritabanı tasarımı ile ilgili olarak, testlerle gerçekten doğrulayamazsınız - çünkü birçok tasarım ideal olmasalar bile (ve farklı insanlar arasındaki ideal değişikliklerin tanımı) çalışacaktır . Doğru veritabanı tasarımı, otomatik testlerle değil, deneyim ve bilgi ile gelir.


Nereden geldiğinizi görüyorum ve veritabanına bile çarpmadan önce verileri doğrulayan filtreler oluşturmayı ve test etmeyi planlıyorum, ancak bu soruda asıl amacım veritabanının tasarımını doğrulamaya çalışmaktı (daha önce yapabildiğim kadarıyla) ve gerçekte var olan şeyin amaçlandığı gibi çalıştığını doğrulayın (örneğin, yanıtında @EmmadKareem'in belirttiği gibi yabancı anahtar kısıtlamalarının kırılmadığından emin olun. Veri doğrulamasını getirdiğiniz için teşekkür ederiz. veritabanı kullanan herhangi bir uygulamanın bir parçası
Kristen D.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.