Section 02 · Module 04 · Lesson 01 · ~15–20 นาที

Decision Table Testing

เมื่อ business rules ซับซ้อนเกินกว่าจะจำได้ — Decision Table ช่วยให้คุณเห็นทุก combination ของเงื่อนไขและผลลัพธ์อย่างเป็นระบบ

เวลาเรียน: 15–20 นาที ต้องรู้มาก่อน: Module 03 ทั้งหมด (EP & BVA) รูปแบบ: อ่าน + แบบฝึกสั้นๆ

จบบทนี้แล้วคุณจะ...

  • อธิบายได้ว่า Decision Table Testing คืออะไรและใช้เมื่อไร
  • สร้าง decision table จาก business rules ได้
  • ลดจำนวน rules ด้วยการ collapse rules ที่ซ้ำกัน
  • นำ decision table ไปแปลงเป็น test cases ได้
1 · เมื่อ EP + BVA ไม่พอ

ปัญหาของ "หลาย input ที่มีผลต่อกัน"

EP และ BVA เก่งมากเมื่อมองทีละ input field แต่ในชีวิตจริง ผลลัพธ์ของระบบมักขึ้นอยู่กับ "การผสมกัน" ของหลายเงื่อนไข

ตัวอย่าง: ระบบอนุมัติสินเชื่อ

  • ถ้ารายได้สูงกว่า 30,000 และ ไม่มีหนี้ค้าง → อนุมัติ
  • ถ้ารายได้สูงกว่า 30,000 แต่ มีหนี้ค้าง → อนุมัติแบบมีเงื่อนไข
  • ถ้ารายได้ต่ำกว่า 30,000 และ ไม่มีหนี้ค้าง → ส่งให้ผู้จัดการพิจารณา
  • ถ้ารายได้ต่ำกว่า 30,000 และ มีหนี้ค้าง → ปฏิเสธ

มี 2 เงื่อนไข (รายได้, หนี้) ที่ "ผสมกัน" ให้ผลลัพธ์ต่างกัน 4 แบบ — ถ้ามี 3-4 เงื่อนไข จะซับซ้อนขึ้นอีกมาก EP + BVA ไม่ช่วยเรื่อง combination

2 · Decision Table คืออะไร

ตารางที่แสดง "ทุก combination" ของเงื่อนไขและผลลัพธ์

Decision Table มี 4 ส่วน:

Rule 1 Rule 2 Rule 3 Rule 4
Conditions
รายได้ > 30,000 Y Y N N
ไม่มีหนี้ค้าง Y N Y N
Actions
ผลลัพธ์ อนุมัติ อนุมัติมีเงื่อนไข ส่งผู้จัดการ ปฏิเสธ

Conditions: เงื่อนไขที่กำหนดผลลัพธ์ (input) Actions: ผลลัพธ์ที่เกิดขึ้น (output) Rules: แต่ละ column คือ 1 combination ของเงื่อนไข

จำนวน rules = 2^n (เมื่อ n = จำนวนเงื่อนไขที่เป็น Y/N)

  • 2 เงื่อนไข = 4 rules
  • 3 เงื่อนไข = 8 rules
  • 4 เงื่อนไข = 16 rules
3 · สร้าง Decision Table ทีละขั้น

ตัวอย่าง: ระบบส่วนลดร้านค้า

Business Rules:

  • สมาชิก VIP ที่ซื้อครบ 1,000 บาท → ลด 20%
  • สมาชิก VIP ที่ซื้อไม่ครบ 1,000 บาท → ลด 10%
  • สมาชิกทั่วไปที่ซื้อครบ 1,000 บาท → ลด 5%
  • สมาชิกทั่วไปที่ซื้อไม่ครบ 1,000 บาท → ไม่มีส่วนลด
  • ลูกค้าที่ไม่ได้เป็นสมาชิก → ไม่มีส่วนลดในทุกกรณี

ขั้นตอนที่ 1: ระบุ Conditions

  • C1: เป็นสมาชิกหรือไม่?
  • C2: เป็น VIP หรือไม่? (ถ้าเป็นสมาชิก)
  • C3: ซื้อครบ 1,000 บาทหรือไม่?

ขั้นตอนที่ 2: ระบุ Actions

  • A1: ลด 20%
  • A2: ลด 10%
  • A3: ลด 5%
  • A4: ไม่มีส่วนลด

ขั้นตอนที่ 3: สร้างตาราง

R1 R2 R3 R4 R5 R6
C1: เป็นสมาชิก Y Y Y Y N N
C2: เป็น VIP Y Y N N - -
C3: ซื้อครบ 1,000 Y N Y N Y N
Actions
ส่วนลด 20% 10% 5% 0% 0% 0%

ขีด "-" หมายความว่า เงื่อนไขนั้นไม่มีผลต่อ action (เพราะไม่ได้เป็นสมาชิก จะ VIP หรือไม่ก็ไม่มีผล)

4 · Collapsing Rules

ลดความซ้ำซ้อน

จาก decision table ด้านบน R5 และ R6 ให้ผลลัพธ์เหมือนกัน (ไม่มีส่วนลด) ไม่ว่าจะซื้อครบ 1,000 หรือไม่ก็ตาม เราสามารถ "collapse" (ยุบรวม) ได้:

