โค้ดมีบั๊กให้ Claude ช่วยแก้อย่างไร? วิธีหาสาเหตุและตรวจคำตอบ

เมื่อโปรแกรมทำงานไม่ตรงที่คาด Claude ช่วยตรวจโค้ด เสนอจุดที่น่าสงสัย และแนะนำแนวทางแก้ได้ แต่การบอกเพียงว่า “โค้ดมีบั๊ก ช่วยแก้หน่อย” อาจทำให้ได้คำตอบที่เดาสาเหตุหรือแก้กว้างเกินไป ควรบอกอาการ ผลลัพธ์ที่ต้องการ และข้อจำกัดให้ชัด เพื่อให้ Claude วิเคราะห์เป็นขั้นตอน ComSiam แนะนำให้เริ่มจากขอให้ช่วยหาสาเหตุก่อน แล้วค่อยตัดสินใจแก้โค้ด

Claude ช่วยหาบั๊กได้อย่างไร

Claude สามารถช่วยอ่านโค้ดและพิจารณาว่าการทำงานส่วนใดอาจไม่ตรงกับเป้าหมาย เช่น เงื่อนไขผิด ลำดับการคำนวณไม่ถูกต้อง หรือไม่ได้จัดการข้อมูลบางรูปแบบ อย่างไรก็ตาม ข้อเสนอของ Claude เป็นเพียงแนวทางที่ต้องตรวจสอบกับโค้ดและผลลัพธ์จริง เพราะบั๊กเดียวกันอาจมีหลายสาเหตุ และโค้ดที่ส่งมาอาจไม่แสดงบริบททั้งหมด

เตรียมข้อมูลก่อนขอให้ Claude แก้บั๊ก

ก่อนส่งโจทย์ ให้รวบรวมข้อมูลต่อไปนี้:

① เป้าหมายของโค้ด — โปรแกรมหรือฟังก์ชันนี้ควรทำอะไร
② ผลลัพธ์ที่คาดหวัง — เมื่อป้อนข้อมูลตัวอย่างแล้วควรได้อะไร
③ ผลลัพธ์ที่เกิดขึ้นจริง — อธิบายอาการที่พบ
④ โค้ดส่วนที่เกี่ยวข้อง — ส่งเฉพาะส่วนที่ทำให้เกิดปัญหา พร้อมส่วนที่เรียกใช้ถ้าจำเป็น
⑤ ข้อจำกัดในการแก้ — เช่น ให้เปลี่ยนเฉพาะฟังก์ชันนี้ หรือห้ามเพิ่มไลบรารี

ถ้าโปรแกรมมีหลายขั้นตอน ให้บอกด้วยว่าปัญหาเริ่มเกิดตรงไหน และเกิดทุกครั้งหรือเฉพาะบางข้อมูล

ขั้นตอนให้ Claude ช่วยแก้บั๊ก

① ขอให้วิเคราะห์ก่อนแก้
ระบุว่าให้ Claude อธิบายสาเหตุที่เป็นไปได้ก่อน และยังไม่ต้องเขียนโค้ดใหม่ทันที วิธีนี้ช่วยให้คุณประเมินได้ว่า Claude เข้าใจอาการตรงกันหรือไม่

② ตรวจสมมติฐานกับโค้ด
ขอให้ Claude ชี้ว่าบรรทัดหรือเงื่อนไขใดสนับสนุนข้อสันนิษฐาน ถ้าคำตอบอาศัยข้อมูลที่ยังไม่ได้ให้ ให้ส่งข้อมูลเพิ่มแทนการให้แก้จากการคาดเดา

③ ขอการแก้แบบจำกัดขอบเขต
บอกให้แก้เฉพาะส่วนที่เกี่ยวข้อง รักษาพฤติกรรมเดิมของส่วนอื่น และอธิบายว่ามีการเปลี่ยนอะไรบ้าง

④ ทดสอบกรณีเดิมและกรณีเพิ่มเติม
ตรวจข้อมูลที่ทำให้เกิดบั๊กเดิม แล้วลองกรณีปกติ กรณีขอบ และข้อมูลที่ไม่ถูกต้อง

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

Anthropic แนะนำให้ระบุคำสั่งและผลลัพธ์ที่ต้องการอย่างชัดเจน ซึ่งเป็นหลักสำคัญเมื่อขอให้ Claude วิเคราะห์หรือแก้ปัญหาจากโค้ด

ตัวอย่างหาบั๊กจากผลลัพธ์ที่คำนวณผิด

สมมติฟังก์ชันนี้ควรหาค่าเฉลี่ยของตัวเลขในรายการ:

def average(numbers):
    total = 0

    for i in range(1, len(numbers)):
        total += numbers[i]

    return total / len(numbers)

เมื่อใช้ข้อมูล [10, 20, 30] ผลลัพธ์ที่คาดหวังคือ 20 แต่โค้ดอาจคำนวณได้ 16.67 เพราะลูปเริ่มที่ตำแหน่ง 1 ทำให้ข้ามตัวเลขตัวแรก

วิธีแก้ที่ตรงจุดคือรวมตัวเลขทั้งหมดในรายการ:

def average(numbers):
    if not numbers:
        return None

    return sum(numbers) / len(numbers)

ตัวอย่างนี้ยังตรวจกรณีรายการว่างด้วย เพราะการหารด้วยจำนวนสมาชิกของรายการว่างจะทำให้เกิดปัญหา อย่างไรก็ตาม การคืนค่า None เป็นเพียงทางเลือกหนึ่ง ควรเลือกพฤติกรรมให้เหมาะกับโปรแกรม เช่น แสดงข้อความแจ้งเตือน หรือยกข้อผิดพลาดอย่างชัดเจน

