Flexibles und optimales Abhängigkeitsmanagement mittels Max-SMT
Author
Venue
IEEE/ACM International Conference on Software Engineering (ICSE), 2023
Abstract
Paketmanager wie NPM sind für die Softwareentwicklung unverzichtbar geworden. Das NPM-Repository beherbergt über 2 Millionen Pakete und verzeichnet jede Woche über 43 Milliarden Downloads. Leider weist der NPM-Abhängigkeitslöser mehrere Mängel auf. 1) NPM ist gierig und versäumt es oft, die neuesten Versionen von Abhängigkeiten zu installieren; 2) Der Algorithmus von NPM führt zu doppelten Abhängigkeiten und aufgeblähtem Code, was besonders für Webanwendungen nachteilig ist, die die Codegröße minimieren müssen; 3) Der Algorithmus von NPM zur Behebung von Sicherheitslücken ist ebenfalls gierig und kann sogar neue Sicherheitslücken einführen; und 4) Die Fähigkeit von NPM, Abhängigkeiten zu duplizieren, kann zustandsbehaftete Frameworks zerstören und erfordert große Sorgfalt bei der Umgehung. Obwohl bestehende Tools versuchen, diese Probleme anzugehen, sind sie entweder instabil, stützen sich auf nachträgliche Änderungen am Abhängigkeitsbaum, garantieren keine Optimalität oder sind nicht kombinierbar. Wir stellen Pacsolve vor, ein einheitliches Framework und eine Implementierung zur Lösung von Abhängigkeiten, das anpassbare Einschränkungen und Optimierungsziele ermöglicht. Wir nutzen Pacsolve, um Maxnpm zu entwickeln, einen vollständigen, direkt einsetzbaren Ersatz für NPM, der es Entwicklern ermöglicht, bei der Installation von Abhängigkeiten mehrere Ziele zu kombinieren. Wir evaluieren Maxnpm anhand einer großen Stichprobe von Paketen aus dem NPM-Ökosystem und zeigen, dass es: 1) in 33 % der Fälle mehr Schwachstellen in Abhängigkeiten reduzieren kann als das Audit-Tool von NPM; 2) in 14 % der Fälle neuere Abhängigkeiten wählt als NPM; und 3) in 21 % der Fälle weniger Abhängigkeiten wählt als NPM. Unser gesamter Code und alle Daten sind offen und verfügbar.
