ข้ามไปเนื้อหาหลัก

ทดสอบระบบรีวิวโค้ด AI: เมื่อนักศึกษาจงใจฝังบั๊กใน PR ของตัวเอง

นักศึกษารายหนึ่งทดสอบระบบรีวิวโค้ด AI ฟรี โดยการจงใจฝังบั๊กเครื่องหมายบวกสลับลบในฟังก์ชันคำนวณส่วนลด เพื่อตรวจความแม่นยำของโมเดล

เรียบเรียงโดย AI
Inewgen
26 Aug 2026ที่มา: Dev.to4 นาทีอ่าน (0 ครั้ง)อัปเดตล่าสุด 29 Aug 2026
แชร์
ทดสอบระบบรีวิวโค้ด AI: เมื่อนักศึกษาจงใจฝังบั๊กใน PR ของตัวเอง

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ขนาดตัวอักษร
  • นักศึกษาทดสอบ AI reviewer โดยการจงใจฝังบั๊กตรรกะลงในฟังก์ชันโค้ดของตัวเอง
  • สร้างชุดทดสอบฮาร์เนสด้วย Python และใช้งานผ่าน MonkeyCode
  • ผลลัพธ์เผยให้เห็นว่าโมเดล AI อาจให้ผลลัพธ์ที่เปลี่ยนไปได้ในแต่ละช่วงเวลา
  • บทเรียนสำคัญคือ AI reviewer ถือเป็นซอฟต์แวร์ชิ้นหนึ่งที่จำเป็นต้องมีระบบทดสอบความถูกต้อง

ก่อนที่จะกดรวมโค้ดเข้าสู่ระบบ นักพัฒนารายหนึ่งซึ่งเป็นนักศึกษาบนแพลตฟอร์ม DEV ได้รับคำตอบจากระบบรีวิวโค้ด AI ว่าไม่มีปัญหาใดๆ และพร้อมใช้งานเรียบร้อยแล้ว ทว่าความลังเลก็เกิดขึ้นในใจเมื่อต้องฝากความหวังไว้กับโมเดลปัญญาประดิษฐ์ที่ตนเองไม่เคยทดสอบประสิทธิภาพมาก่อนอย่างจริงจัง

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

ฟังก์ชันตัวอย่างที่ใช้งานเขียนด้วยภาษา Python สำหรับคำนวณราคารวมส่วนลด:

def price_with_discount ( price , discount_pct ): if discount_pct < 0 or discount_pct > 100 : raise ValueError ( " discount must be between 0 and 100 " ) factor = 1 + discount_pct / 100 # seeded bug: should be minus return round ( price * factor , 2 )

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

การสร้างชุดทดสอบย้อนหลังหรือ regression test สำหรับระบบรีวิว AI สะท้อนให้เห็นแนวคิดที่ว่า AI reviewer ก็คือซอฟต์แวร์ประเภทหนึ่งเช่นกัน การที่โมเดลภาษาในปัจจุบันมีการอัปเดตและเปลี่ยนแปลงอยู่ตลอดเวลา ทำให้พฤติกรรมและความสามารถในการจับบั๊กของมันไม่นิ่ง การมีสคริปต์ตรวจวัดผลอย่างสม่ำเสมอจึงช่วยให้ทีมนักพัฒนาทราบถึงความเปลี่ยนแปลงที่เกิดขึ้นได้ทันที แทนที่จะเชื่อถือความแม่นยำแบบเดิมจากเดือนก่อน

สำหรับข้อกำหนดเบื้องต้นในการใช้งานสคริปต์ทดสอบนี้ ประกอบด้วย:

ไม่อยากพลาดข่าวใหม่?

สมัครรับสรุปข่าวสารใหม่ทางอีเมล ไม่บ่อยจนรำคาญ

โฆษณา

  • Python 3.10 ขึ้นไป
  • Endpoint ที่รองรับรูปแบบการเชื่อมต่อแบบ chat-completions ของ OpenAI พร้อม API Key
  • ผู้เขียนเลือกใช้บริการโมเดลฟรีและเซิร์ฟเวอร์ฟรีจากโครงการโอเพนซอร์ส MonkeyCode (บทความนี้จัดทำขึ้นส่วนหนึ่งของโครงการประชาสัมพันธ์ผลิตภัณฑ์ MonkeyCode)

ผลลัพธ์ที่คาดหวังจากการรันสคริปต์ตรวจทานผ่านคำสั่ง python review_harness.py price.py จะได้รูปแบบข้อมูลประมาณนี้:

{ "caught" : true , "response" : "Line 4: `factor = 1 + discount_pct / 100` — the sign is flipped. A 20% discount increases the price by 20% instead of reducing it." }

เครื่องมือตรวจสอบนี้ใช้การค้นหาข้อความอาการของบั๊ก (symptom phrase) แทนที่จะเป็นการจับคู่แบบตรงตัวร้อยเปอร์เซ็นต์ ซึ่งเป็นข้อแลกเปลี่ยนที่ยอมรับได้เพื่อให้ใช้งานง่าย แต่อาจเกิดกรณีผลลัพธ์ลบปลอม (false negative) ได้เช่นกัน หากโมเดลตรวจพบโค้ดที่มีปัญหาแต่ใช้คำอธิบายอื่น

1จำนวนบั๊กตรรกะที่จงใจฝังลงในฟังก์ชันทดสอบส่วนลด

การรันการทดสอบเพียงครั้งเดียวตอบคำถามได้แค่เฉพาะหน้า แต่การตั้งค่าให้รันตามตารางเวลา (scheduled run) ด้วย cron job บนเซิร์ฟเวอร์ฟรีช่วยตอบคำถามที่ดีกว่าว่า ระบบรีวิวนี้ยังคงมีประสิทธิภาพดีอยู่หรือไม่ในระยะยาว เหตุการณ์ที่ทำให้เขาตัดสินใจใช้งานระบบนี้ต่อไป คือตอนที่โมเดลตอบด้วยความมั่นใจว่าไม่พบบั๊กตรรกะใดๆ ในไฟล์ที่มีข้อผิดพลาดเรื่องเครื่องหมาย ทั้งที่ตัวโค้ดไม่ได้เปลี่ยนแปลงไปเลย แต่เป็นตัวโมเดลเองที่เปลี่ยนไป

บทเรียนสำคัญที่ได้เรียนรู้มีอยู่ 3 ประการ ประการแรก ระบบรีวิวที่ไม่สามารถทดสอบได้ก็เป็นเพียงแค่ความคิดเห็นที่มีไวยากรณ์สลักสำคัญ ประการที่สอง การฝังบั๊กคือกระบวนการปรับเทียบค่า ไม่ใช่การก่อกวน และประการที่สาม การทดสอบแบบครั้งเดียวจะเสื่อมสภาพตามกาลเวลา

อย่างไรก็ตาม แนวทางนี้ยังมีข้อจำกัดสำหรับผู้ที่ไม่สามารถแก้ไขโค้ดต้นทางได้ รวมถึงฟรีเทียร์ที่มักมีข้อจำกัดด้านอัตราการเรียกใช้งาน (rate limits) และความหน่วง ผู้สนใจสามารถนำแนวคิดไปปรับใช้กับ Endpoint อื่นๆ ที่ตนเองถือครองอยู่ได้เช่นกัน

ที่มา: Dev.to

ความคิดเห็น

แสดงความคิดเห็น
0/2000

พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้