1 คะแนน โดย GN⁺ 2024-02-25 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

เครื่องมือสร้างการทดสอบแบบใหม่ของ Meta ที่ใช้ LLM เปิดโอกาสให้เห็นอนาคตของการพัฒนา

  • Meta เผยแพร่บทความวิจัยชื่อ "Automated Unit Test Improvement using Large Language Models at Meta"
  • บทความนี้แสดงให้เห็นวิธีใช้ AI เพื่อเร่งความเร็วในการพัฒนาและลดบั๊กของซอฟต์แวร์
  • ด้วยการผสาน LLM เข้ากับเวิร์กโฟลว์ของนักพัฒนา ระบบสามารถเสนอแนวทางปรับปรุงซอฟต์แวร์ที่แม่นยำและครบถ้วนเพื่อเพิ่ม code coverage ในปัจจุบัน

ประเด็นสำคัญ

  • TestGen-LLM ใช้แนวทาง 'Assured LLM-based Software Engineering' (Assured LLMSE)
  • ใช้วิธีแบบ ensemble โดยสร้างข้อเสนอการปรับปรุงโค้ดจาก LLM หลายตัว หลายพรอมป์ต์ และไฮเปอร์พารามิเตอร์หลายชุด แล้วคัดเลือกข้อเสนอที่ดีที่สุด
  • TestGen-LLM ถูกออกแบบมาโดยเฉพาะเพื่อปรับปรุงการทดสอบที่มนุษย์เขียนไว้เดิม

สถิติ

  • ในการประเมินผลิตภัณฑ์ Reels และ Stories ของ Instagram นั้น 75% ของ test case ที่ TestGen-LLM สร้างขึ้นสามารถ build ได้ตามปกติ, 57% ผ่านการทดสอบได้อย่างเชื่อถือได้ และ 25% เพิ่ม coverage ได้
  • TestGen-LLM สามารถปรับปรุงได้ 10% ของทุกคลาสที่นำไปใช้ และนักพัฒนายอมรับข้อเสนอการปรับปรุงการทดสอบ 73% เพื่อนำไปใช้ใน production
  • ใน "test-a-thon" ที่วิศวกรของ Meta ใช้สร้างการทดสอบเพื่อเพิ่ม test coverage ของ Instagram ค่ามัธยฐานของจำนวนบรรทัดโค้ดที่การทดสอบจาก TestGen-LLM เพิ่มเข้ามาคือ 2.5

อินไซต์ที่นำไปใช้ได้จริง

  • นี่เป็นตัวอย่างที่ดีของการใช้ LLM เพื่อเพิ่มประสิทธิภาพการพัฒนาและความน่าเชื่อถือของซอฟต์แวร์อย่างมีประสิทธิผล
  • คุณค่าที่แท้จริงของ LLM อยู่ที่การค้นหาและจับ edge case ที่คาดไม่ถึง
  • การนำ LLM ไปใช้ใน production จำเป็นต้องมี orchestration, pipeline และการประมวลผล

วิธีการทำงานของ TestGen-LLM

  • TestGen-LLM ใช้ชุด semantic filters กับโซลูชันตัวเลือกที่สร้างโดย LLM ภายในของ Meta เพื่อเก็บไว้เฉพาะการทดสอบที่มีคุณค่ามากที่สุด
  • ตัวกรอง 1: ความสามารถในการ build, ตัวกรอง 2: การรัน (การผ่านการทดสอบหรือไม่), ตัวกรอง 3: ความไม่เสถียร, ตัวกรอง 4: การปรับปรุง coverage
  • ตัวกรองในการประมวลผลเหล่านี้ช่วยรับประกันการปรับปรุงของ test suite

บทสรุป

  • บทความวิจัยนี้เป็นวิธีที่ดีในการติดตามความก้าวหน้าของ LLM ในพื้นที่ด้าน software reliability ซึ่งนักพัฒนาจำนวนมากก็ใช้ LLM อยู่แล้ว
  • LLM จะสามารถค้นหาบั๊กและทดสอบในระบบซอฟต์แวร์ที่ซับซ้อนมากขึ้นเรื่อย ๆ

ความเห็นของ GN⁺

  • บทความนี้มอบมุมมองที่น่าสนใจเกี่ยวกับผลกระทบที่ปัญญาประดิษฐ์อาจมีต่ออนาคตของการพัฒนาซอฟต์แวร์
  • เครื่องมืออย่าง TestGen-LLM สามารถช่วยอย่างมากในการทำงานของนักพัฒนาให้เป็นอัตโนมัติและเพิ่มประสิทธิภาพ
  • ความก้าวหน้าของเทคโนโลยีลักษณะนี้กำลังมุ่งไปสู่การลดความซับซ้อนของการพัฒนาซอฟต์แวร์ ยกระดับคุณภาพ และประหยัดเวลาของนักพัฒนา

