ผมตรวจระบบของตัวเอง แล้วเจอบั๊ก 11 ตัว
2026-09-27 · 2 นาที
เจ้าของสถาบันถามคำถามที่ตอบยากกว่าที่คิด: "ระบบมันทำงานถูกจริงหรือเปล่า"
เทสต์ผ่านหมด production ก็ไม่ล่ม แต่คำถามของเขาไม่ได้แปลว่า "มี exception ไหม" เขากำลังถามว่า "กฎในหัวฉัน กับกฎในโค้ด มันตรงกันหรือเปล่า"
ซึ่งเทสต์ตอบไม่ได้ เพราะเทสต์ยืนยันแค่ว่าโค้ดทำสิ่งที่ผมคิดว่าควรทำ ไม่ได้ยืนยันว่าสิ่งที่ผมคิดนั้นถูก
วิธีที่ใช้
ผมนั่งอ่าน route, lib และ middleware ของ backend ทั้งหมด ทีละไฟล์ แล้วเขียนลงเอกสารว่า "ในโค้ดจริง ฟีเจอร์นี้ตัดสินใจยังไง" — ไม่ใช่ว่าควรตัดสินใจยังไง
พออ่านเจออะไรที่ดูแปลก ผมไม่เดาว่าเป็นบั๊ก ผมไปสร้างเคสขึ้นมายิงกับฐานข้อมูลเทสต์จริงเพื่อดูว่ามันเกิดขึ้นได้จริงไหม
ผลคือบั๊กที่ยืนยันได้ 11 ตัว ที่ผมไม่เคยรู้มาก่อน ตัวที่หนักสุด:
- ผู้ปกครองเห็นและลาคาบของลูกคนอื่นได้ ถ้าเป็นช่วงเวลาเดียวกันแต่คนละเวลาเริ่ม
- ค่าสอนกลุ่มถูกนับซ้ำ ตอนโคลนตารางทั้งชุด ซึ่งแปลว่าจ่ายเกิน
- การ์ดยืนยันเรียนชดเชยใบเก่า ยังกดยืนยันข้อเสนอใหม่ได้
- สร้างตารางสัปดาห์ใหม่แล้วคาบที่มีคนสอนแทนถูกสร้างซ้ำ
ทุกตัวคือเรื่องเงินหรือสิทธิ์การเข้าถึงข้อมูล ไม่มีตัวไหนที่ทำให้ระบบ crash — ซึ่งเป็นเหตุผลว่าทำไมมันถึงรอดสายตามาได้นาน
ส่วนที่ไม่ใช่บั๊ก
นอกจากบั๊ก ผมได้คำถามอีก 7 ข้อที่ไม่ใช่ปัญหาทางเทคนิค แต่เป็นการตัดสินใจทางธุรกิจที่ไม่มีใครเคยตอบ เช่น
- นักเรียนขาดเรียนโดยไม่มีแพ็กเกจ จะคิดเงินไหม
- เรียนชดเชยแบบตัวต่อตัว ครูได้ค่าสอนเท่าไร
พวกนี้โค้ดต้องเลือกสักอย่างอยู่แล้ว และมันก็เลือกไปแล้วโดยไม่มีใครรู้ตัว ผมแยกมันออกมาเป็นคำถามให้เจ้าของตอบ แล้วค่อยเขียนคำตอบกลับลงไปในโค้ด พร้อมเทสต์ที่ล็อกคำตอบนั้นไว้
สิ่งที่ตามมา
บั๊กทั้ง 11 ตัวถูกแก้ในวันเดียวกัน พร้อม regression test ที่ยิงกับฐานข้อมูลจริง คำถามทั้ง 7 ข้อถูกตอบและเขียนลงโค้ด เอกสาร audit ยังอยู่ใน repo พร้อมตารางสถานะของทุกข้อ
และคู่มือผู้ใช้ก็กลายเป็น GitBook 38 หน้า ที่มีหมวด "Logic ของระบบ" อธิบายว่าแต่ละฟีเจอร์ตัดสินใจยังไงจริง ๆ — อ่านจากโค้ด ไม่ใช่จากความทรงจำ
บทเรียน
เทสต์เขียวไม่ได้แปลว่าระบบถูก มันแปลว่าระบบทำตามสิ่งที่คุณเคยคิดไว้ ส่วนการอ่านโค้ดตัวเองเหมือนเป็นคนแปลกหน้าแล้วจดว่า "มันทำอะไรจริง ๆ" คือสิ่งเดียวที่จับความต่างระหว่างสองอย่างนี้ได้
ถ้าระบบของคุณเกี่ยวกับเงิน ผมแนะนำให้ทำอย่างน้อยปีละครั้ง