R1 R2 R3 R4 R5
C1: เป็นสมาชิก Y Y Y Y N
C2: เป็น VIP Y Y N N -
C3: ซื้อครบ 1,000 Y N Y N -
ส่วนลด 20% 10% 5% 0% 0%

จาก 6 rules เหลือ 5 rules — ในระบบจริงที่มีเงื่อนไขเยอะ การ collapse ช่วยลดจำนวน test cases ได้มาก

กฎ: ถ้า 2 rules ต่างกันแค่ 1 condition แต่ให้ action เหมือนกัน → collapse ได้ (ใส่ "-" ที่ condition นั้น)

5 · จาก Decision Table สู่ Test Cases

แต่ละ Rule = 1 Test Case (อย่างน้อย)

Rule Test Case Input Expected
R1 TC-DT-001 สมาชิก VIP, ซื้อ 1,500 บาท ลด 20% → จ่าย 1,200 บาท
R2 TC-DT-002 สมาชิก VIP, ซื้อ 800 บาท ลด 10% → จ่าย 720 บาท
R3 TC-DT-003 สมาชิกทั่วไป, ซื้อ 1,200 บาท ลด 5% → จ่าย 1,140 บาท
R4 TC-DT-004 สมาชิกทั่วไป, ซื้อ 500 บาท ไม่ลด → จ่าย 500 บาท
R5 TC-DT-005 ไม่เป็นสมาชิก, ซื้อ 2,000 บาท ไม่ลด → จ่าย 2,000 บาท

สังเกตว่า decision table ทำให้เราเห็นชัดว่าต้องเทสต์ "combination" ไหนบ้าง — ไม่มีอะไรตกหล่น

Practice

แบบฝึก: สร้าง Decision Table จาก Discount Policy

Business Rules สำหรับระบบจัดส่ง:

  • สินค้าราคา >= 2,000 บาท และ เป็นสมาชิก → ส่งฟรี
  • สินค้าราคา >= 2,000 บาท แต่ ไม่เป็นสมาชิก → ค่าส่ง 50 บาท
  • สินค้าราคา < 2,000 บาท และ เป็นสมาชิก → ค่าส่ง 30 บาท
  • สินค้าราคา < 2,000 บาท และ ไม่เป็นสมาชิก → ค่าส่ง 80 บาท
  • น้ำหนักเกิน 20 kg จะมีค่าส่งเพิ่ม 100 บาท ในทุกกรณี (ยกเว้นส่งฟรี → ค่าส่ง 100 บาท)
  1. ระบุ conditions และ actions ทั้งหมด

    ดูคำตอบแนะนำ

    Conditions:

    • C1: สินค้าราคา >= 2,000 บาท? (Y/N)
    • C2: เป็นสมาชิก? (Y/N)
    • C3: น้ำหนักเกิน 20 kg? (Y/N)

    Actions:

    • ค่าจัดส่ง: ฟรี, 30 บาท, 50 บาท, 80 บาท
    • ค่าน้ำหนักเพิ่ม: 0 หรือ 100 บาท
  2. สร้าง decision table ที่สมบูรณ์

    ดูคำตอบแนะนำ
    R1 R2 R3 R4 R5 R6 R7 R8
    C1: ราคา >= 2,000 Y Y Y Y N N N N
    C2: เป็นสมาชิก Y Y N N Y Y N N
    C3: น้ำหนัก > 20kg Y N Y N Y N Y N
    ค่าส่ง 100 0 150 50 130 30 180 80

    คำอธิบาย:

    • R1: ส่งฟรี + น้ำหนักเกิน = 0 + 100 = 100 บาท
    • R2: ส่งฟรี + น้ำหนักปกติ = 0 บาท
    • R3: 50 + 100 = 150 บาท
    • R4: 50 + 0 = 50 บาท
    • R5: 30 + 100 = 130 บาท
    • R6: 30 + 0 = 30 บาท
    • R7: 80 + 100 = 180 บาท
    • R8: 80 + 0 = 80 บาท
  3. มี rules ไหนที่ collapse ได้ไหม? อธิบาย

    ดูคำตอบแนะนำ

    ในกรณีนี้ ไม่สามารถ collapse ได้ เพราะทุก rule ให้ค่าจัดส่งต่างกัน ไม่มี 2 rules ที่ต่างกันแค่ 1 condition แล้วให้ผลลัพธ์เหมือนกัน

    ถ้า business rule เปลี่ยนเป็น "น้ำหนักเกิน 20 kg เสียค่าเพิ่ม 100 บาทเหมือนกันทุกกรณี ไม่ยกเว้น" → R1 จะกลายเป็น 100 บาทเหมือนเดิม ก็ยังไม่ collapse ได้

    การ collapse ได้หรือไม่ขึ้นอยู่กับ business rules — ไม่ใช่ทุก table จะ collapse ได้

สิ่งที่ต้องเอาติดตัวไปจากบทนี้

  • Decision Table เหมาะกับ business rules ที่มี หลายเงื่อนไขผสมกัน
  • ตารางมี 4 ส่วน: Conditions, Actions, Rules (combinations), และ "-" (don't care)
  • จำนวน rules = 2^n เมื่อ n = จำนวนเงื่อนไข Y/N
  • Collapse rules เพื่อลดจำนวน test cases — ถ้า 2 rules ต่างกันแค่ 1 condition แต่ action เหมือนกัน
  • แต่ละ rule แปลงเป็น อย่างน้อย 1 test case — ไม่มี combination ที่ตกหล่น