วัน: 4 กันยายน 2020

การออกแบบและวางแผนการทดสอบ (Test Plan, Test Case, Test Scenario, Test Data Design, Defect Lifecycle)การออกแบบและวางแผนการทดสอบ (Test Plan, Test Case, Test Scenario, Test Data Design, Defect Lifecycle)

ในโลกของการพัฒนาซอฟต์แวร์ที่ขับเคลื่อนด้วยข้อมูล (Data-Driven Development) ความน่าเชื่อถือและความสมบูรณ์ของฐานข้อมูลคือหัวใจสำคัญ การทำงานกับระบบที่ใช้ PostgreSQL ซึ่งเป็นระบบฐานข้อมูลที่ทรงพลัง จำเป็นต้องมีกระบวนการประกันคุณภาพ (QA) ที่เป็นระบบ เพื่อให้มั่นใจว่าทุกฟังก์ชันและทุก Query ทำงานได้อย่างถูกต้องตามข้อกำหนด

การออกแบบการทดสอบที่ดีไม่ได้เป็นเพียงการรัน Query จำนวนมาก แต่เป็นการสร้างแผนงานที่เชื่อมโยงกันอย่างเป็นลำดับชั้น ตั้งแต่การกำหนดขอบเขตภาพรวมไปจนถึงการตรวจสอบข้อมูลแต่ละแถว

โครงสร้างการวางแผนการทดสอบ (The Testing Hierarchy)

การทำความเข้าใจความสัมพันธ์ระหว่างองค์ประกอบเหล่านี้เป็นสิ่งสำคัญสำหรับ Senior Architect:

  1. Test Plan (แผนแม่บท): กำหนดขอบเขต (Scope), วัตถุประสงค์, และทรัพยากรทั้งหมดของการทดสอบ เช่น แผนนี้กำหนดให้ทดสอบฟังก์ชันการแยกสตริง (String Splitting) ใน PostgreSQL และต้องครอบคลุมทั้งกรณีข้อมูลปกติและกรณีข้อมูลผิดรูปแบบ
  2. Test Scenario (สถานการณ์): คือภาพรวมของการใช้งานที่ต้องการทดสอบ เช่น “ระบบต้องสามารถแยกรายการสินค้าที่คั่นด้วยเครื่องหมายจุลภาค (comma) ได้อย่างถูกต้อง”
  3. Test Case (กรณีทดสอบ): คือขั้นตอนที่ละเอียดที่สุดและสามารถนำไปปฏิบัติได้จริง โดยระบุ Input, Action, และ Expected Result อย่างชัดเจน
  4. Test Data (ข้อมูลทดสอบ): คือชุดข้อมูลตัวอย่างที่ใช้ในการรัน Test Case นั้นๆ เช่น ข้อมูล ‘apple,banana,orange’

การจัดการข้อบกพร่อง (Defect Lifecycle) ในบริบทของ PostgreSQL

เมื่อการทดสอบเสร็จสิ้น หากพบความผิดปกติ (Defect) จะต้องผ่านวงจรชีวิตที่ชัดเจน:

  • Discovery & Reporting: นักทดสอบค้นพบว่าฟังก์ชัน `split_string` ให้ผลลัพธ์เป็น NULL เมื่อเจอสตริงว่างเปล่า (Empty String) และบันทึกรายงานอย่างละเอียดพร้อมโค้ดตัวอย่างที่ทำให้เกิดบั๊ก
  • Triage & Prioritization: ทีมวิเคราะห์จัดระดับความรุนแรง (Severity) ว่าเป็น Critical Bug เพราะส่งผลต่อการทำงานหลัก
  • Fix & Verification: นักพัฒนากำหนดแก้ไขโค้ด (เช่น การเพิ่มเงื่อนไข `WHERE` ใน Stored Procedure) และนักทดสอบทำการทดสอบซ้ำ (Retesting) เพื่อยืนยันว่าบั๊กได้รับการแก้ไขอย่างสมบูรณ์

ตัวอย่างการทดสอบด้วย PostgreSQL (Technical Example)

สมมติว่าเราต้องการทดสอบฟังก์ชันที่รับค่าสตริงที่คั่นด้วยเครื่องหมายจุลภาค และแยกค่าเหล่านั้นออกเป็นแถวๆ (Row-by-Row) ใน PostgreSQL

Test Scenario: การแยกรายการสินค้าจากสตริงที่คั่นด้วยจุลภาค

Test Data: ‘apple,banana,orange’

Test Case: รันคำสั่ง `split_string` และตรวจสอบจำนวนแถวที่ได้

SQL

-- Test Case 1: ข้อมูลปกติ (Expected: 3 rows) 
SELECT split_string('apple,banana,orange', ',') AS result; 

-- Test Case 2: ข้อมูลที่มีค่าว่าง (Expected: 2 rows) 
SELECT split_string('grape,,kiwi', ',') AS result; 

-- Test Case 3: ข้อมูลที่ไม่มีตัวคั่น (Expected: 1 row) 
SELECT split_string('single_item', ',') AS result;

บทสรุป

การออกแบบการทดสอบที่ครอบคลุมสำหรับ PostgreSQL ต้องอาศัยความเข้าใจในลำดับชั้นของ Test Plan, Scenario, Case และ Data อย่างลึกซึ้ง การดำเนินการอย่างเป็นระบบตั้งแต่การวางแผนจนถึงการจัดการ Defect Lifecycle ไม่เพียงแต่ช่วยลดข้อผิดพลาด แต่ยังช่วยสร้างความมั่นใจในคุณภาพของระบบฐานข้อมูลให้เป็นไปตามมาตรฐานระดับสถาปนิกชั้นนำ (Senior Architect Standard) เสมอ