Elastyczne i optymalne zarządzanie zależnościami za pomocą Max-SMT
Author
Venue
Międzynarodowa konferencja IEEE/ACM poświęcona inżynierii oprogramowania (ICSE), 2023
Abstract
Menedżery pakietów, takie jak NPM, stały się niezbędne w tworzeniu oprogramowania. Repozytorium NPM zawiera ponad 2 miliony pakietów i obsługuje ponad 43 miliardy pobrań tygodniowo. Niestety, moduł rozwiązywania zależności NPM ma kilka wad. 1) NPM jest zachłanny i często nie udaje mu się zainstalować najnowszych wersji zależności; 2) Algorytm NPM prowadzi do powielania zależności i rozbudowywania kodu, co jest szczególnie niekorzystne dla aplikacji internetowych, które muszą minimalizować rozmiar kodu; 3) Algorytm naprawiania luk w zabezpieczeniach NPM jest również zachłanny i może nawet wprowadzać nowe luki; oraz 4) Zdolność NPM do powielania zależności może zakłócać działanie frameworków stanowych i wymaga dużej ostrożności przy obejściu tego problemu. Chociaż istniejące narzędzia próbują rozwiązać te problemy, są one albo niestabilne, opierają się na zmianach wprowadzanych po fakcie w drzewie zależności, nie gwarantują optymalności lub nie są kompozytowe. Przedstawiamy Pacsolve, ujednolicony framework i implementację do rozwiązywania zależności, który pozwala na dostosowywanie ograniczeń i celów optymalizacji. Wykorzystujemy Pacsolve do stworzenia Maxnpm, kompletnego zamiennika NPM, który umożliwia programistom łączenie wielu celów podczas instalowania zależności. Oceniamy Maxnpm na dużej próbie pakietów z ekosystemu NPM i pokazujemy, że potrafi on: 1) zmniejszyć liczbę luk w zabezpieczeniach zależności o 33% w porównaniu z narzędziem audytowym NPM; 2) wybiera nowsze zależności niż NPM w 14% przypadków; oraz 3) wybiera mniej zależności niż NPM w 21% przypadków. Cały nasz kod i dane są otwarte i dostępne.
