De content op deze site is vertaald met behulp van kunstmatige intelligentie (AI) of machinevertalingstechnologie en kan fouten bevatten.

Skip to content
Systems

Een grootschalige analyse van semantische versiebeheer in NPM

Author

Donald Pinckney (Northeastern), Federico Cassano (Northeastern), Arjun Guha (Northeastern en Roblox) en Jonathan Bell (Northeastern)

Venue

Mining Software Repositories (MSR) 2023

Abstract

De NPM-pakketrepository bevat meer dan twee miljoen pakketten en verwerkt tientallen miljarden downloads per week. Bijna elke JavaScript-toepassing gebruikt de NPM-pakketbeheerder om pakketten uit de NPM-repository te installeren. NPM vertrouwt op een 'semantic versioning' ('semver')-schema om een gezond ecosysteem te behouden, waarin bugfixes zo snel mogelijk en betrouwbaar worden geleverd aan downstream-pakketten, terwijl ingrijpende wijzigingen handmatige tussenkomst vereisen van de beheerders van downstream-pakketten. Om te begrijpen hoe ontwikkelaars semver gebruiken, stellen we een dataset samen met elke versie van elk pakket op NPM en analyseren we de stroom van updates door het hele ecosysteem. We bouwen een tijdreizende afhankelijkheidsresolver voor NPM, waarmee we precies kunnen bepalen welke versies van elke afhankelijkheid op verschillende tijdstippen zouden zijn opgelost. We segmenteren onze analyse om een directe analyse mogelijk te maken van beveiligingsrelevante updates (die kwetsbaarheden introduceren of patchen) in vergelijking met de rest van het ecosysteem. We constateren dat wanneer ontwikkelaars Semver correct gebruiken, kritieke updates zoals beveiligingspatches in de meeste gevallen (90,09%) vrij snel naar downstream-afhankelijkheden kunnen doorstromen, maar dat dit niet altijd gebeurt vanwege het onvolmaakte gebruik door ontwikkelaars van zowel Semver-versiebeperkingen als Semver-versienummerincrementen. Onze bevindingen hebben implicaties voor zowel ontwikkelaars als onderzoekers. We stellen onze infrastructuur en dataset openbaar beschikbaar onder een open-sourcelicentie.