สร้าง Test Scenario จาก Requirement
เมื่อแตก requirement ได้แล้ว ขั้นต่อไปคือการสร้าง test scenarios ที่ครอบคลุมทุกมุมมอง — ทั้ง happy path, sad path, และ edge cases
จบบทนี้แล้วคุณจะ...
- อธิบายความแตกต่างระหว่าง test scenario กับ test case ได้
- สร้าง positive scenarios (happy path) จาก requirement ได้
- สร้าง negative scenarios และ edge cases ได้
- ใช้ scenario template ในการจัดระเบียบ scenarios
สองคำที่คนมักสับสน
หลายคนใช้คำว่า "test scenario" กับ "test case" สลับกันราวกับว่ามันคือสิ่งเดียวกัน แต่จริง ๆ แล้วมันอยู่คนละระดับ:
Test Scenario คือ "สถานการณ์" ระดับสูงที่ต้องการทดสอบ — เขียนเป็นประโยคสั้น ๆ หนึ่งบรรทัด:
- "ผู้ใช้ login ด้วย email และ password ที่ถูกต้อง"
- "ผู้ใช้ login ด้วย password ผิด 5 ครั้งติดต่อกัน"
- "ผู้ใช้ login ด้วย email ที่ไม่มีในระบบ"
Test Case คือ "ขั้นตอนละเอียด" ที่บอกว่าต้องทำอะไร ทีละ step ในแต่ละ scenario:
- เปิดหน้า login
- กรอก email: [email protected]
- กรอก password: P@ssw0rd123
- กด "เข้าสู่ระบบ"
- Expected: ระบบพาไปหน้า dashboard
| Test Scenario | Test Case | |
|---|---|---|
| ระดับ | สูง (What to test) | ละเอียด (How to test) |
| จำนวน | 1 scenario | อาจมีหลาย test cases |
| เขียนเมื่อไร | ตอนวิเคราะห์ requirement | ตอนเตรียม test execution |
| ใครใช้ | QA Lead, ทีมทั้งหมด | Tester ที่ลงมือเทสต์ |
ในบทนี้เราจะโฟกัสที่การสร้าง test scenarios ก่อน — ส่วน test case จะเรียนอย่างละเอียดในบทถัดไป
เริ่มจากสิ่งที่ "ควรจะเป็น"
Happy path คือเส้นทางที่ผู้ใช้ทำทุกอย่างถูกต้อง ระบบทำงานได้ตามที่ออกแบบไว้ ไม่มี error ใด ๆ เกิดขึ้น
สำหรับ requirement: "ผู้ใช้สามารถลงทะเบียนได้โดยกรอก ชื่อ, email, password"
Positive scenarios:
- TS-001: ผู้ใช้กรอกข้อมูลถูกต้องครบทุกช่อง → ลงทะเบียนสำเร็จ
- TS-002: ผู้ใช้กรอก email ที่มีรูปแบบถูกต้อง → ระบบรับค่าได้
- TS-003: ผู้ใช้กรอก password ที่ตรงตามเงื่อนไขความแข็งแรง → ระบบรับค่าได้
หลักการ: เขียน happy path ก่อนเสมอ เพราะถ้า happy path ยังไม่ผ่าน ก็ไม่ต้องไปเทสต์อย่างอื่น
เมื่อผู้ใช้ทำสิ่งที่ "ไม่ควรจะทำ"
Negative scenarios คือสถานการณ์ที่ผู้ใช้กรอกข้อมูลผิด ทำอะไรไม่ถูกลำดับ หรือพยายามทำสิ่งที่ไม่ได้รับอนุญาต — ระบบต้องจัดการได้อย่างเหมาะสม
Negative scenarios สำหรับ requirement เดียวกัน:
- TS-004: ผู้ใช้ไม่กรอก email → แสดง error "กรุณากรอก email"
- TS-005: ผู้ใช้กรอก email ที่ไม่มี @ → แสดง error "รูปแบบ email ไม่ถูกต้อง"
- TS-006: ผู้ใช้กรอก email ที่มีอยู่ในระบบแล้ว → แสดง error "email นี้ถูกใช้แล้ว"
- TS-007: ผู้ใช้กรอก password สั้นเกินไป → แสดง error "password ต้องมีอย่างน้อย 8 ตัวอักษร"
- TS-008: ผู้ใช้ไม่กรอกข้อมูลเลยแล้วกด submit → แสดง error ทุกช่อง
เรื่องเล่า: ทีม QA ของบริษัท fintech แห่งหนึ่งเทสต์แค่ happy path — โอนเงินสำเร็จ ยอดถูกต้อง ทุกอย่างดี แต่ไม่เคยเทสต์ว่า "ถ้าโอนเงินเกินยอดคงเหลือ" ระบบจะทำอย่างไร ผลคือวันหนึ่งผู้ใช้โอนเงินเกินยอด ระบบไม่ได้ block แต่กลับหักยอดเป็นติดลบ — ซึ่งในระบบการเงินถือเป็น critical bug ระดับรุนแรง
ขอบเขตที่บั๊กชอบซ่อนตัว
Edge cases คือสถานการณ์ที่อยู่ "ตรงขอบ" ของเงื่อนไข — ไม่ใช่ค่าปกติ ไม่ใช่ค่าผิดชัด ๆ แต่เป็นค่าที่อยู่ตรงจุดเปลี่ยน
ตัวอย่าง edge cases สำหรับฟอร์มลงทะเบียน:
- TS-009: กรอกชื่อเป็นตัวอักษรตัวเดียว (เช่น "K") → ระบบรับไหม?
- TS-010: กรอกชื่อยาว 256 ตัวอักษร → ระบบรับไหม? ตัดไหม?
- TS-011: กรอก email ที่มี special characters เช่น [email protected] → ระบบรับไหม?
- TS-012: กรอก password ที่ยาว 8 ตัวพอดี (ขั้นต่ำ) → ระบบรับไหม?
- TS-013: กรอกชื่อเป็นภาษาที่มี Unicode เช่น ภาษาจีน, อาหรับ → แสดงผลถูกไหม?
- TS-014: Copy-paste password ที่มี leading/trailing spaces → ระบบตัด space ไหม?
วิธีคิดหา edge cases:
- ค่าขอบ (Boundary): ค่าต่ำสุด, สูงสุด, ต่ำกว่าต่ำสุด 1, สูงกว่าสูงสุด 1
- ค่าว่าง (Empty): string ว่าง, null, undefined
- ค่าพิเศษ (Special): Unicode, emoji, HTML tags, SQL injection strings
- เวลา (Timing): กด submit ซ้ำ, session timeout, concurrent access
จัดระเบียบ Scenarios ให้เป็นระบบ
เมื่อคุณมี scenarios จำนวนมาก ควรจัดเป็นกลุ่มด้วย template:
| Scenario ID | ประเภท | Feature | สถานการณ์ | Expected Result |
|---|---|---|---|---|
| TS-001 | Positive | Registration | กรอกข้อมูลถูกต้องครบ | ลงทะเบียนสำเร็จ, ไปหน้า welcome |
| TS-004 | Negative | Registration | ไม่กรอก email | แสดง error "กรุณากรอก email" |
| TS-009 | Edge | Registration | ชื่อ 1 ตัวอักษร | ระบบรับค่าได้ |
การจัดกลุ่มช่วยให้:
- เห็นว่า feature ไหนยังขาด scenario ประเภทไหน
- ทำ test prioritization ได้ง่าย (เทสต์ positive ก่อน, แล้ว negative, แล้ว edge)
- review กับทีมได้ง่าย — ทุกคนเห็นภาพรวม
แบบฝึก: สร้าง Test Scenarios จาก Login/Registration Requirement
Requirement:
"ระบบต้องให้ผู้ใช้สามารถ login ด้วย email และ password ได้ ถ้ากรอกผิดเกิน 5 ครั้ง ระบบจะล็อกบัญชี 30 นาที ผู้ใช้สามารถขอ reset password ผ่าน email ได้"
เขียน positive scenarios อย่างน้อย 3 ข้อ
ดูคำตอบแนะนำ
- TS-001: ผู้ใช้กรอก email และ password ที่ถูกต้อง → login สำเร็จ ไปหน้า dashboard
- TS-002: ผู้ใช้กด "ลืมรหัสผ่าน" กรอก email ที่มีในระบบ → ได้รับ email reset password
- TS-003: ผู้ใช้คลิก link reset password จาก email → ไปหน้าตั้ง password ใหม่ได้
- TS-004: ผู้ใช้ตั้ง password ใหม่ที่ตรงตามเงื่อนไข → เปลี่ยนสำเร็จ login ด้วย password ใหม่ได้
เขียน negative scenarios อย่างน้อย 4 ข้อ
ดูคำตอบแนะนำ
- TS-005: ผู้ใช้กรอก password ผิด → แสดง error "email หรือ password ไม่ถูกต้อง" (ไม่บอกว่าอันไหนผิด)
- TS-006: ผู้ใช้กรอก email ที่ไม่มีในระบบ → แสดง error เดียวกัน (เพื่อความปลอดภัย)
- TS-007: ผู้ใช้กรอก password ผิด 5 ครั้งติดต่อกัน → บัญชีถูกล็อก แสดงข้อความว่าถูกล็อก 30 นาที
- TS-008: ผู้ใช้พยายาม login ขณะบัญชีถูกล็อก → แสดง error "บัญชีถูกล็อก กรุณารออีก XX นาที"
- TS-009: ผู้ใช้กด reset password ด้วย email ที่ไม่มีในระบบ → ไม่ส่ง email แต่แสดงข้อความเดียวกัน (security)
เขียน edge cases อย่างน้อย 3 ข้อ
ดูคำตอบแนะนำ
- TS-010: ผู้ใช้กรอก password ผิด 4 ครั้ง แล้วกรอกถูกในครั้งที่ 5 → login สำเร็จ, ตัวนับ reset
- TS-011: บัญชีถูกล็อกแล้ว ผู้ใช้ขอ reset password → ควรทำได้ (reset password ไม่ควรถูก block)
- TS-012: ผู้ใช้ใช้ reset password link หลังผ่านไป 24 ชั่วโมง → link หมดอายุ ใช้ไม่ได้
- TS-013: ผู้ใช้เปิดหน้า login พร้อมกัน 2 tab แล้ว login ทั้ง 2 tab → ระบบจัดการ session อย่างไร?
- TS-014: ผู้ใช้กรอก email ด้วยตัวพิมพ์ใหญ่ ([email protected]) → ควร login ได้เหมือนกับ [email protected]
สิ่งที่ต้องเอาติดตัวไปจากบทนี้
- Test Scenario คือ "อะไรที่จะเทสต์" (What) ส่วน Test Case คือ "เทสต์อย่างไร" (How)
- เริ่มจาก positive scenarios (happy path) เสมอ — ถ้า happy path ไม่ผ่าน ไม่ต้องไปต่อ
- Negative scenarios คือหัวใจของ QA — เพราะผู้ใช้จริงจะทำสิ่งที่คุณคาดไม่ถึงเสมอ
- Edge cases คือจุดที่บั๊กซ่อนตัว — ค่าขอบ, ค่าว่าง, ค่าพิเศษ, ปัญหาเรื่องเวลา
- ใช้ scenario template จัดระเบียบเพื่อให้เห็นช่องว่างและทำ prioritization ได้ง่าย