CupCode.cc
Section 02 · Module 06 · Lesson 02 · ~22–26 นาที

การเขียน Bug Report ที่ Dev อ่านแล้วแก้ได้เลย

bug report ไม่ใช่แค่หลักฐานว่า QA เจอปัญหา แต่มันคือเอกสารสื่อสารที่ต้องพาทีมจาก 'งงว่าเกิดอะไร' ไปสู่ 'แก้ได้เลย' บทนี้จะช่วยให้คุณเขียนรายงานบั๊กที่ชัด กระชับ และลดการถามกลับจากทีมพัฒนา

เวลาเรียน: 22–26 นาที ต้องรู้มาก่อน: Lesson 01 - วงจรชีวิตของ Defect รูปแบบ: อ่าน + เปรียบเทียบ bug report + แบบฝึกสั้น

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

  • อธิบายได้ว่า bug report ที่ดีควรมีองค์ประกอบอะไรบ้าง
  • แยก severity กับ priority ได้ชัดขึ้น
  • เขียน steps to reproduce ที่คนอื่นทำซ้ำได้จริง
  • รู้ว่าควรใส่ข้อมูลไหนเพื่อช่วย dev หา root cause ได้เร็วขึ้น
  • เปลี่ยน bug report จาก “แจ้งว่าพัง” ให้เป็น “ข้อมูลพร้อมลงมือแก้”
1 · ทำไม bug report ถึงสำคัญ

เพราะ defect ที่รายงานไม่ชัด เท่ากับทีมยังแก้ปัญหาไม่ถูก

สมมติ QA ส่งข้อความแบบนี้:

“ระบบพังตอนสั่งซื้อ ช่วยดูหน่อย”

สิ่งที่ dev ต้องถามกลับมีทันที:

  • พังตรงไหน
  • ทำอะไรอยู่ก่อนหน้า
  • ใช้ browser / device อะไร
  • เกิดทุกครั้งไหม
  • มีข้อมูลหรือเงื่อนไขพิเศษหรือไม่

ทุกคำถามที่ต้องถามกลับคือเวลาที่เสียไป และบั๊กยิ่ง critical เท่าไร เวลาที่เสียนี้ยิ่งแพง

bug report ที่ดีจึงไม่ใช่เอกสารที่ยาวที่สุด แต่คือเอกสารที่ทำให้คนอ่าน:

  • เข้าใจปัญหาเร็ว
  • ทำซ้ำได้
  • ประเมินผลกระทบได้
  • เริ่มแก้ได้โดยไม่ต้องเดา
2 · องค์ประกอบหลักของ bug report ที่ดี

เขียนให้ครบเท่าที่จำเป็น ไม่ใช่ครบทุกช่องแบบไม่มีคุณภาพ

องค์ประกอบ ใช้ตอบคำถามอะไร ตัวอย่าง
Title ปัญหาคืออะไรแบบสั้นและชัด “Order ไม่ถูกสร้างหลังชำระเงินผ่าน PromptPay สำเร็จ”
Environment เกิดที่ไหน iPhone 15, iOS 17, Staging
Preconditions ต้องมีอะไรอยู่ก่อน ล็อกอินแล้ว, มีสินค้าในตะกร้า
Steps to Reproduce ทำอย่างไรจึงเจอ Step 1, 2, 3 แบบทำซ้ำได้
Expected Result อะไรควรเกิด ระบบควรสร้าง order และแสดงเลข order
Actual Result อะไรเกิดจริง หน้าจอแจ้งชำระสำเร็จแต่ไม่มี order
Severity / Priority รุนแรงและเร่งด่วนแค่ไหน Critical / High
Evidence มีหลักฐานอะไร screenshot, video, log, request id

คุณไม่จำเป็นต้องมี template ยาวมาก แต่ข้อมูลเหล่านี้คือแกนกลางที่ช่วยให้ report ใช้งานได้จริง

3 · Title ที่ดีควรเขียนอย่างไร

สรุป “อาการ + เงื่อนไขสำคัญ + ผลกระทบ” ให้มากที่สุดในประโยคเดียว

เปรียบเทียบ:

แบบที่ยังไม่ดี ปัญหา
“ระบบพัง” กว้างเกิน ไม่รู้ว่าพังอะไร
“ชำระเงินไม่ได้” ยังไม่รู้กับช่องทางไหน ภายใต้เงื่อนไขอะไร
“Bug in checkout” ไม่บอกอาการจริง

