เรขาคณิตแฟรตของซอฟต์แวร์: สิ่งที่ PyTorch และ Ray เปิดเผย
แพลตฟอร์ม Platino Labs Data Room เปิดเผยกราฟการนำเข้า Python จาก 10 โครงงั้น พร้อมวิเคราะห์วัฏจักรการพึ่งพาอาศัยกันและโครงสร้างโค้ดแบบเจาะลึก

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
- Platino Labs เผยแพร่กราฟการนำเข้า Python จาก 10 ที่เก็บโค้ดใน Platino Labs Data Room
- PyTorch มีโมดูลในคอมโพเนนต์ใหญ่สุดราว 65.7% ขณะที่ Ray อยู่ที่ 23.4% จาก 4,108 โมดูล
- การสกัดโครงสร้างใช้ Abstract Syntax Tree (AST) และอัลกอริทึม Tarjan ร่วมกับ Kahn's topological ordering
- ขนาดไฟล์กราฟรวมทั้ง 10 รายการอยู่ที่ 46,259,186 ไบต์ ซึ่งช่วยประหยัดพื้นที่กว่าไฟล์ต้นฉบับราว 79.93%
การค้นหาโค้ดด้วยฟังก์ชันหรือระบบ Retrieval-Augmented Generation (RAG) สามารถดึงข้อมูลข้อความที่เกี่ยวข้องขึ้นมาได้ แต่เครื่องมือเหล่านี้ไม่สามารถอธิบายได้ว่าโมดูลต่างๆ มีความเกี่ยวข้องกันอย่างไรในเชิงโครงสร้าง โค้ดเบสไม่ได้เป็นเพียงแค่กลุ่มของข้อความตัวอักษรเท่านั้น แต่ยังมีลักษณะเป็นโครงสร้างที่มีทิศทางชัดเจน เช่น ไฟล์ที่มีการเรียกใช้งานโมดูล, โมดูลที่เชื่อมโยงไปยังโมดูลอื่น และเส้นทางบางเส้นที่วนกลับมายังจุดเริ่มต้น
ทางทีมงานได้ทำการสกัดกราฟการนำเข้าภาษา Python แบบสาธารณะจาก 10 ที่เก็บโค้ด และเผยแพร่ข้อมูลในรูปแบบ JSON ที่ได้รับการตรวจสอบแล้วบน Platino Labs Data Room กราฟเหล่านี้ช่วยเปิดเผยข้อเท็จจริงเชิงโครงสร้างที่การค้นหาข้อความทั่วไปไม่สามารถตอบได้ นั่นคือรูปร่างและขนาดขององค์ประกอบที่เชื่อมโยงกันอย่างแน่นหนา (Strongly Connected Components หรือ SCC) ภายในกราฟการนำเข้าที่ถูกประกาศไว้
ระบบค้นหาข้อมูลและกราฟการพึ่งพาอาศัยกันทำหน้าที่แก้ปัญหาคนละส่วนกัน ระบบค้นหาถูกออกแบบมาเพื่อค้นหาข้อความที่ตรงกับคำค้น แต่กราฟการนำเข้าจะบันทึกความสัมพันธ์ที่มีทิศทางซึ่งถูกระบุไว้โดยซอร์สโค้ด ความคล้ายคลึงกันของข้อความจึงไม่ได้บ่งบอกว่าโมดูล A ทำการเรียกโมดูล B หรือมีเส้นทางที่วนกลับมายัง A รวมถึงมีโมดูลจำนวนเท่าใดที่เข้าไปมีส่วนร่วมในวงรอบนั้นๆ

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
กระบวนการทำงานเริ่มต้นด้วยการแยกวิเคราะห์ซอร์สโค้ดภาษา Python ผ่าน Abstract Syntax Tree (AST) เพื่อสกัดความสัมพันธ์ของการนำเข้าโมดูลออกมาเป็นกราฟ แทนที่จะพึ่งพาโมเดลภาษาในการคาดเดาความสัมพันธ์ สำหรับการแก้ไขซอร์สโค้ดและขอบเขตที่กำหนด การสกัดนี้เป็นการแปลงไวยากรณ์ให้กลายเป็นเส้นเชื่อมโยงอย่างแม่นยำ การเผยแพร่ครั้งนี้ได้เพิ่มชั้นข้อมูล Strongly Connected Components (SCC) ซึ่งหมายถึงกลุ่มของโหนดที่แต่ละโหนดสามารถเข้าถึงโหนดอื่นได้ผ่านเส้นที่มีทิศทาง
การวิเคราะห์โครงสร้างซอฟต์แวร์ด้วยกราฟการนำเข้าและอัลกอริทึม SCC ถือเป็นแนวทางสำคัญในการมองภาพรวมความซับซ้อนเชิงสถาปัตยกรรม (Architectural Complexity) ของโครงการโอเพนซอร์สขนาดใหญ่ การที่ซอร์สโค้ดมีวงรอบการพึ่งพา (Dependency Cycles) จำนวนมากไม่ได้แปลว่าเป็นโค้ดที่ไม่มีคุณภาพเสมอไป แต่เป็นข้อมูลเชิงtopologyที่ช่วยให้นักพัฒนาเข้าใจพฤติกรรมการโหลดโมดูลและการจัดการโครงสร้างเมื่อระบบเริ่มขยายตัวใหญ่ขึ้น
ในแง่ของขนาดข้อมูล กราฟ PyTorch มีขนาด 7,468,906 ไบต์ (หรือประมาณ 7.47 เมกะไบต์) และกราฟ SCC ทั้ง 10 รายการรวมกันมีขนาด 46,259,186 ไบต์ ข้อมูลเหล่านี้สะท้อนถึงขนาดของอาร์ติแฟกต์จริง โดยรายงานระบุว่าประหยัดพื้นที่จัดเก็บได้ถึง 79.93% เมื่อเทียบกับไฟล์ซอร์สโค้ดที่ถูกแมปไว้ทั้งหมด อย่างไรก็ตาม ตัวเลขเหล่านี้ไม่ได้หมายความว่ากราฟโครงสร้างจะมาแทนที่ดัชนี RAG ได้โดยตรง เนื่องจากเป็นอาร์ติแฟกต์คนละประเภทและมีวิธีการเปรียบเทียบที่แตกต่างกัน
ที่มา: Dev.to
พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้
ความคิดเห็น
แสดงความคิดเห็น