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