คุณภาพข้อมูลในการทดสอบการถดถอยฐานข้อมูลเชิงสัมพันธ์


9

ฉันทำงานกับเว็บแอปพลิเคชันการจัดการคอลเล็กชั่นโอเพนซอร์ซที่ใช้เพื่อติดตามการบริจาคบริจาคให้ยืมหรือซื้อสิ่งของอื่น ๆ ของพิพิธภัณฑ์

สิ่งนี้เกี่ยวข้องกับการออกแบบและสร้างฐานข้อมูลที่ค่อนข้างใหญ่ (เมื่อเทียบกับประสบการณ์ก่อนหน้าของฉัน) ซึ่งเก็บข้อมูลที่หลากหลายทุกชนิด (ข้อมูลสิ่งประดิษฐ์การเปลี่ยนข้อมูลสถานที่ข้อมูลการติดต่อส่วนบุคคลรูปภาพ ฯลฯ ) ซึ่งต้องยืดหยุ่นและขยายได้อย่างง่ายดาย .

ฉันเพิ่งจบระดับมหาวิทยาลัยของฉันและฉันไม่ใช่มืออาชีพเมื่อพูดถึงการออกแบบฐานข้อมูลและดังนั้นฉันจึงต้องการสร้างชุดทดสอบอย่างละเอียดเพื่อให้แน่ใจว่าสิ่งที่ฉันมี "การทำงาน"

ฉันได้อ่านข้อมูลเกี่ยวกับการทดสอบฐานข้อมูลและพบบทความเล็ก ๆ น้อย ๆ ที่กล่าวถึงการทดสอบการถดถอยเกี่ยวกับฐานข้อมูล แต่ฉันไม่เข้าใจสิ่งที่เกี่ยวข้องทั้งหมด จากการอ่านบทความนี้ที่ Dr.Dobbsฉันเข้าใจว่าการทดสอบประเภทหนึ่งที่ฉันต้องทำคือการตรวจสอบว่าตรรกะในฐานข้อมูลนั้นถูกต้อง ดังนั้นฉันจะสร้างการทดสอบที่แทรกข้อมูลบางอย่างลงในฐานข้อมูลแล้วติดตามด้วยแบบสอบถามเพื่อให้แน่ใจว่าฉันได้รับข้อมูลที่ถูกต้องกลับมาจากฐานข้อมูล (รับรองว่าทริกเกอร์หรือมุมมองที่เหมาะสมทั้งหมดทำงาน)

ความสับสนเกิดขึ้นจากการทดสอบ "คุณภาพข้อมูล" ในบทความข้างต้นผู้เขียนพูดถึงว่าคุณต้องการตรวจสอบต่อไปนี้ด้วยการทดสอบ:

  • กฎค่าโดเมนคอลัมน์
  • กฎค่าเริ่มต้นของคอลัมน์
  • กฎการดำรงอยู่ของค่า
  • กฎค่าแถว
  • ขนาดกฎ

การทดสอบประเภทนี้เกี่ยวข้องกับอะไรและจะนำไปใช้อย่างไร นี่เป็นครั้งแรกที่ฉันเขียนชุดทดสอบสำหรับฐานข้อมูลมีแนวทางใดที่ดีในการเริ่มต้นหรือกระบวนการใด ๆ ที่ฉันสามารถทำตามเพื่อเป็นแนวทางในการพัฒนาการทดสอบของฉัน

คำตอบ:


3

คำตอบที่สมบูรณ์สำหรับคำถามนี้จะยาวมาก ฉันจะพยายามพูดถึงประเด็นหลัก

หากต้องการแยกข้อกังวลคุณอาจดูการทดสอบเพื่อ:

เอ - ตรวจสอบการออกแบบฐานข้อมูล

B - ตรวจสอบว่าโปรแกรมกำลังโต้ตอบอย่างถูกต้องกับฐานข้อมูล

