Max-SMTによる柔軟かつ最適な依存関係管理
Author
Venue
IEEE/ACM国際ソフトウェア工学会議(ICSE)、2023年
Abstract
NPM などのパッケージマネージャーは、ソフトウェア開発に不可欠なものとなっています。NPM リポジトリには 200 万以上のパッケージがホストされており、毎週 430 億回以上のダウンロードが行われています。残念ながら、NPM の依存関係解決アルゴリズムにはいくつかの欠点があります。1) NPM は貪欲なアルゴリズムを採用しており、依存関係の最新バージョンをインストールできないことがよくあります。 2) NPMのアルゴリズムは依存関係の重複やコードの肥大化を招き、コードサイズを最小限に抑える必要があるWebアプリケーションにとって特に問題となる;3) NPMの脆弱性修正アルゴリズムも貪欲であり、新たな脆弱性を導入することさえある;そして4) NPMによる依存関係の重複はステートフルなフレームワークを破壊する可能性があり、回避策を講じるには多大な注意を要する。 既存のツールはこれらの問題に対処しようとしているものの、脆弱であったり、依存関係ツリーへの事後的な変更に依存していたり、最適性を保証できなかったり、あるいは組み合わせることができなかったりします。そこで我々は、カスタマイズ可能な制約と最適化目標を許容する、依存関係解決のための統合フレームワークおよび実装である Pacsolve を提案します。我々は Pacsolve を使用して、NPM の完全なドロップイン置換となる Maxnpm を構築しました。これにより、開発者は依存関係をインストールする際に複数の目的を組み合わせることが可能になります。 NPMエコシステムから抽出した大規模なパッケージサンプルを用いてMaxnpmを評価した結果、以下のことが示されました:1) 33%のケースにおいて、NPMの監査ツールよりも多くの依存関係の脆弱性を削減できる;2) 14%のケースにおいて、NPMよりも新しい依存関係を選択する;3) 21%のケースにおいて、NPMよりも少ない数の依存関係を選択する。すべてのコードとデータは公開されており、利用可能です。
