CupCode.cc
Section 01 · Module 05 · Lesson 01 · ~24–28 นาที

อ่าน Requirement ด้วยสายตาของนักทดสอบ

คนทั่วไปอ่าน requirement เพื่อเข้าใจว่า feature นี้คืออะไร แต่ QA ที่เก่งอ่านเพื่อหา จุดที่ทีมอาจเข้าใจไม่ตรงกัน, สิ่งที่ยังไม่ได้ระบุ, และ ความเสี่ยงที่อาจกลายเป็น defect ก่อนเริ่มลงมือพัฒนา

เวลาเรียน: 24–28 นาที ต้องรู้มาก่อน: Module 01–04 รูปแบบ: อ่าน + วิเคราะห์ story + ฝึกตั้งคำถาม

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

  • อธิบายได้ว่า "อ่าน requirement เพื่อทำงาน" ต่างจาก "อ่าน requirement เพื่อทดสอบ" อย่างไร
  • ใช้กรอบคิดง่าย ๆ เพื่อแยก actor, action, data, business rule และ exception ออกจาก requirement
  • หา ambiguity, missing details, edge cases และ assumptions ได้เป็นระบบมากขึ้น
  • เปลี่ยน requirement ที่คลุมเครือให้กลายเป็นคำถาม clarification ที่ช่วยทีมตัดสินใจได้
  • เห็นตัวอย่างหลายแบบว่าปัญหา requirement ซ่อนอยู่ได้ทั้งใน flow ปกติ, validation, security, timing และ business rules
1 · QA อ่านต่างจากคนอื่นอย่างไร

ไม่ได้อ่านแค่ว่า "ต้องทำอะไร" แต่ต้องอ่านว่า "อะไรอาจพังได้บ้าง"

เวลา 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 ที่ "ฟังดูเข้าใจ" อาจยัง "ทดสอบไม่ได้"

2 · วิธีเริ่มอ่านให้เป็นระบบ

ใช้กรอบคิด 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 ควรถามต่อ ไม่ใช่เดาแทนทีม

3 · สายตา 4 แบบที่ 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 แทบทุกใบจะเริ่มมีคำถามผุดขึ้นมาเอง

4 · คำอันตรายที่ควรตั้งธงทันที

เจอคำพวกนี้เมื่อไร ให้หยุดแล้วถามต่อ

คำบางคำไม่ได้ผิด แต่ถ้าไม่มีบริบทเพิ่ม มันทำให้ 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 ชัดขึ้นจนเทสต์ได้

5 · ตัวอย่าง walkthrough แบบทีละชั้น

อ่าน user story หนึ่งใบ แล้วค่อย ๆ ขุดให้เห็นสิ่งที่ซ่อนอยู่

ลองดูตัวอย่างนี้

User Story "ในฐานะผู้ใช้ ฉันต้องการสมัครสมาชิกด้วย email เพื่อที่จะใช้งาน feature premium ได้ ระบบควรส่งอีเมลยืนยันเมื่อสมัครสำเร็จ และเปิดใช้งาน account ให้เร็วที่สุด"

รอบที่ 1: อ่านเพื่อเข้าใจภาพรวม

สิ่งที่เรา "พอรู้" คือ:

  • ผู้ใช้สมัครด้วย email
  • สมัครสำเร็จแล้วมีอีเมลยืนยัน
  • เป้าหมายคือเข้าใช้ feature premium

แค่นี้พอให้เริ่มคุยได้ แต่ยังไม่พอให้พัฒนาและทดสอบอย่างมั่นใจ

รอบที่ 2: แยก 6 ช่อง

ช่อง สิ่งที่พอรู้ สิ่งที่ยังไม่ชัด
Actor ผู้ใช้ ผู้ใช้ใหม่เท่านั้นหรือผู้ใช้เดิมที่ upgrade ได้ด้วย?
Action สมัครสมาชิกด้วย email ต้องกรอก field อะไรบ้าง?
Data email 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

คำถามที่ดีไม่ใช่คำถามกว้าง ๆ แบบ "ตรงนี้โอเคไหม?" แต่เป็นคำถามที่บังคับให้ทีมตัดสินใจ

ตัวอย่าง:

  1. Account จะถือว่า active ตั้งแต่ตอน submit ฟอร์ม หรือหลังจากกดยืนยันอีเมล?
  2. ถ้า email ยืนยันส่งไม่สำเร็จ ระบบจะ rollback การสร้าง account หรือสร้างไว้ก่อนแล้วให้ resend?
  3. ผู้ใช้สามารถ login ได้ก่อน verify email หรือไม่?
  4. verification link มีอายุเท่าไร และหมดอายุแล้วทำอะไรต่อได้?
  5. email เดิมที่เคยสมัครแต่ยังไม่ verify สามารถสมัครซ้ำได้หรือไม่?
  6. ถ้ากดปุ่มสมัครซ้ำเพราะเน็ตช้า ระบบต้องกัน duplicate account อย่างไร?
  7. password ต้องมีความยาวขั้นต่ำและความซับซ้อนระดับไหน?

