อ่าน Requirement ด้วยสายตาของนักทดสอบ
คนทั่วไปอ่าน requirement เพื่อเข้าใจว่า feature นี้คืออะไร แต่ QA ที่เก่งอ่านเพื่อหา จุดที่ทีมอาจเข้าใจไม่ตรงกัน, สิ่งที่ยังไม่ได้ระบุ, และ ความเสี่ยงที่อาจกลายเป็น defect ก่อนเริ่มลงมือพัฒนา
จบบทนี้แล้วคุณจะ...
- อธิบายได้ว่า "อ่าน requirement เพื่อทำงาน" ต่างจาก "อ่าน requirement เพื่อทดสอบ" อย่างไร
- ใช้กรอบคิดง่าย ๆ เพื่อแยก actor, action, data, business rule และ exception ออกจาก requirement
- หา ambiguity, missing details, edge cases และ assumptions ได้เป็นระบบมากขึ้น
- เปลี่ยน requirement ที่คลุมเครือให้กลายเป็นคำถาม clarification ที่ช่วยทีมตัดสินใจได้
- เห็นตัวอย่างหลายแบบว่าปัญหา requirement ซ่อนอยู่ได้ทั้งใน flow ปกติ, validation, security, timing และ business rules
ไม่ได้อ่านแค่ว่า "ต้องทำอะไร" แต่ต้องอ่านว่า "อะไรอาจพังได้บ้าง"
เวลา PM, BA, developer และ QA อ่าน requirement เดียวกัน คนแต่ละบทบาทมักโฟกัสไม่เหมือนกัน:
| บทบาท | มักอ่านเพื่อหาอะไร | ตัวอย่างคำถามในหัว |
|---|---|---|
| PM / BA | feature นี้ตอบโจทย์ธุรกิจไหม | "ช่วยให้ conversion ดีขึ้นไหม?" |
| Developer | จะออกแบบและ implement ยังไง | "ต้องมี API อะไร? schema แบบไหน?" |
| Designer | ผู้ใช้จะเห็นหน้าตาและ flow แบบไหน | "ต้องมี state ไหนบ้าง?" |
| QA | มีจุดไหนที่ตีความไม่ตรงกันแล้วจะกลายเป็น defect | "ถ้าผู้ใช้ทำไม่ตาม flow ปกติ ระบบจะทำยังไง?" |
QA ไม่ได้อ่านเพื่อต้านทีม หรือเพื่อจับผิดคนเขียน requirement แต่กำลังช่วยทีมตอบคำถามสำคัญข้อหนึ่ง:
"ถ้าเราเริ่มทำจาก requirement นี้เลย ทุกคนในทีมจะสร้างสิ่งเดียวกันจริงไหม?"
ถ้าคำตอบคือ "อาจไม่" requirement นั้นยังไม่พร้อมพอ และยิ่งรีบเริ่มทำ โอกาสเกิด defect ก็ยิ่งสูง
ตัวอย่างสั้น ๆ
Requirement:
"ระบบต้องให้ผู้ใช้เปลี่ยนรหัสผ่านได้อย่างปลอดภัย"
หลายคนอาจพอเข้าใจภาพรวมแล้ว แต่ในมุม QA ประโยคนี้ยังมีคำถามอีกเยอะ:
- "ผู้ใช้" หมายถึง user ที่ login อยู่แล้วเท่านั้น หรือรวมคนที่ลืมรหัสผ่านด้วย?
- "เปลี่ยน" ทำจากหน้า profile หรือผ่านลิงก์ reset ทางอีเมล?
- "ปลอดภัย" หมายถึงอะไรบ้าง: ต้องกรอกรหัสเดิม, มี OTP, ล็อก session อื่น, บังคับความยาวขั้นต่ำ, จำกัดจำนวนครั้ง?
- ถ้าเปลี่ยนสำเร็จแล้ว session เดิมยังใช้ต่อได้ไหม?
- ถ้าใส่รหัสเดิมผิด 5 ครั้งจะเกิดอะไรขึ้น?
นี่คือหัวใจของบทนี้: requirement ที่ "ฟังดูเข้าใจ" อาจยัง "ทดสอบไม่ได้"
ใช้กรอบคิด 6 ช่องก่อนเสมอ
เวลาคุณเจอ requirement ใหม่ ลองอย่ารีบคิด test case ทันที ให้แยก requirement เป็น 6 ช่องนี้ก่อน:
| ช่องที่ต้องหา | คำถามง่าย ๆ | ตัวอย่างจาก requirement "ผู้ใช้สมัครสมาชิกด้วยอีเมลได้" |
|---|---|---|
| Actor | ใครเป็นคนทำ? | ผู้ใช้ใหม่ |
| Action | เขาทำอะไร? | กรอกข้อมูลและกดสมัคร |
| Data | มีข้อมูลอะไรเกี่ยวข้อง? | email, password, ชื่อ |
| Rule | มีกฎธุรกิจอะไรบ้าง? | email ต้องไม่ซ้ำ, password ต้องผ่าน policy |
| Outcome | ถ้าสำเร็จแล้วเกิดอะไร? | สร้าง account, ส่งอีเมลยืนยัน |
| Exception | ถ้าไม่สำเร็จล่ะ? | format ผิด, email ซ้ำ, อีเมลส่งไม่ออก |
กรอบนี้ช่วยมาก เพราะ requirement หลายอันมีแค่ actor กับ action แต่ขาด rule, outcome หรือ exception ไปเกือบหมด
ถ้ายังหาช่องไหนไม่เจอ นั่นคือสัญญาณ
ตัวอย่าง:
"ระบบให้ลูกค้าใช้คูปองส่วนลดตอน checkout ได้"
อ่านรอบแรกอาจรู้สึกว่าโอเค แต่พอแยก 6 ช่องจะเริ่มเห็นช่องว่าง:
- Actor: ลูกค้า
- Action: ใส่คูปอง
- Data: รหัสคูปอง
- Rule: ยังไม่ชัด เช่น คูปองใช้ได้กับสินค้าประเภทไหน, ใช้ซ้ำได้ไหม, ใช้ร่วมกับโปรอื่นได้ไหม
- Outcome: หักส่วนลดจากยอดรวม
- Exception: ยังไม่ชัด เช่น คูปองหมดอายุ, ใช้เกินสิทธิ์, ไม่เข้าเงื่อนไขขั้นต่ำ
ถ้าช่อง Rule กับ Exception ยังเบลอ นั่นคือจุดที่ QA ควรถามต่อ ไม่ใช่เดาแทนทีม
อ่าน requirement ให้ครบทั้งความชัด ความหาย ขอบ และสิ่งที่คนเขียนเผลอสมมติ
เวลาจะหา defect ตั้งแต่ requirement ให้มองอย่างน้อย 4 มุมนี้
| มุมที่ใช้มอง | แปลแบบง่าย | คำถามที่ควรถาม | ตัวอย่าง |
|---|---|---|---|
| Ambiguity | เขียนไว้แต่ตีความได้หลายแบบ | "ประโยคนี้มีคนเข้าใจได้มากกว่า 1 แบบไหม?" | "ส่งเร็ว" คือภายในกี่วินาที |
| Missing details | มีเรื่องสำคัญที่ไม่ได้เขียนไหม | "ถ้าจะให้ dev ทำต่อ ตอนนี้ข้อมูลพอหรือยัง?" | บอกให้ส่งอีเมล แต่ไม่บอกว่าเมื่อไร |
| Edge cases | ถ้าโลกไม่สวย ระบบจะทำยังไง | "ถ้า user ทำผิด, ทำซ้ำ, หรือข้อมูลแปลก จะเกิดอะไร?" | กดจ่ายเงินซ้ำ 2 ครั้ง |
| Assumptions | ผู้เขียนกำลังเชื่ออะไรโดยไม่พูดออกมา | "มีอะไรที่ทุกคนคิดว่าแน่อยู่แล้ว แต่จริง ๆ ยังไม่เคยตกลงกัน?" | สมมติว่าผู้ใช้มีอินเทอร์เน็ตตลอด |
วิธีจำแบบสั้น
- Ambiguity = เขียนแล้วแปลได้หลายแบบ
- Missing details = เรื่องสำคัญยังไม่ถูกเขียน
- Edge cases = เรื่องที่ไม่ใช่ happy path
- Assumptions = เรื่องที่ "น่าจะใช่" แต่ยังไม่เคยยืนยัน
ถ้าคุณใช้ 4 มุมนี้จนเป็นนิสัย requirement แทบทุกใบจะเริ่มมีคำถามผุดขึ้นมาเอง
เจอคำพวกนี้เมื่อไร ให้หยุดแล้วถามต่อ
คำบางคำไม่ได้ผิด แต่ถ้าไม่มีบริบทเพิ่ม มันทำให้ dev, QA และ stakeholder จินตนาการคนละแบบได้ง่ายมาก
| คำใน requirement | ทำไมถึงอันตราย | คำถามที่ควรถามกลับ | ตัวอย่างที่ทดสอบได้มากขึ้น |
|---|---|---|---|
| เร็ว, ทันที, เร็วที่สุด | ไม่มีตัวเลข | "ภายในกี่วินาที?" | "ระบบต้องแสดงผลภายใน 2 วินาที" |
| ใช้งานง่าย, เหมาะสม | เป็นความรู้สึก ไม่ใช่เกณฑ์ | "วัดจากอะไร?" | "ผู้ใช้ใหม่ต้องสมัครเสร็จได้ในไม่เกิน 1 นาที" |
| รองรับผู้ใช้จำนวนมาก | ไม่รู้ขนาดโหลด | "กี่คนพร้อมกัน?" | "รองรับ concurrent users 5,000 คน" |
| ปลอดภัย | security มีหลายชั้น | "ป้องกันความเสี่ยงอะไรบ้าง?" | "บังคับ MFA สำหรับ admin" |
| แจ้งเตือนที่เหมาะสม | ไม่รู้ใครได้รับ ผ่านช่องทางไหน | "แจ้งใคร เมื่อไร ผ่านอะไร?" | "ส่งอีเมลและ in-app notification ภายใน 1 นาที" |
| รองรับหลายรูปแบบ | คำว่า "หลาย" กว้างเกิน | "format อะไรบ้าง?" | "รองรับ JPG, PNG, PDF" |
| กรณีปกติ, โดยทั่วไป | ข้ามพฤติกรรมที่ไม่ปกติ | "แล้วกรณีไม่ปกติคืออะไร?" | "ถ้าเชื่อมต่อ payment gateway ไม่ได้ ให้แสดง retry" |
จาก requirement ที่คลุมเครือ ไปสู่ requirement ที่ทดสอบได้
ดูตัวอย่างนี้:
"ระบบควรโหลดหน้า dashboard ได้เร็ว"
ในสภาพนี้ QA เทสต์ไม่ได้ เพราะไม่มีเส้นแบ่งว่าช้าเท่าไรถึงถือว่าผิด แต่ถ้าปรับเป็น:
"หลัง login สำเร็จ หน้า dashboard ต้องแสดงข้อมูลหลักครบภายใน 3 วินาทีสำหรับผู้ใช้ทั่วไปบนเครือข่ายมาตรฐาน"
ประโยคหลังเริ่มทดสอบได้ เพราะมี:
- จุดเริ่มต้น: หลัง login สำเร็จ
- สิ่งที่ต้องเห็น: ข้อมูลหลักครบ
- เวลา: ภายใน 3 วินาที
- บริบท: ผู้ใช้ทั่วไปบนเครือข่ายมาตรฐาน
QA ไม่จำเป็นต้องเป็นคน rewrite requirement เองทุกครั้ง แต่ควรรู้ว่าต้องถามอะไรเพื่อทำให้ requirement ชัดขึ้นจนเทสต์ได้
อ่าน user story หนึ่งใบ แล้วค่อย ๆ ขุดให้เห็นสิ่งที่ซ่อนอยู่
ลองดูตัวอย่างนี้
User Story "ในฐานะผู้ใช้ ฉันต้องการสมัครสมาชิกด้วย email เพื่อที่จะใช้งาน feature premium ได้ ระบบควรส่งอีเมลยืนยันเมื่อสมัครสำเร็จ และเปิดใช้งาน account ให้เร็วที่สุด"
รอบที่ 1: อ่านเพื่อเข้าใจภาพรวม
สิ่งที่เรา "พอรู้" คือ:
- ผู้ใช้สมัครด้วย email
- สมัครสำเร็จแล้วมีอีเมลยืนยัน
- เป้าหมายคือเข้าใช้ feature premium
แค่นี้พอให้เริ่มคุยได้ แต่ยังไม่พอให้พัฒนาและทดสอบอย่างมั่นใจ
รอบที่ 2: แยก 6 ช่อง
| ช่อง | สิ่งที่พอรู้ | สิ่งที่ยังไม่ชัด |
|---|---|---|
| Actor | ผู้ใช้ | ผู้ใช้ใหม่เท่านั้นหรือผู้ใช้เดิมที่ upgrade ได้ด้วย? |
| Action | สมัครสมาชิกด้วย email | ต้องกรอก field อะไรบ้าง? |
| Data | password, ชื่อ, เบอร์โทร ต้องมีไหม? | |
| Rule | มีการส่งอีเมลยืนยัน | ต้อง verify ก่อนใช้งานจริงไหม? |
| Outcome | account ถูกเปิดใช้งาน | เปิดใช้งานเมื่อไรกันแน่? ตอนกดสมัครหรือตอนกดยืนยันอีเมล |
| Exception | ยังไม่เขียน | email ซ้ำ, email ส่งไม่ออก, กรอก format ผิด, ลิงก์หมดอายุ |
รอบที่ 3: ใส่สายตา 4 แบบ
Ambiguity
- "สมัครสำเร็จ" หมายถึง submit ผ่าน หรือหมายถึง verify email ผ่านแล้ว?
- "เร็วที่สุด" คือทันที, ภายใน 5 นาที, หรือภายใน SLA ที่กำหนด?
Missing details
- password policy คืออะไร?
- verification link หมดอายุเมื่อไร?
- ถ้าไม่กดลิงก์ยืนยันในเวลาที่กำหนด บัญชีจะถูกลบไหม?
Edge cases
- สมัครด้วย email เดิมซ้ำ
- กรอก email ที่มีช่องว่างต้น/ท้าย
- ใช้ plus addressing เช่น
[email protected] - กดปุ่มสมัครซ้ำสองครั้งเพราะเน็ตค้าง
- email service ล่มตอนสมัครสำเร็จ
Assumptions
- ทุกคนมี email ที่รับข้อความได้
- ผู้ใช้ยอมรอ email ยืนยัน
- ภาษาในอีเมลเหมาะกับผู้ใช้ทุกประเทศ
รอบที่ 4: แปลงเป็น clarification questions
คำถามที่ดีไม่ใช่คำถามกว้าง ๆ แบบ "ตรงนี้โอเคไหม?" แต่เป็นคำถามที่บังคับให้ทีมตัดสินใจ
ตัวอย่าง:
- Account จะถือว่า active ตั้งแต่ตอน submit ฟอร์ม หรือหลังจากกดยืนยันอีเมล?
- ถ้า email ยืนยันส่งไม่สำเร็จ ระบบจะ rollback การสร้าง account หรือสร้างไว้ก่อนแล้วให้ resend?
- ผู้ใช้สามารถ login ได้ก่อน verify email หรือไม่?
- verification link มีอายุเท่าไร และหมดอายุแล้วทำอะไรต่อได้?
- email เดิมที่เคยสมัครแต่ยังไม่ verify สามารถสมัครซ้ำได้หรือไม่?
- ถ้ากดปุ่มสมัครซ้ำเพราะเน็ตช้า ระบบต้องกัน duplicate account อย่างไร?
- password ต้องมีความยาวขั้นต่ำและความซับซ้อนระดับไหน?
แค่ story เดียว เราก็เห็นได้แล้วว่า requirement analysis ที่ดีช่วยลด defect ได้ตั้งแต่ก่อนเขียนโค้ด
requirement พังได้มากกว่าที่คิด และพังคนละแบบในแต่ละโดเมน
เพื่อให้เห็นภาพกว้าง ลองดูตัวอย่าง requirement สั้น ๆ หลายแบบ แล้วสังเกตว่าคำถามของ QA จะต่างกันตามบริบท
ตัวอย่าง A: Checkout
"ผู้ใช้สามารถใช้คูปองส่วนลดในหน้า checkout ได้"
สิ่งที่ QA ควรถาม:
- คูปองใช้กับสินค้าทุกประเภทหรือเฉพาะบางหมวด?
- ใช้ได้กี่ครั้งต่อคน?
- ใช้ร่วมกับโปรโมชันอื่นได้ไหม?
- ถ้ายอดซื้อไม่ถึงขั้นต่ำ ให้แสดงข้อความอะไร?
- ถ้าคูปองหมดอายุระหว่างที่ผู้ใช้เปิดหน้าจอค้างไว้ ระบบจะคำนวณอย่างไร?
- ถ้ากดชำระเงินซ้ำหลังใส่คูปอง จะหักส่วนลดซ้ำหรือไม่?
ตัวอย่าง B: File Upload
"ระบบรองรับการอัปโหลดไฟล์ขนาดใหญ่ และบีบอัดไฟล์ก่อนบันทึก"
สิ่งที่ QA ควรถาม:
- "ขนาดใหญ่" คือสูงสุดกี่ MB?
- รองรับ file type อะไรบ้าง?
- บีบอัดบน client หรือ server?
- หลังบีบอัด คุณภาพไฟล์ต้องเหลือประมาณเท่าไร?
- ถ้าไฟล์เสียหรือ extension ปลอม ระบบจะ reject ยังไง?
- ถ้าอัปโหลดหลายไฟล์พร้อมกัน มีกฎเรื่องจำนวนไฟล์ไหม?
ตัวอย่าง C: Search
"ระบบต้องให้ผู้ใช้ค้นหาสินค้าได้รวดเร็วและแม่นยำ"
สิ่งที่ QA ควรถาม:
- "รวดเร็ว" คือภายในกี่วินาที?
- "แม่นยำ" วัดยังไง: exact match, partial match, typo tolerance?
- ค้นหาด้วยภาษาไทยและอังกฤษได้เหมือนกันไหม?
- ตัวพิมพ์ใหญ่เล็กมีผลไหม?
- ถ้าไม่มีผลลัพธ์ ให้แสดง empty state แบบไหน?
- ถ้ามีสินค้าหมดสต็อก จะยังแสดงในผลค้นหาไหม?
ตัวอย่าง D: Notification
"เมื่อ order ถูกยกเลิก ระบบควรแจ้งเตือนที่เหมาะสม"
สิ่งที่ QA ควรถาม:
- แจ้งใคร: ลูกค้า, แอดมิน, คลังสินค้า, การเงิน?
- ช่องทางอะไร: email, SMS, push, in-app?
- แจ้งเมื่อไร: ทันที, batch ทุก 5 นาที, หรือเฉพาะบางสถานะ?
- เนื้อหาข้อความต่างกันตามสาเหตุที่ยกเลิกไหม?
- ถ้ายกเลิกโดยระบบอัตโนมัติ ต่างจากยกเลิกโดยแอดมินไหม?
ตัวอย่าง E: Security / Login Lock
"ระบบต้องล็อกบัญชีเมื่อ login ผิดหลายครั้ง"
สิ่งที่ QA ควรถาม:
- หลายครั้งคือกี่ครั้ง?
- นับภายในช่วงเวลากี่นาที?
- นับต่อ account, ต่อ IP, หรือต่อ device?
- ล็อกนานเท่าไร?
- ผู้ใช้ปลดล็อกเองได้ไหม?
- ถ้าเป็น account ที่ไม่มีอยู่จริง ระบบจะเผยข้อมูลหรือไม่?
สิ่งสำคัญคือ QA ไม่ได้ถามเหมือนเดิมทุกเรื่อง แต่จะถามตาม "ความเสี่ยงของฟีเจอร์นั้น"
ถ้าไม่รู้จะเริ่มถามอะไร ให้เริ่มจากรายการนี้
คุณไม่จำเป็นต้องถามทุกข้อทุกครั้ง แต่ลิสต์นี้ช่วยกันหลุดได้ดีมาก
| หมวด | คำถามตัวอย่าง |
|---|---|
| Who | ใครใช้ฟีเจอร์นี้ได้บ้าง? role ไหนใช้ไม่ได้? |
| When | ทำได้เมื่อไร? ก่อนหรือหลังเหตุการณ์อะไร? มีเวลาหมดอายุไหม? |
| Input | ต้องกรอกหรือส่งข้อมูลอะไร? format อะไร? จำกัดความยาวไหม? |
| Business Rules | มีกฎคำนวณ, สิทธิ์, limit, quota, หรือ dependency อะไรบ้าง? |
| Validation | ถ้าข้อมูลไม่ถูกต้อง ระบบต้องเตือนอย่างไร? |
| Error Handling | ถ้าระบบภายนอกล่ม, network หลุด, หรือ timeout จะเกิดอะไรขึ้น? |
| State / Status | ฟีเจอร์นี้ทำให้ข้อมูลเปลี่ยนสถานะอะไร? ย้อนกลับได้ไหม? |
| Audit / Security | ต้องเก็บ log ไหม? ต้องป้องกัน duplicate, fraud, brute force หรือไม่? |
| UX / Communication | ผู้ใช้จะเห็นข้อความอะไร? ภาษาไหน? มี empty state หรือ loading state ไหม? |
สูตรง่ายสำหรับตั้ง clarification question
ถ้าจะตั้งคำถามให้ทีมตอบง่าย ลองใช้รูปแบบนี้:
"ถ้า [สถานการณ์] เกิดขึ้น ระบบควร [พฤติกรรมที่คาดหวัง] ใช่ไหม?"
ตัวอย่าง:
- "ถ้าผู้ใช้กด submit ซ้ำสองครั้ง ระบบควรสร้าง order แค่ครั้งเดียวใช่ไหม?"
- "ถ้า email ยืนยันหมดอายุ ผู้ใช้ควรขอส่งลิงก์ใหม่ได้ใช่ไหม?"
- "ถ้าคูปองไม่เข้าเงื่อนไขขั้นต่ำ ระบบควรบอกเหตุผลที่ใช้ไม่ได้ใช่ไหม?"
คำถามแบบนี้ช่วยให้ทีมตอบเป็น decision ได้ทันที ไม่ใช่คุยวนอยู่กับคำว่า "น่าจะ"
ฝึกคิดให้ครบก่อนดูเฉลย
ลองอ่าน requirement ต่อไปนี้ แล้วลองระบุอย่างน้อย 3 อย่าง:
คำที่คลุมเครือ
รายละเอียดที่หายไป
edge case หรือ exception ที่ควรถามเพิ่ม
"ผู้ใช้สามารถแก้ไขที่อยู่จัดส่งได้ก่อนคำสั่งซื้อถูกจัดส่ง"
ดูแนวคิดคำตอบ
คำที่คลุมเครือ: "ก่อนคำสั่งซื้อถูกจัดส่ง" หมายถึงก่อนสถานะไหนกันแน่? packed, shipped, handed to carrier?
รายละเอียดที่หายไป: แก้ไขได้ทุก field ไหม? แก้ได้กี่ครั้ง? มีค่าจัดส่งเปลี่ยนตามที่อยู่ใหม่ไหม? ถ้าแก้แล้วต้อง re-approve การชำระเงินหรือไม่?
Edge cases: ถ้าออเดอร์ถูกแพ็กแล้วแต่ยังไม่อัปเดตสถานะ? ถ้าแก้ไขพร้อมกันจากเว็บและแอดมิน? ถ้าเปลี่ยนจากจังหวัดเดิมไปต่างประเทศ?
"ระบบควรแนะนำสินค้าใกล้เคียงให้ผู้ใช้อย่างเหมาะสม"
ดูแนวคิดคำตอบ
คำที่คลุมเครือ: "ใกล้เคียง" และ "เหมาะสม"
รายละเอียดที่หายไป: ใช้เกณฑ์อะไรแนะนำ? หมวดเดียวกัน, ราคาคล้ายกัน, พฤติกรรมผู้ใช้อื่น? แสดงกี่ชิ้น? อยู่หน้าไหนบ้าง?
Edge cases: ถ้าไม่มีสินค้าที่ใกล้เคียง? ถ้าสินค้าที่แนะนำหมดสต็อก? ถ้าผู้ใช้ใหม่ยังไม่มีประวัติ?
"เมื่อชำระเงินสำเร็จ ระบบต้องออกเลข order ให้ทันที"
ดูแนวคิดคำตอบ
คำที่คลุมเครือ: "ทันที"
รายละเอียดที่หายไป: ออกเลข order ก่อนหรือหลัง payment confirmation จาก gateway? รูปแบบเลข order เป็นอย่างไร? ต้อง unique ข้ามช่องทางขายไหม?
Edge cases: ถ้า payment success แต่ callback จาก gateway มาช้า? ถ้ากดชำระซ้ำ? ถ้าออกเลข order สำเร็จแต่ส่งหน้าผลลัพธ์ไม่สำเร็จ?
"ฟอร์มสมัครงานต้องใช้งานง่ายบนมือถือ"
ดูแนวคิดคำตอบ
คำที่คลุมเครือ: "ใช้งานง่าย"
รายละเอียดที่หายไป: รองรับขนาดหน้าจอใดบ้าง? ต้องอัปโหลดไฟล์ resume ได้ไหม? ใช้เวลาเฉลี่ยกรอกไม่เกินเท่าไร? มี auto-save หรือไม่?
Edge cases: เน็ตหลุดระหว่างกรอกฟอร์ม, แนบไฟล์ใหญ่เกิน, หมุนหน้าจอระหว่างกรอก, ใช้คีย์บอร์ดมือถือแล้วปุ่มสำคัญถูกบัง
"ระบบควรป้องกันการสั่งซื้อซ้ำ"
ดูแนวคิดคำตอบ
คำที่คลุมเครือ: "สั่งซื้อซ้ำ" หมายถึง order เดิมทุกอย่างเหมือนกัน หรือ submit ซ้ำในธุรกรรมเดียว?
รายละเอียดที่หายไป: ป้องกันที่ UI, API, หรือทั้งสองจุด? ใช้ idempotency key ไหม? หากคำสั่งซื้อแรกไม่สำเร็จ จะให้ retry อย่างไร?
Edge cases: ผู้ใช้กด submit ซ้ำเพราะหน้าค้าง, network timeout แต่ backend สร้าง order แล้ว, เปิดหลายแท็บพร้อมกัน
9 · สิ่งที่ต้องเอาติดตัวไปจากบทนี้
- QA อ่าน requirement ไม่ใช่เพื่อ "เข้าใจคร่าว ๆ" แต่เพื่อทำให้ทีมตีความตรงกันก่อนลงมือทำ
- เริ่มง่ายที่สุดด้วยการแยก actor, action, data, rule, outcome, exception
- ใช้ 4 สายตาเสมอ: ambiguity, missing details, edge cases, assumptions
- เจอคำอย่าง "เร็ว", "เหมาะสม", "ปลอดภัย", "หลาย", "ทันที" ให้ตั้งคำถามต่อทันที
- Clarification question ที่ดีคือคำถามที่ทำให้ทีม "ตัดสินใจได้" ไม่ใช่แค่คุยกว้าง ๆ
- requirement ที่ชัดขึ้นหนึ่งประโยค อาจช่วยประหยัด defect, rework และเวลาทั้ง sprint ได้มากกว่าการเพิ่ม test case ทีหลัง