中文

基于最大可满足模理论(Max-SMT)的灵活且最优的依赖管理

软件工程 2023-08-25 v4

摘要

诸如 NPM 之类的包管理器已成为软件开发不可或缺的工具。NPM 仓库托管超过 200 万个包,每周服务超过 430 亿次下载。遗憾的是,NPM 的依赖求解器存在若干缺陷。1) NPM 是贪婪的,常常无法安装依赖的最新版本;2) NPM 的算法导致依赖重复和代码膨胀,这对于需要最小化代码体积的 Web 应用尤为不利;3) NPM 的漏洞修复算法同样是贪婪的,甚至可能引入新的漏洞;4) NPM 重复依赖的能力会破坏有状态框架,并需要大量人工处理来规避。尽管现有工具试图解决这些问题,但它们要么脆弱、依赖于对依赖树的事后修改、不保证最优性,要么不可组合。我们提出 PacSolve,一个用于依赖求解的统一框架与实现,支持可定制的约束与优化目标。我们利用 PacSolve 构建了 MaxNPM,一个完整、可即插即用的 NPM 替代品,使开发者能够在安装依赖时组合多个目标。我们使用来自 NPM 生态的大量包样本评估 MaxNPM,结果表明它可:1) 在 33% 的情况下比 NPM 的审计工具减少更多依赖漏洞;2) 在 14% 的情况下选择比 NPM 更新的依赖;3) 在 21% 的情况下选择比 NPM 更少的依赖。我们的所有代码与数据均开源可用。

关键词

引用

@article{arxiv.2203.13737,
  title  = {Flexible and Optimal Dependency Management via Max-SMT},
  author = {Donald Pinckney and Federico Cassano and Arjun Guha and Jon Bell and Massimiliano Culpo and Todd Gamblin},
  journal= {arXiv preprint arXiv:2203.13737},
  year   = {2023}
}