Flexibel en optimaal afhankelijkheidsbeheer via Max-SMT
Author
Venue
IEEE/ACM International Conference on Software Engineering (ICSE), 2023
Abstract
Pakketbeheerders zoals NPM zijn essentieel geworden voor softwareontwikkeling. De NPM-repository bevat meer dan 2 miljoen pakketten en verwerkt wekelijks meer dan 43 miljard downloads. Helaas heeft de NPM-afhankelijkheidsoplosser verschillende tekortkomingen. 1) NPM is gulzig en slaagt er vaak niet in de nieuwste versies van afhankelijkheden te installeren; 2) Het algoritme van NPM leidt tot dubbele afhankelijkheden en opgeblazen code, wat vooral slecht is voor webapplicaties die de codegrootte moeten minimaliseren; 3) Het algoritme van NPM voor het verhelpen van kwetsbaarheden is ook gulzig en kan zelfs nieuwe kwetsbaarheden introduceren; en 4) Het vermogen van NPM om afhankelijkheden te dupliceren kan stateful frameworks verstoren en vereist veel zorg om te omzeilen. Hoewel bestaande tools deze problemen proberen aan te pakken, zijn ze ofwel kwetsbaar, vertrouwen ze op achteraf aangebrachte wijzigingen in de afhankelijkheidsboom, garanderen ze geen optimaliteit, of zijn ze niet samen te stellen. We presenteren Pacsolve, een uniform framework en implementatie voor het oplossen van afhankelijkheden dat aanpasbare beperkingen en optimalisatiedoelen mogelijk maakt. We gebruiken Pacsolve om Maxnpm te bouwen, een complete, drop-in vervanging voor NPM, die ontwikkelaars in staat stelt meerdere doelstellingen te combineren bij het installeren van afhankelijkheden. We evalueren Maxnpm met een grote steekproef van pakketten uit het NPM-ecosysteem en laten zien dat het: 1) in 33% van de gevallen meer kwetsbaarheden in afhankelijkheden kan verminderen dan de audittool van NPM; 2) in 14% van de gevallen nieuwere afhankelijkheden kiest dan NPM; en 3) in 21% van de gevallen minder afhankelijkheden kiest dan NPM. Al onze code en gegevens zijn open en beschikbaar.
