เนื้อหาในเว็บไซต์นี้ได้รับการแปลโดยใช้ปัญญาประดิษฐ์ (AI) หรือเทคโนโลยีการแปลด้วยเครื่อง และอาจมีข้อผิดพลาด

Skip to content
Systems

การวิเคราะห์ขนาดใหญ่ของเวอร์ชันเชิงความหมายใน NPM

Author

โดนัลด์ พิงค์นีย์ (นอร์ธอีสเทิร์น), เฟเดริโก คาสซาโน (นอร์ธอีสเทิร์น), อรชุน กูฮา (นอร์ธอีสเทิร์น และ Roblox), และโจนาธาน เบลล์ (นอร์ธอีสเทิร์น)

Venue

คลังซอฟต์แวร์สำหรับการทำเหมืองข้อมูล (MSR) 2023

Abstract

คลังแพ็กเกจของ NPM มีแพ็กเกจมากกว่าสองล้านแพ็กเกจ และให้บริการดาวน์โหลดหลายสิบพันล้านครั้งต่อสัปดาห์ แทบทุกแอปพลิเคชัน JavaScript ใช้ตัวจัดการแพ็กเกจ NPM เพื่อติดตั้งแพ็กเกจจากคลัง NPM NPM อาศัยระบบ "เวอร์ชันเชิงความหมาย" ('semver') เพื่อรักษาสภาพแวดล้อมระบบนิเวศให้แข็งแรง ซึ่งการแก้ไขบั๊กจะถูกส่งมอบไปยังแพ็กเกจที่อยู่ปลายทางอย่างเชื่อถือได้และรวดเร็วที่สุดเท่าที่เป็นไปได้ ในขณะที่การเปลี่ยนแปลงที่ทำให้ระบบไม่สามารถทำงานได้ (breaking changes) จะต้องได้รับการแก้ไขโดยผู้ดูแลแพ็กเกจที่อยู่ปลายทาง เพื่อทำความเข้าใจว่านักพัฒนาใช้ semver อย่างไร เราสร้างชุดข้อมูลที่ประกอบด้วยทุกเวอร์ชันของทุกแพ็กเกจบน NPM และวิเคราะห์การไหลของการอัปเดตตลอดทั้งระบบนิเวศ เราสร้างตัวแก้ปัญหาการพึ่งพาที่สามารถย้อนเวลาได้สำหรับ NPM ซึ่งช่วยให้เราสามารถระบุได้อย่างแม่นยำว่าเวอร์ชันใดของแต่ละการพึ่งพาจะถูกแก้ปัญหาในช่วงเวลาต่างๆ เราแบ่งการวิเคราะห์ของเราเพื่อให้สามารถวิเคราะห์การอัปเดตที่เกี่ยวข้องกับความปลอดภัย (ซึ่งเป็นการอัปเดตที่เพิ่มหรือแก้ไขช่องโหว่) โดยตรงเมื่อเปรียบเทียบกับส่วนที่เหลือของระบบนิเวศ เราพบว่าเมื่อนักพัฒนาใช้ semver อย่างถูกต้อง การอัปเดตที่สำคัญ เช่น แพตช์ความปลอดภัย สามารถไหลไปยังการพึ่งพาในลำดับถัดไปได้อย่างรวดเร็วในกรณีส่วนใหญ่ (90.09%) แต่สิ่งนี้ไม่ได้เกิดขึ้นเสมอไป เนื่องจากนักพัฒนาใช้ข้อจำกัดของเวอร์ชัน semver และการเพิ่มหมายเลขเวอร์ชัน semver ไม่สมบูรณ์ ผลการค้นพบของเรามีผลกระทบต่อทั้งนักพัฒนาและนักวิจัย เราเปิดเผยโครงสร้างพื้นฐานและชุดข้อมูลของเราต่อสาธารณะภายใต้ใบอนุญาตโอเพนซอร์ส