ตัวอย่างที่ดีขึ้น:

  • “Order ไม่ถูกสร้างหลังชำระเงินผ่าน PromptPay สำเร็จ”
  • “ผู้ใช้ reset password ไม่ได้เมื่อเปิดลิงก์เกิน 1 ชั่วโมง”
  • “ระบบคำนวณส่วนลด 10% ผิดเมื่อใช้คูปองร่วมกับ shipping promotion”

Title ที่ดีช่วยให้คนสแกน defect list แล้วเข้าใจภาพรวมได้เร็วมาก

4 · Severity vs Priority

อย่าใช้สองคำนี้แทนกัน

Severity คือความรุนแรงของปัญหาในเชิงพฤติกรรมของระบบ

Priority คือความเร่งด่วนที่ทีมควรแก้ในเชิงธุรกิจหรือแผนงาน

เรื่อง Severity Priority
ถามว่าอะไร พังหนักแค่ไหน ต้องแก้เร็วแค่ไหน
มุมมองหลัก Technical / User impact Business timing / planning
ตัวอย่าง app crash, data wrong, payment fail ต้องแก้ก่อน release, แก้ sprint หน้าได้

ตัวอย่างให้เห็นภาพ

  • logo หน้าแรกผิด: severity อาจต่ำ แต่ priority อาจสูง ถ้าต้อง demo ให้ผู้บริหารวันนี้
  • crash เมื่อพิมพ์ emoji ในช่องเฉพาะที่คนแทบไม่ใช้: severity อาจสูง แต่ priority อาจไม่สูงเท่า payment bug

การแยกสองอย่างนี้ออกจะช่วยให้ triage คุยกันง่ายขึ้น

5 · Steps to Reproduce คือหัวใจของ report

ถ้าคนอื่นทำซ้ำไม่ได้ เขาก็แก้ไม่ได้

steps ที่ดีควรมีลักษณะดังนี้:

  • เริ่มจากจุดตั้งต้นที่ชัด
  • แต่ละข้อมี 1 action หลัก
  • ระบุข้อมูลที่กรอกหรือเงื่อนไขที่ใช้
  • บอกจุดที่ต้องสังเกตอาการ

ตัวอย่าง:

ยังไม่ดี

  1. สั่งอาหาร
  2. จ่ายเงิน
  3. ไม่มี order

ดีขึ้น

  1. เปิดแอปด้วย account qa_user_01
  2. ค้นหาร้าน “ข้าวมันไก่ลุงชัย”
  3. เพิ่มเมนู “ข้าวมันไก่พิเศษ” ลงตะกร้า
  4. กด “สั่งอาหาร”
  5. เลือกชำระเงินแบบ PromptPay
  6. ชำระเงินจนหน้าจอแสดง “สำเร็จ”
  7. ไปที่หน้า “คำสั่งซื้อของฉัน”
  8. สังเกตว่าไม่มี order ที่เพิ่งสร้าง

steps ลักษณะนี้ช่วยลดการตีความและทำให้ dev หรือ QA คนอื่นทำซ้ำได้ใกล้เคียงกัน

6 · ข้อมูลเสริมที่ช่วย dev มาก

บางบั๊กแก้เร็วขึ้นมากถ้าเราให้ hint ที่ถูก

ข้อมูลที่มักช่วยมาก:

  • เกิดทุกครั้งหรือบางครั้ง
  • เกิดเฉพาะ browser / device / payment method ไหน
  • เริ่มเกิดหลัง build ไหน
  • มี workaround หรือไม่
  • เทียบกับกรณีที่ทำงานปกติได้ไหม

ตัวอย่างเช่น:

  • “เกิดเฉพาะเมื่อใช้ PromptPay; credit card ปกติ”
  • “เกิดเมื่อมีสินค้าเกิน 5 ชิ้น; 1-5 ชิ้นไม่เกิด”
  • “เจอบน Safari iOS แต่ Chrome desktop ปกติ”

ข้อมูลเหล่านี้ไม่ได้แทน root cause แต่ช่วยให้ dev narrow down เร็วขึ้นมาก

7 · ตัวอย่าง bug report ที่แย่ vs ดี

เห็นความต่างจากผลลัพธ์ที่ทีมได้รับ

แบบแย่