1 ความคิดเห็น

 
GN⁺ 2024-02-25
ความคิดเห็นบน Hacker News
  • มีความเห็นว่าน่าสนใจที่การใช้ LLM (โมเดลภาษาขนาดใหญ่) เพื่อเขียนโค้ดทดสอบมักมาก่อนการลงมือทำจริง เนื่องจากการทดสอบมีหน้าที่อธิบายว่าระบบควรทำงานอย่างไร จึงมีมุมมองว่าส่วนนี้เป็นสิ่งที่มนุษย์ควรกำหนดเอง อย่างไรก็ตาม LLM อาจมีประโยชน์ในการชี้ให้เห็นส่วนที่ยังไม่ได้ระบุอย่างชัดเจน และการเสนอ unit test สำหรับส่วนเหล่านั้นอาจเป็นวิธีใช้ LLM ที่เหมาะสม
  • มีคำวิจารณ์ต่อบล็อกโพสต์ที่ระบุว่าในบรรดา test case ที่ Meta TestGen-LLM สร้างขึ้น ส่วนใหญ่เพิ่มการครอบคลุมโค้ดได้เพียง 2.5 บรรทัด แต่มี test case หนึ่งที่ครอบคลุมได้มากถึง 1326 บรรทัด กรณีนี้เป็นกรณีพิเศษ และในตัวงานวิจัยก็ระบุชัดว่าส่วนใหญ่ของ test case ให้ code coverage ต่ำกว่าที่คาดหวังมาก ผู้เขียนงานวิจัยเรียกสิ่งนี้ว่า "jackpot" เพื่อย้ำว่าผลลัพธ์แบบนี้ไม่ใช่เรื่องปกติ
  • มีความเห็นว่าการเขียนเทสต์ที่ดีเป็นเรื่องยาก code coverage ไม่ได้หมายความว่าดีเสมอไป และการเขียนเทสต์มากเกินไปอาจทำให้โปรแกรมแข็งตัว การใช้ LLM เพื่อสร้างเทสต์ขึ้นมาใหม่อาจดูเหมือนความก้าวหน้า แต่ท้ายที่สุดแล้วมันอาจเป็นเพียงการสร้างโปรแกรมตรวจจับการเปลี่ยนแปลงเท่านั้น
  • มีการชี้ว่าบทสรุปของงานวิจัยเกี่ยวกับ TestGen-LLM ไม่ตรงกับเนื้อหาจริง บทคัดย่อของงานวิจัยพูดถึงอัตราความสำเร็จของ test case แต่รายงานจริงกล่าวถึงอัตราความสำเร็จของ test class ซึ่งเป็นคนละความหมายกันอย่างมาก และในบทสรุปตอนท้ายก็สื่อความแตกต่างนี้ผิดเช่นกัน
  • มีความเห็นเชิงเห็นใจนักพัฒนาในอนาคตที่ต้องมาดูแลโค้ดที่สร้างโดย LLM พร้อมความกังวลว่าโค้ดลักษณะนี้จะดูแลจัดการได้ยาก
  • มีความกังวลว่าโค้ดทดสอบที่สร้างโดย LLM อาจสร้างสภาพแวดล้อมที่ไม่เป็นมิตรกับนักพัฒนา อาจเกิดสถานการณ์ที่ต้องคอยอนุมัติโค้ดทดสอบจาก LLM ที่ดูแลยากอยู่ตลอด แม้การเขียนเทสต์อาจเร็วขึ้น แต่ไม่ได้หมายความว่าการบำรุงรักษาจะง่ายขึ้นเสมอ การทดสอบช่วยทบทวนการออกแบบโค้ด และหากเขียนเทสต์ได้ไม่ง่าย การออกแบบนั้นก็อาจไม่ดีนัก เทสต์มีหน้าที่สร้างความมั่นใจแบบอัตโนมัติและป้องกันข้อผิดพลาดที่อาจเกิดขึ้น แต่เมื่อ coverage สูงขึ้นเรื่อย ๆ ประโยชน์ต่อการลงทุนจะลดลง LLM จะช่วยประหยัดเวลาได้ก็ต่อเมื่อนักพัฒนาที่มีประสบการณ์รู้อยู่แล้วว่าควรทดสอบอะไร
  • มีผู้เล่าประสบการณ์ว่าเคยใช้ GPT-4 สร้าง unit test สำหรับโมดูล TypeScript และได้เทสต์ที่ใช้งานได้จริงสำเร็จ
  • มีข้อสงสัยว่า AI จะรู้ได้อย่างไรว่าควรเขียนเทสต์อะไร วิธีที่ดีที่สุดที่ AI จะช่วยการพัฒนาซอฟต์แวร์ได้คือการตอบคำถามเมื่อโปรแกรมเมอร์ถามเกี่ยวกับโค้ด โดยบางครั้งอาจรวมข้อเสนอแนะด้านโค้ดด้วยหรือไม่ก็ได้ AI ควรช่วยให้เข้าใจโค้ดและเข้าใจวิธีปรับปรุงมันได้
  • มีความเห็นว่าความเห็นเกี่ยวกับ AI code จะมีคุณค่าได้ก็ต่อเมื่อมาจากประสบการณ์เชิงปฏิบัติจริงในการใช้เครื่องมือและตรวจดูผลลัพธ์กับ codebase ที่คุ้นเคย AI code เป็นหัวข้อที่มีความเป็นการเมืองสูงและหลายคนมีความเห็นที่รุนแรง แต่ก็ยังมีความอยากลองใช้จริง เทคโนโลยีเหล่านี้มีต้นทุนการพัฒนาสูงมาก ดังนั้นหากเครื่องมือ AI ไม่ดีขึ้นอย่างมาก ก็อาจยากที่จะอธิบายความคุ้มค่าของต้นทุนดังกล่าว ถึงอย่างนั้นก็ยังมองโลกในแง่ดีต่อสิ่งที่จะทำได้ในอนาคต
  • มีการให้ลิงก์สรุปแบบหนังสือเสียงของงานวิจัย