แค่ story เดียว เราก็เห็นได้แล้วว่า requirement analysis ที่ดีช่วยลด defect ได้ตั้งแต่ก่อนเขียนโค้ด

6 · ตัวอย่างหลายแบบจากหลายบริบท

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 ไม่ได้ถามเหมือนเดิมทุกเรื่อง แต่จะถามตาม "ความเสี่ยงของฟีเจอร์นั้น"

7 · เช็กลิสต์คำถามที่ QA ใช้ได้แทบทุก requirement

ถ้าไม่รู้จะเริ่มถามอะไร ให้เริ่มจากรายการนี้

คุณไม่จำเป็นต้องถามทุกข้อทุกครั้ง แต่ลิสต์นี้ช่วยกันหลุดได้ดีมาก

หมวด คำถามตัวอย่าง
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 ได้ทันที ไม่ใช่คุยวนอยู่กับคำว่า "น่าจะ"

8 · Mini workshop: จาก requirement ที่คลุมเครือ สู่รายการสิ่งที่ต้องถาม

ฝึกคิดให้ครบก่อนดูเฉลย

ลองอ่าน requirement ต่อไปนี้ แล้วลองระบุอย่างน้อย 3 อย่าง:

  1. คำที่คลุมเครือ

  2. รายละเอียดที่หายไป

  3. edge case หรือ exception ที่ควรถามเพิ่ม

  4. "ผู้ใช้สามารถแก้ไขที่อยู่จัดส่งได้ก่อนคำสั่งซื้อถูกจัดส่ง"

    ดูแนวคิดคำตอบ

    คำที่คลุมเครือ: "ก่อนคำสั่งซื้อถูกจัดส่ง" หมายถึงก่อนสถานะไหนกันแน่? packed, shipped, handed to carrier?

    รายละเอียดที่หายไป: แก้ไขได้ทุก field ไหม? แก้ได้กี่ครั้ง? มีค่าจัดส่งเปลี่ยนตามที่อยู่ใหม่ไหม? ถ้าแก้แล้วต้อง re-approve การชำระเงินหรือไม่?

    Edge cases: ถ้าออเดอร์ถูกแพ็กแล้วแต่ยังไม่อัปเดตสถานะ? ถ้าแก้ไขพร้อมกันจากเว็บและแอดมิน? ถ้าเปลี่ยนจากจังหวัดเดิมไปต่างประเทศ?

  5. "ระบบควรแนะนำสินค้าใกล้เคียงให้ผู้ใช้อย่างเหมาะสม"

    ดูแนวคิดคำตอบ

    คำที่คลุมเครือ: "ใกล้เคียง" และ "เหมาะสม"

    รายละเอียดที่หายไป: ใช้เกณฑ์อะไรแนะนำ? หมวดเดียวกัน, ราคาคล้ายกัน, พฤติกรรมผู้ใช้อื่น? แสดงกี่ชิ้น? อยู่หน้าไหนบ้าง?

    Edge cases: ถ้าไม่มีสินค้าที่ใกล้เคียง? ถ้าสินค้าที่แนะนำหมดสต็อก? ถ้าผู้ใช้ใหม่ยังไม่มีประวัติ?

  6. "เมื่อชำระเงินสำเร็จ ระบบต้องออกเลข order ให้ทันที"

    ดูแนวคิดคำตอบ

    คำที่คลุมเครือ: "ทันที"

    รายละเอียดที่หายไป: ออกเลข order ก่อนหรือหลัง payment confirmation จาก gateway? รูปแบบเลข order เป็นอย่างไร? ต้อง unique ข้ามช่องทางขายไหม?

    Edge cases: ถ้า payment success แต่ callback จาก gateway มาช้า? ถ้ากดชำระซ้ำ? ถ้าออกเลข order สำเร็จแต่ส่งหน้าผลลัพธ์ไม่สำเร็จ?

  7. "ฟอร์มสมัครงานต้องใช้งานง่ายบนมือถือ"

    ดูแนวคิดคำตอบ

    คำที่คลุมเครือ: "ใช้งานง่าย"

    รายละเอียดที่หายไป: รองรับขนาดหน้าจอใดบ้าง? ต้องอัปโหลดไฟล์ resume ได้ไหม? ใช้เวลาเฉลี่ยกรอกไม่เกินเท่าไร? มี auto-save หรือไม่?

    Edge cases: เน็ตหลุดระหว่างกรอกฟอร์ม, แนบไฟล์ใหญ่เกิน, หมุนหน้าจอระหว่างกรอก, ใช้คีย์บอร์ดมือถือแล้วปุ่มสำคัญถูกบัง

  8. "ระบบควรป้องกันการสั่งซื้อซ้ำ"

    ดูแนวคิดคำตอบ

    คำที่คลุมเครือ: "สั่งซื้อซ้ำ" หมายถึง 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 ทีหลัง