เช็กลิสต์การดีบัก
ทำตามลำดับนี้ทีละข้อ การกระโดดตรงไป "แก้เลย" คือสิ่งที่ทำให้ AI วนเวียนไม่จบ
- ทำให้ปัญหาเกิดซ้ำได้อย่างแน่นอน หาขั้นตอนที่แน่ชัดซึ่งทำให้บั๊กเกิดขึ้นทุกครั้ง บั๊กที่คุณทำให้เกิดซ้ำไม่ได้ก็คือบั๊กที่คุณยืนยันไม่ได้ว่าแก้แล้วจริงหรือไม่ — คุณจะได้แต่เดาว่ามันหายไปหรือเปล่า ถ้ามันเกิดขึ้นเป็นครั้งคราว ให้ตามหาตัวแปรที่เป็นตัวสวิตช์: อินพุตเฉพาะเจาะจง สถานะล็อกอินหรือไม่ล็อกอิน หรือเครือข่ายที่ช้า
- อ่านข้อผิดพลาดจริง ๆ อย่าอ่านผ่าน ๆ ข้อความแสดงข้อผิดพลาดและส่วน บนสุด ของ stack trace มักจะระบุไฟล์และบรรทัดที่เกิดปัญหา มือใหม่มักเลื่อนผ่านประโยคที่มีประโยชน์ที่สุดบนหน้าจอไปเพราะมันดูน่ากลัว
- รวบรวมบริบท เก็บข้อความข้อผิดพลาด stack trace โค้ดที่เกี่ยวข้อง และคำอธิบายสั้น ๆ ว่าคุณคาดหวังอะไร
- ส่งภาพรวมทั้งหมดให้ AI วางทั้งหมดข้างต้นในข้อความเดียว ให้มันตั้งสมมติฐาน
- ตั้งสมมติฐาน ไม่ใช่ทางแก้ ถามว่า "อะไรที่อาจทำให้เกิดสิ่งนี้ได้?" ก่อนจะถามว่า "แก้ตรงนี้ที" ทางแก้ที่ผิดจากทฤษฎีที่ผิดเสียเวลาเปล่า — และบางครั้งยังเพิ่มบั๊ก ตัวที่สอง ทับซ้อนกับตัวแรกอีกด้วย
- เพิ่ม logging เพื่อทดสอบสมมติฐาน ยืนยันว่าโค้ดกำลังทำอะไรอยู่จริง ๆ ก่อนที่จะเปลี่ยนแปลงมัน
- ค้นหาแบบทวิภาค (binary search) หาจุดปัญหา จำกัดขอบเขตว่า ตรงไหน ที่พัง โดยตัดพื้นที่ต้องสงสัยลงครึ่งหนึ่งซ้ำ ๆ
- แก้ที่สาเหตุที่แท้จริง ไม่ใช่แค่อาการ ให้แน่ใจว่าทางแก้จัดการกับ สาเหตุ ที่มันพัง ไม่ใช่แค่ปัญหาที่มองเห็น
- ตรวจสอบทางแก้และเช็กว่ามีผลกระทบย้อนกลับหรือไม่ รันขั้นตอนที่ทำให้เกิดปัญหาซ้ำอีกครั้ง แล้วตรวจสอบว่าฟีเจอร์ใกล้เคียงยังทำงานได้ — regression คือเมื่อการแก้ปัญหาแอบทำให้สิ่งที่เคยใช้ได้พังไปเงียบ ๆ เหมือนการซ่อมรอยรั่วจุดหนึ่งแล้วทำให้ท่อข้าง ๆ แตก
เช็กลิสต์นั้นแท้จริงแล้วคือลูปเดียวที่คุณวนซ้ำจนกว่าบั๊กจะหายไป แต่ละขั้นตอนส่งหลักฐานต่อไปให้ขั้นถัดไป และการตรวจสอบที่ล้มเหลวก็แค่ส่งคุณกลับไปวนอีกครั้งพร้อมกับสิ่งที่คุณเรียนรู้มา:
┌──────────────┐
│ REPRODUCE │ make it happen every time
└──────┬───────┘
▼
┌──────────────┐
│ READ ERROR + │ what does it actually say?
│ GATHER │ collect trace + code + context
└──────┬───────┘
▼
┌──────────────┐
│ HYPOTHESIS │ "what could cause this?"
└──────┬───────┘
▼
┌──────────────┐
│ CONFIRM w/ │ add a log, get evidence
│ LOGGING │
└──────┬───────┘
wrong│ correct
┌──────┘ guess ▼
│ ┌──────────────┐
│ (new │ FIX root │ not the symptom
│ theory) │ cause │
│ └──────┬───────┘
│ ▼
│ ┌──────────────┐ fails / regression
└────────────┤ VERIFY │──────────┐
│ + regressions│ │
└──────┬───────┘ │
│ passes │
▼ ◀───────┘
✔ DONE (loop back around)
ลำดับนี้ไม่ได้สุ่มมาเฉย ๆ แต่ละขั้นตอนสร้างหลักฐานที่ขั้นตอนถัดไปต้องการ การทำให้เกิดซ้ำให้สิ่งที่คุณอ่านได้ การอ่านให้บริบทที่ต้องรวบรวม บริบทให้สิ่งที่ AI ใช้ตั้งสมมติฐานได้ ข้ามขั้นตอนใดไปก็เท่ากับป้อนช่องโหว่ให้ขั้นตอนถัดไป