การตรวจสอบการออกแบบฐานข้อมูลควรดำเนินการโดยบุคคลที่ออกแบบฐานข้อมูล นักพัฒนา (ในขณะที่การทดสอบหน่วย) ควรมีความกังวลมากขึ้นด้วยส่วน (B) ความแตกต่างหลักที่ฉันเห็นระหว่างการทดสอบสองประเภทคือเครื่องมือที่ใช้ สำหรับ (A) คุณจะต้องใช้สภาพแวดล้อมที่เป็นอิสระจากรหัสโครงการในขณะที่ใน (B) คุณแน่นอนว่าต้องใช้รหัสของโครงการ ในข้อความต่อไปนี้ฉันจะผสมทั้งสองอย่าง

หากต้องการตอบคำถามเฉพาะของคุณ:

กฎค่าโดเมนคอลัมน์

แต่ละคอลัมน์มีประเภทข้อมูลที่เกี่ยวข้อง แต่ละคอลัมน์จะต้องมีการตรวจสอบกับกฎทางธุรกิจเพื่อพิสูจน์ว่ามันเป็นประเภทข้อมูลที่ถูกต้อง ปัญหาอาจเกิดขึ้นได้หากชนิดข้อมูลคอลัมน์ไม่เข้ากันกับข้อกำหนดทางธุรกิจหรือหากรหัสใช้ชนิดข้อมูลที่แตกต่างจากวิธีการที่กำหนดไว้ในฐานข้อมูล

ตัวอย่างเช่น:

  • หากคอลัมน์ถูกกำหนดเป็น int ขนาดเล็กคุณไม่ควรเก็บข้อความไว้ นี่คือการทดสอบที่สำคัญเป็นพิเศษเมื่อคอลัมน์เป็นตัวเลือกเนื่องจากอาจไม่มีใครสังเกตจนกว่าจะมีคนป้อนข้อมูลบางอย่างในนั้น

  • คุณสามารถเก็บค่าลบในคอลัมน์ที่ธุรกิจต้องการให้เกิดขึ้นได้หรือไม่?

กฎค่าเริ่มต้นของคอลัมน์

บางคอลัมน์เกี่ยวข้องกับข้อกำหนดค่าเริ่มต้นใน DDL (Data Def. Language) ซึ่งหากในระหว่างการแทรกการแทรกไม่ได้ให้ค่าฐานข้อมูลจะถือว่าเป็นค่าเริ่มต้น สิ่งนี้สามารถทดสอบได้โดยไม่ผ่านค่าและสังเกตค่าผลลัพธ์ที่ฐานข้อมูลจัดเก็บ การทดสอบนี้อาจรวมถึงการตรวจสอบคอลัมน์ที่เป็นโมฆะ สิ่งนี้ไม่ค่อยต้องการการทดสอบเนื่องจากสามารถตรวจสอบได้จาก DDL ยกเว้นว่ามีการสร้างดัชนีที่ไม่ซ้ำกันในคอลัมน์

กฎการดำรงอยู่ของค่า

ตามที่ฉันเข้าใจสิ่งนี้คุณยืนยันว่าข้อมูลที่แทรกหรืออัพเดตแสดงตามที่คาดไว้ในฐานข้อมูล

กฎค่าแถว

ฉันไม่ชัดเจนในสิ่งที่คนนี้มีความหมายตรง

ขนาดกฎ

แต่ละคอลัมน์มีขนาดในฐานข้อมูลตามวิธีที่กำหนดไว้ใน DDL คุณต้องการตรวจสอบให้แน่ใจว่าค่าใด ๆ ที่ตรงกับความต้องการ (ไม่ว่าจะเป็นแบบฟอร์ม GUI ที่ป้อนหรือผลลัพธ์เป็นผลลัพธ์ของการคำนวณ) จะถูกเก็บไว้อย่างถูกต้องในคอลัมน์ ตัวอย่างเช่นชนิดข้อมูลขนาดเล็กจำนวนเต็มไม่อนุญาตให้คุณเก็บค่า 5 พันล้าน นอกจากนี้ชื่อที่กำหนดเป็น VARCHAR2 (30) จะไม่รองรับอักขระ 40 ตัวดังนั้นกฎเกณฑ์ทางธุรกิจจะต้องชัดเจนมากที่นี่โดยเฉพาะเมื่อใช้คอลัมน์เพื่อรวบรวมข้อมูล คุณต้องการทดสอบสิ่งที่เกิดขึ้นในสถานการณ์เช่นนี้