Title: Checkout error
Description: จ่ายเงินแล้วไม่ขึ้นอะไร

ปัญหา:

  • ไม่รู้เงื่อนไข
  • ไม่รู้ expected / actual
  • ไม่รู้ env
  • ไม่รู้ reproduce ได้ไหม

แบบดี

Title: Order ไม่ถูกสร้างหลังชำระเงินผ่าน PromptPay สำเร็จ
Environment: iPhone 15, iOS 17, Staging
Preconditions: login แล้ว, มีสินค้า 1 ชิ้นในตะกร้า
Steps: …
Expected: order ถูกสร้างและแสดงใน My Orders
Actual: หน้าแสดงชำระสำเร็จ แต่ My Orders ว่าง
Additional Info: เกิดซ้ำ 3/3 ครั้ง, credit card ไม่พบปัญหา

ผลต่างคือแบบหลังทำให้ dev เริ่ม investigate ได้ทันที

8 · ข้อผิดพลาดที่พบบ่อย

bug report ที่ดูเหมือนครบ แต่ยังใช้งานจริงไม่ดี

1. เขียน title กว้างเกิน

ทำให้ defect list อ่านยาก และ triage ยาก

2. steps กระโดดข้าม context

เช่นเริ่มจาก “กด submit” โดยไม่บอกว่ามาถึงหน้านี้อย่างไร

3. expected result ไม่ชัด

ถ้าไม่รู้ว่าควรเกิดอะไร ก็ยากจะคุยว่าอะไรผิด

4. actual result เป็นความเห็นมากกว่าข้อเท็จจริง

เช่น “ระบบงงมาก” ดีกว่าที่จะเขียนว่า “ปุ่ม Save ไม่ตอบสนองหลังคลิก 10 วินาที”

5. ไม่มี evidence เมื่อ bug ไม่เกิดทุกครั้ง

บั๊ก intermittent จะยิ่งต้องมี screenshot, video, logs หรือ request id ช่วย

Practice

แบบฝึก: ปรับ bug report ให้ actionable ขึ้น

  1. title ว่า “Search มีปัญหา” คุณจะทำให้ชัดขึ้นอย่างไร

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

    ต้องเติมอาการและเงื่อนไข เช่น “ระบบไม่แสดงผลลัพธ์เมื่อค้นหาด้วยคำภาษาไทยที่มีเว้นวรรค” หรือ “Search คืนผลลัพธ์ว่างเมื่อเลือก category ร่วมกับ keyword”

  2. ถ้าคุณรู้ว่า bug เกิดเฉพาะบน Safari แต่ไม่เกิดบน Chrome ข้อมูลนี้ควรอยู่ตรงไหน

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

    ควรอยู่ทั้งใน Environment และ Additional Info เพราะเป็นข้อมูลสำคัญในการจำกัดขอบเขตของปัญหา

  3. ถ้าไม่แน่ใจ severity ควรทำอย่างไร

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

    ใส่ระดับที่คุณประเมินจากผลกระทบเบื้องต้นได้ก่อน พร้อมอธิบาย impact ใน report และเปิดให้ทีม triage ปรับร่วมกัน ดีกว่าเว้นว่างหรือใส่แบบเดาโดยไม่มีเหตุผล

  4. bug report ที่ดีจำเป็นต้องยาวเสมอหรือไม่

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

    ไม่จำเป็น สิ่งสำคัญคือความชัด ไม่ใช่ความยาว ถ้าปัญหาง่าย ก็เขียนสั้นได้ แต่ต้องมีข้อมูลพอให้ทำซ้ำและตัดสินใจได้

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

  • bug report ที่ดีคือเอกสารสื่อสาร ไม่ใช่แค่การแจ้งว่า “มีบั๊ก”
  • ส่วนที่สำคัญที่สุดมักคือ title ที่ชัด, steps ที่ทำซ้ำได้, และ expected / actual ที่ไม่กำกวม
  • Severity กับ Priority เป็นคนละเรื่อง และควรถูกใช้แยกกันอย่างตั้งใจ
  • ข้อมูลเปรียบเทียบ เช่น “เกิดเฉพาะเมื่อ...” มีค่ามากในการช่วยหา root cause
  • ถ้า dev อ่านแล้วเริ่มแก้ได้โดยไม่ต้องถามกลับมาก คุณกำลังเขียน bug report ได้ดีแล้ว