Prompt สำหรับให้ Claude วิเคราะห์และแก้บั๊ก

ช่วยวิเคราะห์บั๊กในโค้ดด้านล่าง

เป้าหมาย:
[อธิบายว่าโค้ดควรทำอะไร]

ข้อมูลที่ใช้ทดสอบ:
[ระบุตัวอย่างข้อมูล]

ผลลัพธ์ที่คาดหวัง:
[ระบุผลที่ควรได้]

ผลลัพธ์ที่เกิดขึ้นจริง:
[ระบุอาการที่พบ]

ข้อจำกัด:
- วิเคราะห์สาเหตุที่เป็นไปได้ก่อน ยังไม่ต้องแก้โค้ด
- ชี้ส่วนของโค้ดที่เกี่ยวข้องกับแต่ละสาเหตุ
- หลังอธิบายสาเหตุแล้ว เสนอวิธีแก้ที่เปลี่ยนน้อยที่สุด
- อย่าเปลี่ยนพฤติกรรมของส่วนอื่น
- เสนอกรณีทดสอบหลังแก้ ทั้งกรณีปกติและกรณีขอบ

โค้ด:
[วางโค้ดที่นี่]

หากเห็นด้วยกับการวิเคราะห์แล้ว ค่อยขอให้ Claude แสดงโค้ดฉบับแก้ไขพร้อมสรุปความเปลี่ยนแปลง วิธีนี้ทำให้ตรวจแนวคิดก่อนนำโค้ดใหม่ไปใช้ได้ง่ายขึ้น

วิธีตรวจว่าการแก้ไขได้ผล

  • ทดสอบข้อมูลชุดเดิมที่ทำให้เกิดบั๊ก
  • ตรวจว่าผลลัพธ์ตรงกับที่คาดไว้
  • ทดสอบข้อมูลปกติและกรณีขอบ เช่น รายการว่างหรือค่าติดลบ
  • ตรวจว่าการแก้ไม่ได้เปลี่ยนผลของกรณีที่เคยทำงานถูกต้อง
  • ถ้าโปรเจกต์มีชุดทดสอบ ให้รันชุดทดสอบที่เกี่ยวข้องหลังแก้
  • เปรียบเทียบโค้ดก่อนและหลัง เพื่อดูว่ามีการเปลี่ยนส่วนใดบ้าง

ถ้ายังแก้ไม่ได้ ให้ส่งผลทดสอบล่าสุดและโค้ดฉบับปัจจุบันกลับไป อย่าส่งเฉพาะโค้ดก่อนแก้ เพราะ Claude อาจไม่เห็นว่ามีการเปลี่ยนแปลงอะไรไปแล้ว

ข้อควรระวัง

อย่าให้ Claude แก้โค้ดทั้งโปรเจกต์เมื่อปัญหาอยู่ในฟังก์ชันเล็ก ๆ และอย่านำคำตอบไปใช้ทันทีโดยไม่ทดสอบ โดยเฉพาะโค้ดที่เกี่ยวข้องกับการเข้าสู่ระบบ การชำระเงิน หรือข้อมูลส่วนบุคคล

ก่อนส่งโค้ดให้ Claude ควรลบรหัสผ่าน API Key และข้อมูลจริงของลูกค้าออก หากต้องการให้ตรวจการเชื่อมต่อหรือค่าตั้งระบบ ให้แทนค่าลับด้วยข้อความตัวอย่าง เช่น YOUR_API_KEY

คำถามที่พบบ่อย

ควรให้ Claude แก้โค้ดทันทีหรือให้วิเคราะห์ก่อน

ควรเริ่มจากการให้วิเคราะห์สาเหตุ โดยเฉพาะเมื่อยังไม่แน่ใจว่าบั๊กเกิดจากส่วนใด เมื่อเข้าใจสาเหตุและตรวจแล้วว่าตรงกับอาการ จึงค่อยขอวิธีแก้

ต้องส่งโค้ดทั้งหมดให้ Claude หรือไม่

ไม่จำเป็น ควรส่งส่วนที่เกี่ยวข้องกับปัญหาและบริบทที่จำเป็น หากส่งเฉพาะบรรทัดเดียวแล้ว Claude มองไม่เห็นตัวแปรหรือฟังก์ชันที่เกี่ยวข้อง ให้เพิ่มส่วนที่ขาด

จะรู้ได้อย่างไรว่าการแก้บั๊กไม่ทำให้ส่วนอื่นเสีย

ทดสอบกรณีเดิมและกรณีที่เคยทำงานได้ รวมถึงรันชุดทดสอบของโปรเจกต์ถ้ามี การแก้เพียงจุดเดียวช่วยจำกัดผลกระทบ แต่ไม่ได้รับประกันว่าส่วนอื่นจะไม่มีปัญหา จึงต้องตรวจผลหลังแก้

สรุป

ให้ Claude ช่วยแก้บั๊กได้อย่างมีประสิทธิภาพโดยอธิบายเป้าหมาย ผลที่คาดหวัง และอาการจริง จากนั้นให้วิเคราะห์ก่อนแก้ กำหนดขอบเขตการเปลี่ยนโค้ด และทดสอบทั้งกรณีที่พบปัญหากับกรณีอื่น ๆ เสมอ ผู้อ่าน ComSiam สามารถใช้ Prompt ในบทความนี้เป็นจุดเริ่มต้น แล้วเติมรายละเอียดให้ตรงกับโปรเจกต์ของตน