O conteúdo deste site foi traduzido usando inteligência artificial (IA) ou tecnologia de tradução automática e pode conter erros.

Skip to content
Systems

Gerenciamento flexível e otimizado de dependências via Max-SMT

Author

Donald Pinckney (Northeastern), Federico Cassano (Northeastern), Arjun Guha, Jonathan Bell (Northeastern), Massimiliano Culpo (independente), Todd Gamblin (Laboratório Nacional Lawrence Livermore)

Venue

Conferência Internacional IEEE/ACM sobre Engenharia de Software (ICSE), 2023

Abstract

Gerenciadores de pacotes como o NPM tornaram-se essenciais para o desenvolvimento de software. O repositório do NPM hospeda mais de 2 milhões de pacotes e atende a mais de 43 bilhões de downloads por semana. Infelizmente, o solucionador de dependências do NPM apresenta várias deficiências. 1) O NPM é ganancioso e frequentemente não consegue instalar as versões mais recentes das dependências; 2) O algoritmo do NPM leva à duplicação de dependências e ao código inchado, o que é particularmente ruim para aplicativos web que precisam minimizar o tamanho do código; 3) O algoritmo de correção de vulnerabilidades do NPM também é ganancioso e pode até introduzir novas vulnerabilidades; e 4) A capacidade do NPM de duplicar dependências pode quebrar frameworks com estado e requer muito cuidado para ser contornada. Embora as ferramentas existentes tentem resolver esses problemas, elas são frágeis, dependem de alterações a posteriori na árvore de dependências, não garantem a otimização ou não são composíveis. Apresentamos o Pacsolve, uma estrutura unificadora e implementação para resolução de dependências que permite restrições personalizáveis e metas de otimização. Usamos o Pacsolve para construir o Maxnpm, um substituto completo e pronto para uso do NPM, que permite aos desenvolvedores combinar múltiplos objetivos ao instalar dependências. Avaliamos o Maxnpm com uma grande amostra de pacotes do ecossistema NPM e mostramos que ele pode: 1) reduzir mais vulnerabilidades nas dependências do que a ferramenta de auditoria do NPM em 33% dos casos; 2) escolher dependências mais recentes do que o NPM em 14% dos casos; e 3) escolher menos dependências do que o NPM em 21% dos casos. Todo o nosso código e dados são abertos e estão disponíveis.