บันทึกการวิจัย
การปรับโครงสร้างด้วย AI: วิธีการและหลักฐาน
แนวทางประเมินวิธีปรับโครงสร้างโค้ดโดยอาศัย AI ที่พัฒนาขึ้นเมื่อไม่นานมานี้ โดยไม่สับสนระหว่างแพตช์ที่สร้างขึ้นอย่างสมเหตุสมผลกับการคงรักษาพฤติกรรมที่ผ่านการตรวจสอบแล้ว
คำตอบโดยตรง
วิธีการและหลักฐานใดสำคัญต่อการปรับโครงสร้างโค้ดโดยคงพฤติกรรมด้วยความช่วยเหลือของ AI
แยกข้อเสนอการแปลงออกจากการดำเนินการที่เชื่อถือได้และการทวนสอบ หากเป็นไปได้ ให้โมเดลระบุการปรับโครงสร้างโค้ดและนำไปใช้ผ่านเอนจินปรับโครงสร้าง จากนั้นต้องมีการคอมไพล์ การทดสอบ การตรวจสอบแบบสถิต และหลักฐานว่าการแปลงที่มุ่งหมายเกิดขึ้นจริง
เหตุผลที่ความแตกต่างนี้สำคัญ
วิธีการและหลักประกันที่กล่าวอ้างต้องอ้างอิงขอบเขตที่สังเกตได้เดียวกัน
การปรับโครงสร้างโค้ดควรคงพฤติกรรมที่สังเกตได้ไว้พร้อมกับปรับปรุงโครงสร้างภายใน อย่างไรก็ดี โมเดลภาษาอาจเสนอการเขียนใหม่ที่ดูน่าเชื่อถือโดยไม่ได้พิสูจน์เงื่อนไขส่วนใดของข้อตกลงดังกล่าวเลย ดังนั้นความสมเหตุสมผลเพียงระดับพื้นผิวจึงไม่เพียงพอ
งานล่าสุดแบ่งแยกบทบาทด้วยแนวทางต่างกัน กล่าวคือ โมเดลอาจระบุการแปลงที่ทราบอยู่แล้วเพื่อให้กลไกที่เชื่อถือได้ดำเนินการ หรืออาจสร้างแพตช์เพื่อนำไปผ่านการคอมไพล์ การทดสอบ การวิเคราะห์แบบสถิต และการตรวจจับการปรับโครงสร้างโค้ด พื้นผิวที่รองรับการตรวจสอบยืนยันมีความสำคัญไม่น้อยไปกว่าตัวโมเดล
กระบวนการเชิงปฏิบัติ
ระบุการปรับโครงสร้างโค้ดที่มุ่งหมาย
ระบุการเปลี่ยนแปลงเชิงโครงสร้างและพฤติกรรมที่ต้องคงเดิม แทนการร้องขอให้ปรับปรุงโค้ดแบบกว้าง ๆ
เลือกใช้การดำเนินการที่เชื่อถือได้สำหรับการแปลงที่ทราบแน่ชัด
เมื่อเอนจินปรับโครงสร้างโค้ดรองรับการดำเนินการ ให้ใช้แบบจำลองสำหรับการตรวจจับหรือเลือกพารามิเตอร์ และใช้เอนจินเพื่อดำเนินการจริง
ตรวจสอบแพตช์ที่สร้างในระดับคลังโค้ด
คอมไพล์ รันการทดสอบที่เกี่ยวข้อง ใช้การตรวจสอบแบบสถิต และยืนยันว่าเกิดการปรับโครงสร้างโค้ดตามเจตนาโดยไม่มีการเปลี่ยนแปลงที่ไม่เกี่ยวข้อง
ตรวจสอบความเสี่ยงคงเหลือ
บันทึกพฤติกรรมที่การทดสอบยังไม่ครอบคลุม การทดสอบที่ให้ผลไม่แน่นอน ผลกระทบข้ามไฟล์ และกรณีที่แพตช์ดูสมเหตุสมผลแต่ไม่สามารถตรวจสอบยืนยันได้
หลักฐานที่ต้องกำหนดให้มี
ความหนักแน่นของข้ออ้างขึ้นอยู่กับสมบัติที่วัดภายหลังการสร้างหรือการถอดรหัส
- มีการระบุการแปลงอย่างชัดเจน มิได้บรรยายเพียงว่าเป็นการปรับปรุงคุณภาพโค้ด
- หลังการเปลี่ยนแปลง โค้ดคอมไพล์ได้และผ่านการทดสอบที่เกี่ยวข้อง
- การตรวจสอบแบบสถิตและการตรวจจับการปรับโครงสร้างโค้ดสนับสนุนข้อกล่าวอ้างเชิงโครงสร้าง
- มีการวัดหรือตรวจทาน diff ที่ไม่เกี่ยวข้องและอยู่นอกขอบเขตที่ตั้งใจ
- มีการเปิดเผยข้อจำกัดด้านบริบทของคลังโค้ดและความครอบคลุมของการทดสอบ
สิ่งที่งานวิจัยซึ่งเชื่อมโยงไว้รายงาน
- บทความในเว็บไซต์เกี่ยวกับการควบคุมปริภูมิแฝงแบบลำดับชั้นเป็นหลักฐานที่เกี่ยวเนื่องกับการสร้างแบบมีขอบเขต มิใช่เกณฑ์มาตรฐานสำหรับการปรับโครงสร้างโค้ดโดยคงพฤติกรรม
- การวัดอัตราการแจง อิสระในการแก้ไข และความหลากหลายของงานนี้อาจช่วยในการออกแบบส่วนควบคุม แต่ไม่อาจทดแทนการคอมไพล์ การทดสอบ หรือการตรวจจับการปรับโครงสร้างโค้ดได้
- สำหรับข้อกล่าวอ้างเรื่องการปรับโครงสร้างโค้ด ข้อกำหนดด้านหลักฐานควรคำนึงถึงทั้งพฤติกรรมและบริบทของคลังโค้ด
ขอบเขตของการศึกษา
- การผ่านการทดสอบที่มีอยู่ไม่ได้พิสูจน์ความสมมูลเชิงความหมายของพฤติกรรมที่ไม่ได้รับการทดสอบ
- diff ที่เล็กกว่าไม่ได้หมายถึงการปรับโครงสร้างที่ถูกต้องโดยอัตโนมัติ
- การทดลองบนเว็บไซต์ที่เชื่อมโยงไว้ครอบคลุมฟังก์ชัน Python ขนาดสั้น และไม่ได้ประเมินการปรับโครงสร้างโค้ดระดับคลังโค้ด
แหล่งข้อมูลหลักและงานที่เกี่ยวข้อง
โปรดอ้างอิงบทความที่เชื่อมโยงไว้สำหรับวิธีการดั้งเดิม การวัด และข้อจำกัดที่ระบุ
- An Empirical Study on the Potential of LLMs in Automated Software Refactoring
ศึกษาการปรับโครงสร้างโค้ดที่ LLM เสนอ และการนำไปใช้อีกครั้งด้วยเอนจินปรับโครงสร้างที่เชื่อถือได้
- SWE-Refactor: A Repository-Level Benchmark for Real-World LLM-Based Code Refactoring
การคอมไพล์ การทดสอบ และการประเมินที่มุ่งเน้นการปรับโครงสร้างโค้ดในระดับคลังโค้ด
- Inspectable Control for Structure-Preserving Software Regeneration
หลักฐานที่เกี่ยวข้องกับการสร้างภายใต้ขอบเขตจำกัดและข้อจำกัดที่ระบุไว้อย่างชัดเจน