เว็บไซต์นี้ใช้คุกกี้เพื่อทำให้คุณมีประสบการณ์ที่ดีในการใช้งานเว็บไซต์ โปรดคลิก “ยอมรับ”

“Matcha” เครื่องมือเพื่อช่วยเหลือนักพัฒนาซอฟท์แวร์ในการปรับปรุงคุณภาพโค้ดให้ดีขึ้น

หลังจากประสบความสำเร็จจากการสร้างสรรค์ “Siamese” เครื่องมือที่ช่วยนักพัฒนาซอฟต์แวร์ ในการตรวจสอบว่าโค้ดในซอฟต์แวร์ของตนนั้นถูกคัดลอกมาจากแหล่งอื่นหรือไม่ รวมถึงมีส่วนช่วยในการตรวจสอบโค้ดที่อาจนำมาใช้โดยติดปัญหาลิขสิทธิ์ จากผลงานวิทยานิพนธ์เรื่อง “การตรวจวัดความเหมือนของโค้ดและการค้นหาโค้ดโคลนในข้อมูลโค้ดขนาดใหญ่ (Code Similarity and Clone Search in Large-Scale Source Code Data)” ซึ่งได้รับรางวัลวิทยานิพนธ์ระดับดีมาก จากสำนักงานการวิจัยแห่งชาติ (วช.) ประจำปีงบประมาณ 2564 แล้วนั้น เวลานี้ ดร.ชัยยงค์ รักขิตเวชสกุล อาจารย์ประจำกลุ่มวิชาวิทยาการคอมพิวเตอร์ คณะเทคโนโลยีสารสนเทศและการสื่อสาร (ICT) มหาวิทยาลัยมหิดล และนักวิจัยร่วมทีม Mr. Matheus Paixao จาก State University of Ceara (UECE) ประเทศบราซิล อยู่ระหว่างการพัฒนา “Matcha” เครื่องมือเพื่อช่วยเหลือนักพัฒนาซอฟท์แวร์ในการปรับปรุงคุณภาพโค้ดให้ดีขึ้น ซึ่งเป็นผลงานวิจัยต่อเนื่องจากเครื่องมือ “Siamese”

โดยเหตุผลที่ ดร.ชัยยงค์ สร้างสรรค์เครื่องมือ “Matcha” เนื่องจากมองเห็นถึงสถานการณ์และความจำเป็นที่นักพัฒนาซอฟท์แวร์ในปัจจุบันมักจะพึ่งพาอาศัยการค้นหาโค้ดบน Stack Overflow ชุมชนออนไลน์ที่เปิดโอกาสให้โปรแกรมเมอร์ ไม่ว่าจะเป็นนักพัฒนาแอปพลิเคชันหรือนักสร้างเว็บไซต์จากทั่วโลกได้เข้าไปตั้งคำถามและค้นหาคำตอบ รวมถึงแบ่งปันความรู้เกี่ยวกับการเขียนโค้ดและการพัฒนาซอฟต์แวร์ อย่างไรก็ดี โค้ดที่ถูกนำมาใช้จาก Stack Overflow อาจจะไม่ใช่เวอร์ชันที่ดีที่สุด เพราะโค้ดในคำตอบบน Stack Overflow มีการปรับปรุงอยู่เสมอ Matcha จึงเป็นเครื่องมือที่จะมาช่วยตรวจสอบโค้ดที่เหมือนกับคำตอบบน Stack Overflow และแนะนำโค้ดเวอร์ชันที่ดีกว่าให้กับนักพัฒนา

“ด้วยความที่ Stack Overflow มีลักษณะเป็น crowdsourcing คือเป็นแพลตฟอร์มที่เกิดจากการรวมตัวของผู้ถามและผู้ตอบเกี่ยวกับการเขียนโค้ด ตัวโค้ดที่เป็นคำตอบก็มาจากปัญญาของคนหมู่มากช่วย ๆ กันให้คำตอบ ยกตัวอย่างเช่น มีคนมาตั้งคำถามว่า ตนเองอยากจะแก้ปัญหาการเชื่อมต่อฐานข้อมูล แล้วสักพักก็จะมีคำตอบจากนักพัฒนาคนอื่นบน Stack Overflow ว่า มีวิธีการแก้ปัญหาแบบนี้ แบบที่ 1 แบบที่ 2 และแบบที่ 3 และหลังจากนั้นก็จะยังมีคนมาคอยปรับปรุงคำตอบเหล่านั้นให้ดีขึ้นเรื่อย ๆ บางที ชุมชน Stack Overflow ก็อาจจะช่วยกันบอกว่าคำตอบที่ให้มาเนี่ย ยังไม่ดีที่สุดนะ ยังมีปัญหาตรงนี้อยู่ ก็จะมีคนมาแก้ปัญหาตรงนี้ให้อีก ซึ่งวิธีการคือส่วนใหญ่คนตอบจะเข้าไปปรับคำตอบให้มันถูก หรือไม่ก็สร้างเป็นคำตอบใหม่”

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

