Gestión flexible y óptima de dependencias mediante Max-SMT
Author
Venue
Conferencia Internacional IEEE/ACM sobre Ingeniería de Software (ICSE), 2023
Abstract
Los gestores de paquetes como NPM se han convertido en imprescindibles para el desarrollo de software. El repositorio de NPM alberga más de 2 millones de paquetes y gestiona más de 43 000 millones de descargas cada semana. Por desgracia, el solucionador de dependencias de NPM presenta varias deficiencias. 1) NPM es «codicioso» y a menudo no instala las versiones más recientes de las dependencias; 2) El algoritmo de NPM da lugar a dependencias duplicadas y a código inflado, lo cual es especialmente perjudicial para las aplicaciones web que necesitan minimizar el tamaño del código; 3) El algoritmo de corrección de vulnerabilidades de NPM también es «codicioso» y puede incluso introducir nuevas vulnerabilidades; y 4) La capacidad de NPM para duplicar dependencias puede romper los marcos de trabajo con estado y requiere mucho cuidado para solucionarlo. Aunque las herramientas existentes intentan abordar estos problemas, son frágiles, dependen de cambios a posteriori en el árbol de dependencias, no garantizan la optimización o no son combinables. Presentamos Pacsolve, un marco unificador y una implementación para la resolución de dependencias que permite restricciones personalizables y objetivos de optimización. Utilizamos Pacsolve para crear Maxnpm, un sustituto completo y directo de NPM, que permite a los desarrolladores combinar múltiples objetivos al instalar dependencias. Evaluamos Maxnpm con una amplia muestra de paquetes del ecosistema de NPM y demostramos que es capaz de: 1) reducir más vulnerabilidades en las dependencias que la herramienta de auditoría de NPM en el 33 % de los casos; 2) elegir dependencias más recientes que NPM en el 14 % de los casos; y 3) elegir menos dependencias que NPM en el 21 % de los casos. Todo nuestro código y datos son abiertos y están disponibles.
