วงจรชีวิตของ Defect
บั๊กไม่ได้จบแค่ตอน QA เจอแล้วกดปุ่มรายงาน หลังจากนั้นยังมีการ triage, แก้, retest, close หรือ reopen อีกหลายช่วง ถ้าทีมไม่เข้าใจวงจรนี้เหมือนกัน งานจะวนลูป เสียเวลา และเกิดการโทษกันง่าย บทนี้จะช่วยให้คุณเห็นภาพ defect lifecycle แบบที่ใช้ทำงานจริง
จบบทนี้แล้วคุณจะ...
- อธิบายได้ว่า defect lifecycle คืออะไรและทำไมทีมต้องมีความเข้าใจร่วมกัน
- รู้จักสถานะ defect ที่พบบ่อย เช่น New, Assigned, Fixed, Retest, Closed, Reopened
- เห็นบทบาทของ QA, Dev และ PM ในแต่ละช่วงของวงจร defect
- แยกให้ออกว่า defect ไหนควรถูก reopen, defer, reject หรือ mark เป็น duplicate
- ใช้วงจร defect เป็นเครื่องมือจัดการงาน ไม่ใช่แค่สถานะในเครื่องมือ
เพราะ “เจอบั๊ก” ยังไม่ใช่ “ปัญหาถูกจัดการแล้ว”
หลายทีมพอ QA เจอบั๊กก็คิดว่างานเสร็จไปครึ่งหนึ่งแล้ว แต่จริง ๆ หลังจาก report แล้ว ยังมีคำถามอีกเยอะ:
- ใครจะเป็นคนตัดสิน severity/priority?
- Dev รับไปเมื่อไร?
- fixed แล้ว QA จะ retest เมื่อไร?
- ถ้าแก้ไม่ตรง จะ reopen ยังไง?
- ถ้า bug นี้ไม่แก้ตอนนี้ จะ defer หรือ accept risk อย่างไร?
ถ้าทีมไม่มีภาพร่วมกัน defect จะวนอยู่ในสถานะต่าง ๆ แบบไม่สร้างความชัดเจน เช่น:
- QA คิดว่า dev ยังไม่รับ
- dev คิดว่า QA ยังไม่ได้ให้ข้อมูลครบ
- PM คิดว่าบั๊กนี้ไม่สำคัญ
- release day มาถึง แต่ยังไม่มีใครชัดว่าบั๊กไหนปิดได้จริง
defect lifecycle จึงช่วยให้ทีมตอบว่า “ตอนนี้ปัญหานี้อยู่ตรงไหนของกระบวนการแล้ว”
ชื่ออาจต่างกันตามเครื่องมือ แต่ความหมายหลักมักคล้ายกัน
| สถานะ | ความหมายแบบง่าย |
|---|---|
| New / Open | QA เพิ่งรายงาน defect เข้ามา |
| Triaged / Accepted | ทีม review แล้ว เห็นตรงกันว่านี่คือ defect และควรจัดการ |
| Assigned / In Progress | มี dev รับงานไปดูหรือกำลังแก้ |
| Fixed | dev แก้แล้ว และพร้อมให้ QA retest |
| Retest / Verify | QA กำลังตรวจว่า fix ใช้ได้จริงหรือไม่ |
| Closed | retest ผ่าน และ defect นี้ถือว่าจบ |
| Reopened | QA retest แล้วพบว่ายังไม่หาย หรือแก้ไม่ครบ |
| Deferred | รับรู้ว่าเป็น defect แต่เลื่อนไปแก้รอบหลัง |
| Rejected / Not a Bug | ทีมเห็นว่าไม่ใช่ defect จริง หรือเป็น expected behavior |
| Duplicate | เป็น defect เดียวกับที่มีรายงานไว้ก่อนหน้า |
บางทีมมีสถานะมากกว่านี้ เช่น Ready for QA, Blocked, Won't Fix แต่แนวคิดหลักยังเหมือนเดิม
เห็นภาพทีละก้าวจะเข้าใจมากกว่าท่องชื่อสถานะ
สมมติ QA พบว่า:
“จ่ายเงินสำเร็จ แต่ order ไม่ถูกสร้าง”
วงจรอาจเป็นแบบนี้:
- QA รายงาน defect พร้อม evidence → สถานะ
New - ทีม triage ตอนเช้า เห็นตรงกันว่าเป็น critical →
Accepted - assign ให้ dev ที่ดู payment callback →
Assigned - dev แก้โค้ดและ merge ไป staging →
Fixed - QA retest ซ้ำด้วยเงื่อนไขเดิม →
Retest - ถ้า order ถูกสร้างถูกต้องแล้ว และไม่มี side effect →
Closed - ถ้าอาการเดิมหาย แต่ไปเกิดปัญหา “สร้าง order ซ้ำ” แทน → อาจเปิด defect ใหม่ หรือ
Reopenedตามบริบท
การเห็น defect lifecycle เป็น flow แบบนี้ช่วยให้ทีมไม่ใช้สถานะมั่ว ๆ
ไม่ใช่แค่เปิด defect แล้วรอ
บทบาทของ QA ใน defect lifecycle มักมีอย่างน้อย 4 เรื่อง:
1. Report ให้ชัด
ถ้า defect ตั้งต้นไม่ชัด วงจรถัดไปทั้งหมดจะช้าลง
2. ช่วย triage ด้วยบริบทการใช้งานจริง
QA มักเป็นคนอธิบายได้ว่า:
- เจอในเงื่อนไขไหน
- กระทบผู้ใช้อย่างไร
- มี workaround หรือไม่
- เกิดซ้ำได้แค่ไหน
3. Retest อย่างมีวินัย
QA ไม่ได้เช็กแค่ว่า “อาการเดิมหายไหม” แต่ควรมองด้วยว่า:
- fix ครอบคลุมจริงหรือไม่
- มี regression ใกล้เคียงไหม
- พฤติกรรมใหม่ยังสมเหตุสมผลไหม
4. ติดตาม defect ให้จบจริง
บางครั้ง defect ไม่ได้ติดที่การแก้ แต่ติดที่:
- ยังไม่มีข้อมูลเพิ่ม
- deploy ยังไม่ถึง env ที่ QA ใช้
- เจ้าของงานไม่ชัด
QA ที่ดีจะช่วยตามเรื่องโดยไม่ปล่อยให้ defect ค้างแบบเงียบ ๆ
ไม่ใช่ทุกอย่างที่ยังไม่พอใจต้อง reopen ทันที
ให้ลองแยกแบบนี้:
ควร Reopen
- อาการเดิมยังเกิดซ้ำ
- แก้ไปบางส่วน แต่เงื่อนไขสำคัญยังพัง
- expected result ที่ตกลงกันไว้ยังไม่ผ่าน
อาจไม่ควร Reopen แต่ควรเปิด defect ใหม่
- fix ตัวเดิมหายแล้ว แต่ก่อ regression คนละอาการ
- พบ issue ใหม่ที่มี root cause คนละจุด
อาจไม่ควร Reopen
- สิ่งที่ QA เห็นเป็น expected behavior ตามที่ทีมตกลงใหม่
- ปัญหาเกิดจาก test data หรือ environment ไม่พร้อม
การ reopen อย่างมีเหตุผลจะช่วยให้ทีมไม่รู้สึกว่า defect tracking เป็นเกมจับผิด
สถานะเหล่านี้ช่วยเก็บความจริงของงาน
Deferred
ใช้เมื่อทีมรับรู้ว่าเป็น defect จริง แต่ตัดสินใจเลื่อนไปก่อน เพราะ:
- release ใกล้มาก
- impact ต่ำ
- fix เสี่ยงต่อ regression สูง
Rejected / Not a Bug
ใช้เมื่อ:
- พฤติกรรมตรงตาม requirement ที่ตกลงกัน
- เป็น misunderstanding
- report ยังพิสูจน์ไม่ได้ว่าเป็น defect จริง
Duplicate
ใช้เมื่อมี defect เดิมอยู่แล้ว และ issue ใหม่นี้ควรถูก trace ไปที่ตัวเดิม ไม่ใช่สร้าง noise เพิ่ม
สถานะเหล่านี้ไม่ได้ทำให้ defect “หายไป” แต่ช่วยให้ backlog ของปัญหาสะอาดขึ้นและสื่อสารได้ตรงขึ้น
หลายปัญหาไม่ได้อยู่ที่บั๊ก แต่อยู่ที่วิธีทีมจัดการกับบั๊ก
1. ใช้สถานะไม่ชัด
เช่น dev เปลี่ยนเป็น Fixed ทั้งที่ deploy ยังไม่ถึง env ที่ QA ใช้จริง
2. ปิด defect เร็วเกินไป
แค่ merge code แล้วรีบปิด ทั้งที่ QA ยังไม่ retest
3. ไม่มี triage ที่ชัด
defect ถูกเปิดเรื่อย ๆ แต่ไม่มีใครตัดสิน priority หรือ owner
4. Reopen โดยไม่อธิบาย
ถ้า QA reopen โดยไม่มีข้อมูลเพิ่ม dev จะไม่รู้ว่าต้องแก้อะไรต่อ
แบบฝึก: ตัดสินสถานะ defect ให้เหมาะกับเหตุการณ์
QA รายงานว่า login ด้วย SSO ไม่ได้ Dev ตรวจแล้วพบว่า staging ตั้งค่า callback URL ผิด ไม่ใช่ bug ใน code ควรไปสถานะไหน
ดูคำตอบแนะนำ
ถ้าเป็นปัญหา environment configuration มากกว่าตัว product defect อาจไม่ควรปิดเป็น fixed defect แบบปกติ อาจ mark เป็น rejected / not a bug แล้วเปิดงาน infra หรือ environment issue แยกต่างหาก ขึ้นกับ process ของทีม
QA retest แล้วอาการเดิมหาย แต่พบว่า fix ทำให้หน้าถัดไปแสดงข้อมูลผิดแทน ควร reopen หรือเปิดใหม่
ดูคำตอบแนะนำ
ถ้าอาการใหม่เป็นคนละปัญหาและคนละ expected result มักควรเปิด defect ใหม่ แล้วปิดของเดิมถ้าผ่านตาม scope เดิม เพื่อให้ tracking ชัดว่ามี regression ใหม่เกิดขึ้น
ทีมยืนยันว่า bug นี้มีจริง แต่ release พรุ่งนี้และ impact ต่ำมาก ตัดสินใจแก้ sprint หน้า ควรใช้สถานะอะไร
ดูคำตอบแนะนำ
มักใช้
Deferredหรือสถานะเทียบเท่า เพื่อสื่อว่าทีมรับรู้ defect นี้แล้ว แต่ยังไม่แก้ในรอบนี้Dev เปลี่ยนสถานะ defect เป็น fixed หลัง merge code แต่ยังไม่ได้ deploy ไป staging คุณในฐานะ QA ควรทำอย่างไร
ดูคำตอบแนะนำ
ควร align ความหมายของสถานะกับทีมให้ชัด ถ้า
Fixedในทีมควรหมายถึง “พร้อมให้ retest” ก็ยังไม่ควรเปลี่ยนจนกว่า build จะขึ้น env ที่ QA ใช้จริง ไม่เช่นนั้น defect tracking จะให้ภาพหลอกว่าปัญหาพร้อมตรวจแล้วทั้งที่ยังไม่พร้อม
สิ่งที่ต้องเอาติดตัวไปจากบทนี้
- defect lifecycle ช่วยให้ทีมรู้ว่าปัญหาแต่ละตัวอยู่ตรงไหนของกระบวนการ ไม่ใช่แค่ถูกเจอแล้ว
- สถานะต่าง ๆ เช่น
New,Fixed,Retest,Closed,Reopened,Deferredควรมีความหมายร่วมกันทั้งทีม - QA มีบทบาทตั้งแต่ report, triage, retest ไปจนถึงช่วยให้ defect ถูกปิดอย่างถูกต้อง
- ไม่ใช่ทุกปัญหาต้อง reopen และไม่ใช่ทุก issue ควรถือว่าเป็น bug ใน code
- defect lifecycle ที่ดีช่วยลดงานวน ลดการโทษกัน และทำให้ release decisions ชัดขึ้น