นั่งอ่าน paper เรื่อง Refactoring vs Refuctoring
กับการนำ LLM (Large Language Model) เข้ามาใช้ว่าเป็นอย่างไร ?
ในการ generate code และ การปรับปรุงโครงสร้างของ code (Refactoring)
ซึ่งใน paper นี้จะช่วยแสดงให้เห็นว่าการทำงานเป็นอย่างไร
มีข้อจำกัดอะไรบ้าง
ผลที่ได้มีความน่าเชื่อถืออย่างไร
มีความผิดพลาดอย่างไรบ้าง
มาดูกัน
จากการทดลองในงานจริง ๆ ใน paper นั้นบอกไว้ว่า
- หลังจากที่ให้ AI ทำการ refactor code แล้วนั้น มีเพียง 37% ที่ทำให้ code ไม่พัง หรือ ทำงานได้เช่นเดิม
- เมื่อ refactoring ผ่านแล้วพบว่า code ถูกปรับปรุงจริง ๆ มีความน่าเชื่อถือสูง ทั้งจากคนและเครื่องมือ ซึ่งช่วยลดงานลงไปได้เยอะมาก ๆ และลด technical debt ลงไป
โดย metric ที่ใช้ในการวัดคุณภาพของ code ที่ generate ออกมา
ใช้งาน Code Health Metric ของ CodeSense
ส่วน LLM ที่ใช้ประกอบไปด้วย
ปล. ส่วน GPT-4o ยังไม่ได้ทดสอบในตอนนั้น
แน่นอนว่าในการทำงานของ LLM นั้นไม่ได้สร้างมาเพื่อความถูกต้อง
แต่มันคือการคาดเดา หรือ ความน่าจะเป็น จากข้อมูลและความรู้ที่มีอยู่
จากการทดลองพบรูปแบบที่ผิด ๆ เหมือนกันดังนี้
- ไม่สนใจพวก branch condition ต่าง ๆ หรือ if-else ซึ่งทำให้เกิด bug ขึ้นได้ เช่นการ validate input เป็นต้น
- Invert boolean condition
- การ refactoring code ด้วยการแยกเงื่อนไขที่ซับซ้อนใน function ไปยัง function ย่อย ๆ ก่อให้เกิด bug ได้เช่น
ดังนั้นก็ต้องระมัดระวังอย่างมาก ๆ
เรื่องของผู้ช่วยนั้นดี แต่ความไว้ใจนั่นอาจจะไม่ ต้องตรวจสอบอยู่เสมอ
เครื่องมือดี แต่ต้องระมัดระวัง
อีกอย่างคือ ขั้นตอนในการตรวจสอบคุณภาพของ code ที่ refactor มานั้น
จะมีขั้นตอนดังนี้
เป็นอีกหนึ่ง paper ที่น่าสนใจ
แต่ออกมาตั้งแต่ต้นปีแล้ว หลาย ๆ อย่างปรับเปลี่ยนไปเยอะมาก ๆ
แต่ก็ยังสามารถนำมาเป็นแนวทางได้เช่นกัน