中文

Java 语言去依赖工具的可靠性与精确性基准

软件工程 2025-10-24 v1

摘要

现代软件开发通过导入库作为依赖来复用代码。软件项目通常包含约 36 个依赖,其中 80% 为传递依赖,即依赖的依赖。最新研究表明,仅 24.9% 的依赖在运行时是必需的,甚至在这些必需依赖中,许多程序构造也未被使用,导致项目中包含不必要的代码。这促使开发去依赖工具,以在消除未使用构造的同时保持精确性,在消除不必要构造的同时保持可靠性。为系统评估这一权衡,我们开发了 Deblometer,一个包含 59 个测试案例的微基准,用于评估去依赖工具对 Java 语言特性的支持。每个测试案例包括手动精选的基准,指定必需和膨胀的类、方法和字段,从而实现对可靠性和精确性的精确测量。使用 Deblometer,我们评估了 Deptrim、JShrink 和 ProGuard 三款流行的 Java 去依赖工具。我们的评估表明,所有工具都会移除必需的程序构造,导致语义更改或执行崩溃。特别是,动态类加载功能在所有被评估的工具中引入了不可靠性。我们的比较显示,Deptrim 保留了更多膨胀构造,而 ProGuard 移除了更多必需构造。JShrink 的可靠性受限于对注释支持不足的影响,导致去依赖后的制品损坏。这些可靠性问题凸显了需要改进去依赖工具以确保稳定可靠去依赖软件的必要性。

关键词

引用

@article{arxiv.2510.20679,
  title  = {A Soundness and Precision Benchmark for Java Debloating Tools},
  author = {Jonas Klauke and Tom Ohlmer and Stefan Schott and Serena Elisa Ponta and Wolfram Fischer and Eric Bodden},
  journal= {arXiv preprint arXiv:2510.20679},
  year   = {2025}
}

备注

Preprint - accepted at the ACM Workshop on Software Supply Chain Offensive Research and Ecosystem Defenses (SCORED '25)