แนวทางเกี่ยวกับวิธี / เริ่มต้น

วิธีหนึ่งในการทำเช่นนี้คือการวางแผนการทดสอบ คุณต้องการให้แน่ใจว่าคุณกำลังใช้ข้อมูลจำเพาะรุ่นที่ถูกต้อง (เช่นเอกสารข้อกำหนดและกรณีการใช้งาน) และซอฟต์แวร์ คุณต้องประสานการทดสอบกับการทดสอบที่ทำโดยการทดสอบหน่วย (ถ้ามี) คุณอาจพบการทดสอบซ้ำที่คุณไม่จำเป็นต้องดำเนินการอีกครั้ง คุณต้องการคัดลอกฐานข้อมูลก่อนการทดสอบเพื่อให้คุณสามารถทำซ้ำการทดสอบเฉพาะหากคุณต้องการ DBA อาจช่วยคุณในเรื่องนี้ คุณต้องตรวจสอบกับทีมของคุณว่าพวกเขาทำเอกสารการทดสอบเหล่านี้อย่างไรและตรวจสอบขอบเขตการทดสอบกับพวกเขา คุณสามารถแบ่งฐานข้อมูลของคุณเป็นส่วนตรรกะและเริ่มการทดสอบของแต่ละส่วนตรรกะแยกจากกัน กระบวนการทดสอบอาจเริ่มต้นด้วยการศึกษา DDL ของฐานข้อมูลและตรวจสอบว่าคอลัมน์ถูกกำหนดอย่างถูกต้องตามที่ธุรกิจต้องการ คุณควรใช้ซอฟต์แวร์ของแอพพลิเคชั่นและไม่ใช่เครื่องมืออื่นใดที่จะทำการทดสอบส่วนใหญ่ ตัวอย่างเช่นคำถามต่อไปนี้:

  • เป็นคอลัมน์ที่ควรจะเป็นประเภทที่กำหนดไว้ (ไม่มีจุดในการสร้างชื่อเป็น Int)

  • ขนาดเข้ากันได้กับข้อกำหนดทางธุรกิจหรือไม่

  • พบคอลัมน์ทั้งหมดในข้อกำหนดทางธุรกิจในฐานข้อมูลหรือไม่

  • คอลัมน์ null เป็นตัวเลือกจริงหรือไม่

  • เป็นต้น

ถัดไปคุณสามารถออกแบบกรณีทดสอบเพื่อทดสอบข้างต้น คุณสามารถใช้ GUI เพื่อทำการทดสอบส่วนใหญ่ได้

มีการทดสอบฐานข้อมูลสำคัญอื่น ๆ ที่คุณไม่ได้กล่าวถึง ข้อตกลงเหล่านั้นด้วย:

1 - ทดสอบว่าคีย์หลักแตกต่างจากมุมมองทางธุรกิจจริงๆ

2 - ทดสอบว่าดัชนีเฉพาะ (นอกเหนือจาก PK) นั้นแตกต่างจากมุมมองทางธุรกิจ

3 - การทดสอบข้อ จำกัด คีย์ต่างประเทศทำงาน

4 - ทดสอบว่าจะเกิดอะไรขึ้นเมื่อลบแถวและมีผลกับแถวที่เกี่ยวข้อง

5 - การทดสอบอื่น ๆ เกี่ยวกับการสร้างฐานข้อมูลพิเศษเช่น CHEKC, ทริกเกอร์ถ้าพวกเขามีอยู่

6 - การนอร์มัลไลซ์ของตารางที่ถูกต้องและคอลัมน์ที่ถูกทำให้เป็นมาตรฐานจะมีค่าที่ถูกต้อง