“ถ้าเป็นสมัยก่อน นักพัฒนาอาจจะต้องนั่งแก้โค้ดด้วยตัวเองไปเรื่อยๆ โดยอาจจะใช้เวลาเป็นอาทิตย์ แต่พอมีอินเทอร์เน็ต มี Google บวก Stack Overflow นักพัฒนาจึงเริ่มเปลี่ยนพฤติกรรมในการทำงาน พอเกิดปัญหา ถ้าลองแก้ด้วยตัวเอง 15-30 นาที แล้วยังไม่เวิร์ค ก็จะเริ่มเอาปัญหาไปค้นหาใน Google เพื่อดูว่ามีใครที่มีปัญหาแบบเดียวกับเราบ้าง แล้วส่วนใหญ่ก็มักจะเจอคำตอบ หรือไม่ก็เจอปัญหาที่ใกล้เคียง ด้วยความที่ Stack Overflow เป็นแพลตฟอร์มคำถามคำตอบ ถ้าเรามีคำถามที่ตรงกับคนอื่น เราก็มักจะได้คำตอบ อย่างน้อยก็เป็นคำตอบที่ใกล้เคียง เอาไปประยุกต์ใช้ได้ ดีกว่าการไปอ่านหนังสือ เพราะหนังสือไม่ได้โฟกัสไปที่คำถาม”

ด้วยเหตุนี้ ดร.ชัยยงค์ จึงนำเครื่องมือ “Siamese” มาใช้เป็นพื้นฐานในการพัฒนาเครื่องมือ “Matcha” เพื่อสนับสนุนการทำงานของบุคลากรสายพัฒนาซอฟท์แวร์ โดย “Siamese” จะช่วยค้นหาข้อมูลโค้ดจากฐานข้อมูลโค้ดขนาดใหญ่ให้อย่างรวดเร็ว ทว่า “Matcha” จะทำหน้าที่ตรวจเช็คว่าโค้ดเหล่านั้นมีการปรับปรุงภายหลังบน Stack Overflow หรือไม่ และแนะนำโค้ดเวอร์ชันใหม่ที่นักพัฒนาควรนำไปใช้งาน โดยอ้างอิงจากโค้ดที่ได้รับการพัฒนาล่าสุดบนแพลตฟอร์ม Stack Overflow ซึ่ง ดร. ชัยยงค์ คาดหวังว่าเครื่องมือ Matcha จะช่วยลดปัญหาที่เกิดขึ้นในการเขียนซอฟต์แวร์และทำให้คุณภาพของโค้ดในซอฟต์แวร์ดีขึ้นได้

“ผมคิดว่าการที่ developer เอาโค้ดจากอินเทอร์เน็ตมาใช้ โดยปกติแล้วก็ไม่ได้มีข้อเสียอะไร เพียงแต่นักพัฒนาอาจจะไม่รู้ว่า source code ที่ก๊อบปี้มาเป็นอันใหม่ล่าสุดรึเปล่า เพราะข้อมูลบนอินเทอร์เน็ตอัปเดตอยู่ตลอดเวลา ดังนั้น อาจจะบอกได้ว่าการคัดลอกโค้ดจาก Stack Overflow มีทั้งข้อดีและข้อเสีย จึงจำเป็นที่ นักพัฒนาซอฟท์แวร์ต้องเลือกใช้อย่างมีวิจารณญาณ

  • ดาวน์โหลดผลงานตีพิมพ์เรื่อง “Recommending Code Improvements Based on Stack Overflow Answer Edits”: https://arxiv.org/abs/2204.06773

  • ติดตามผลงานของ ดร.ชัยยงค์ รักขิตเวชสกุล: https://cragkhit.github.io

ภาพประกอบ:

ภาพที่ 1: กระบวนการทดลองการทำงานของ Matcha 3 เฟส ดังนี้

  1. สร้างฐานข้อมูลของ accepted answer จาก Stack Overflow
  2. คัดเลือกโปรเจกต์เพื่อทำการทดลอง วิเคราะห์การแก้ไขปรับปรุงโค้ด จากนั้นคัดกรองโค้ดที่แนะนำให้นำไปใช้
  3. นำเสนอโค้ดที่แนะนำกับนักพัฒนาซอฟท์แวร์ เพื่อทดสอบความแม่นยำของ Matcha

ภาพที่ 2: ตัวอย่างของโค้ดที่ได้รับการปรับปรุงแก้ไขบน Stack Overflow