ในฐานะ System Architect การรับประกันคุณภาพ (Quality Assurance) ของระบบฐานข้อมูลถือเป็นรากฐานสำคัญของความสำเร็จทางธุรกิจ ไม่ว่าจะเป็นการจัดการข้อมูลลูกค้า ระบบการเงิน หรือ Inventory การทดสอบระบบด้วยมือ (Manual Testing) จึงไม่ใช่แค่การกดปุ่ม แต่คือการใช้ชุดกลยุทธ์เชิงลึกเพื่อค้นหาช่องโหว่และข้อบกพร่องที่อาจเกิดขึ้นในโค้ดหรือตรรกะของฐานข้อมูล
1. การจำแนกมุมมอง: Black-box vs. White-box Testing
การทดสอบระบบฐานข้อมูลที่ซับซ้อนจำเป็นต้องมองจากหลายมุมมอง:
Black-box Testing (มุมมองผู้ใช้งาน)
เทคนิคนี้มุ่งเน้นที่การตรวจสอบฟังก์ชันการทำงาน (Functionality) จากภายนอก โดยไม่จำเป็นต้องรู้โครงสร้างโค้ดภายใน (SQL Query) เราจะทดสอบว่าเมื่อป้อนข้อมูลที่ถูกต้อง (Valid Input) หรือข้อมูลที่ไม่ถูกต้อง (Invalid Input) ระบบจะตอบสนองตามที่กำหนดหรือไม่
ตัวอย่างใน PostgreSQL: สมมติเรามีฟังก์ชัน `calculate_tax(amount)` เราจะทดสอบโดยการเรียกใช้ฟังก์ชันด้วยค่าต่างๆ โดยไม่สนใจว่าภายในฟังก์ชันใช้สูตรอะไร
SQL
-- Black-box Test: ตรวจสอบการคำนวณภาษีด้วยยอดเงินที่แตกต่างกัน<br>SELECT calculate_tax(100.00); -- ควรได้ผลลัพธ์ที่ถูกต้อง<br>SELECT calculate_tax(-50.00); -- ควรเกิด Error หรือจัดการค่าลบได้
White-box Testing (มุมมองนักพัฒนา)
เทคนิคนี้ต้องอาศัยความเข้าใจในโครงสร้างโค้ด (SQL Logic) อย่างลึกซึ้ง เพื่อตรวจสอบทุกเส้นทาง (Path Coverage) ของตรรกะทางธุรกิจ เช่น การตรวจสอบว่าทุกเงื่อนไข `CASE WHEN` หรือทุก Branch ของ Transaction ถูกเรียกใช้หรือไม่
SQL
-- White-box Test: ตรวจสอบทุก Path ของการอัปเดตสถานะสินค้า<br>UPDATE products SET status = CASE<br> WHEN quantity < 10 THEN 'LOW_STOCK'<br> WHEN quantity = 0 THEN 'OUT_OF_STOCK'<br> ELSE 'IN_STOCK'<br>END WHERE product_id = 1;
2. เทคนิคการออกแบบกรณีทดสอบขั้นสูง
เมื่อทราบมุมมองแล้ว เราต้องใช้เทคนิคเหล่านี้ในการออกแบบ Test Case ให้ครอบคลุม:
Equivalence Partitioning (EP)
หลักการคือการแบ่งชุดข้อมูลอินพุตขนาดใหญ่ให้เป็นกลุ่มๆ (Partitions) ที่คาดว่าจะทำงานเหมือนกัน โดยเราไม่จำเป็นต้องทดสอบทุกค่า แต่เลือกค่าตัวแทน (Representative Value) จากแต่ละกลุ่มก็เพียงพอแล้ว
ตัวอย่างใน PostgreSQL: หากเรามีคอลัมน์ `discount_rate` ที่รับค่าได้ 0 ถึง 100% เราจะแบ่งเป็น 3 กลุ่ม (Partition): 1. ค่าที่ถูกต้อง (0-100) 2. ค่าติดลบ (< 0) 3. ค่าเกิน ( > 100)
SQL
-- EP Test: ทดสอบค่าตัวแทนจากแต่ละ Partition<br>SELECT * FROM orders WHERE discount_rate = 0.10; -- Valid<br>SELECT * FROM orders WHERE discount_rate = -0.05; -- Invalid<br>SELECT * FROM orders WHERE discount_rate = 1.5; -- Invalid
Boundary Value Analysis (BVA)
เทคนิคนี้เน้นการทดสอบที่ขอบเขต (Boundary) ของแต่ละ Partition เนื่องจากข้อผิดพลาดมักเกิดขึ้นที่จุดเปลี่ยนผ่าน (Edge Cases) เช่น การทดสอบอายุที่กำหนดให้ 18 ถึง 65 ปี เราต้องทดสอบค่า 17, 18, 65, และ 66
ตัวอย่างใน PostgreSQL: การตรวจสอบช่วงอายุที่ต้องอยู่ระหว่าง 18 ถึง 65 ปี
SQL
-- BVA Test: ตรวจสอบขอบเขตอายุ (18-65)<br>SELECT * FROM users WHERE age = 17; -- Boundary Below<br>SELECT * FROM users WHERE age = 18; -- Boundary Start<br>SELECT * FROM users WHERE age = 65; -- Boundary End<br>SELECT * FROM users WHERE age = 66; -- Boundary Above
บทสรุป
การทำ Manual Testing ที่มีประสิทธิภาพในระบบ PostgreSQL ไม่ได้อาศัยเพียงแค่ความพยายาม แต่ต้องอาศัยการประยุกต์ใช้กลยุทธ์อย่าง Black-box และ White-box ควบคู่ไปกับการออกแบบ Test Case ด้วย EP และ BVA การทำเช่นนี้จะช่วยให้มั่นใจได้ว่าระบบฐานข้อมูลของเรามีความแข็งแกร่ง เชื่อถือได้ และพร้อมรองรับการขยายตัวของธุรกิจได้อย่างสมบูรณ์