ข้างต้นไม่ใช่รายการที่สมบูรณ์ แต่คุณควรเริ่มต้น


ขอบคุณสำหรับรายละเอียดในคำตอบและคำแนะนำในการพัฒนาแบบทดสอบดูเหมือนจะเป็นจุดเริ่มต้นที่ดี ขอบคุณสำหรับความช่วยเหลือของคุณ.
Kristen D.

KristenD @Songo ฉันขอขอบคุณข้อเสนอแนะ
NoChance

1

ฉันคิดว่าคุณกำลังใกล้เข้ามาในทางที่ผิด

ฐานข้อมูลใด ๆ ที่ฉันรู้จักตรวจสอบข้อมูลก่อนที่จะแทรกลงในตาราง - มันตรวจสอบความถูกต้องกับความหมายของแต่ละคอลัมน์ คุณไม่สามารถป้อนสตริงอักขระ 80 ตัวในคอลัมน์ SMALLINT (3) - ฐานข้อมูลจะล้มเหลวและพยายามแจ้งให้คุณทราบว่าเกิดข้อผิดพลาด คุณไม่จำเป็นต้องทดสอบด้วยตัวเองโดยการแทรกข้อมูลแล้วดึงข้อมูล

สิ่งที่คุณต้องการมีคือกฎการตรวจสอบ / กรองข้อมูลก่อนที่จะถูกส่งไปยังฐานข้อมูล

  • ตรวจสอบให้แน่ใจว่าข้อมูลตรงกับประเภทและช่วงที่ยอมรับสำหรับแต่ละคอลัมน์และกรองเนื้อหาที่ไม่ต้องการ
  • ให้แน่ใจว่าได้หลบหนีออกมาอย่างถูกต้องเพื่อหลีกเลี่ยงข้อผิดพลาด (และการฉีด SQL ที่เป็นไปได้หากคุณมีส่วนต่อประสานสาธารณะ)

กฎการตรวจสอบ / กรองเหล่านั้นควรทำงานกับข้อมูลในแอปพลิเคชันจริงของคุณ จากนั้นคุณสามารถตั้งค่าการทดสอบเพื่อให้แน่ใจว่าถูกต้องโดยป้อนข้อมูลที่ถูกต้องและไม่ถูกต้องเพื่อให้แน่ใจว่าผ่านหรือไม่ผ่านการตรวจสอบความถูกต้อง

เท่าที่การออกแบบฐานข้อมูลดำเนินไปคุณจะไม่สามารถตรวจสอบได้จริง ๆ ด้วยการทดสอบ - เนื่องจากการออกแบบจำนวนมากจะใช้ได้แม้ว่าจะไม่เหมาะ (และคำจำกัดความของการเปลี่ยนแปลงในอุดมคติระหว่างคนต่างคน) การออกแบบฐานข้อมูลที่เหมาะสมมาพร้อมกับประสบการณ์และความรู้ไม่ใช่การทดสอบอัตโนมัติ


ฉันเห็นว่าคุณมาจากไหนและตั้งใจอย่างเต็มที่ในการสร้างและทดสอบตัวกรองที่ตรวจสอบความถูกต้องของข้อมูลก่อนที่มันจะกระทบฐานข้อมูล แต่ในคำถามนี้ความตั้งใจหลักของฉันคือการลองตรวจสอบการออกแบบของฐานข้อมูล ใช้มัน) และตรวจสอบว่าสิ่งที่จริง ๆ แล้วมีการทำงานตามที่ตั้งใจไว้ (ตัวอย่างเช่นการทำให้แน่ใจว่าข้อ จำกัด ของคีย์ต่างประเทศไม่ได้หักตามที่ @EmmadKareem พูดถึงในคำตอบของเขาขอบคุณสำหรับการตรวจสอบข้อมูล ส่วนหนึ่งของแอปพลิเคชันใด ๆ ที่ใช้ฐานข้อมูล
Kristen D.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.