[Paper] 嵌入软件意图:轻量级 Java 模块恢复

发布: (2025年12月18日 GMT+8 05:24)
6 min read
原文: arXiv

Source: arXiv - 2512.15980v1

Overview

论文介绍了 ClassLAR,一种轻量级技术,能够自动从大型单体代码库中提取 Java 9 模块定义。通过将全限定类名视为“软件意图”并将其输入语言模型,作者能够恢复与系统真实架构高度一致的模块——速度远快于现有的恢复工具。

关键贡献

  • 面向意图的恢复:利用包和类名的语义线索(通过语言模型)推断架构意图,无需重量级静态分析。
  • 类与语言模型 (ClassLAR):一种新颖的混合方法,将简单的基于名称的特征与上下文嵌入相结合,实现对真实模块布局的高保真度。
  • 性能提升:在 20 个真实 Java 项目上,执行速度比最先进的恢复方法快 3.99 × – 10.5 ×。
  • 实证验证:在流行开源仓库上进行全面评估,展示了在多种指标上更优的架构层相似度得分。

方法论

  1. Data collection – 对于每个 Java 项目,工具提取每个全限定类名(例如 org.apache.commons.io.FileUtils)。
  2. Semantic embedding – 预训练语言模型(例如基于 BERT 的模型)将每个名称转换为密集向量,以捕获词汇意义(“File”、“Utils”、“io”)。
  3. Clustering – 使用轻量级聚类算法(例如层次聚合聚类)对向量进行分组,遵循包命名的层次结构特性。
  4. Module inference – 将得到的聚类映射到 JPMS 模块描述符(module-info.java),生成一组既反映结构(包层次)又体现功能(语义相似性)意图的模块。
  5. Evaluation – 使用诸如 MoJoFM、NED 和包级内聚等架构相似性度量,将恢复的模块与手工策划的模块布局进行比较。

整个流水线在中等规模项目上只需几秒钟即可完成,因为它避免了昂贵的字节码分析,仅依赖轻量级文本处理和向量运算。

Results & Findings

指标ClassLAR最佳现有技术
MoJoFM (higher = more similar)85.2 %71.4 %
NED (lower = less error)0.120.27
Runtime (seconds)12 s (avg)48 s – 126 s
  • 更高的架构相似度:ClassLAR 始终能够生成与开发者预期架构更为吻合的模块分组,优于基于静态依赖的恢复方法。
  • 速度:由于仅解析类名,该方法呈线性扩展,即使在拥有超过 10 k 类的项目中也能保持在一分钟以内。
  • 鲁棒性:语言模型捕捉到了细微的意图(例如 “crypto” 与 “security” 的区别),而纯粹的包结构启发式方法则会遗漏这些信息,从而在模块内部实现了更好的功能内聚性。

实际意义

  • 快速 JPMS 迁移:团队可以为传统单体项目快速生成 module-info.java,无需手动重构,将迁移时间从数周缩短到数小时。
  • 持续的架构监控:将 ClassLAR 集成到 CI 流水线中,检测代码与声明模块之间的漂移,在封装错误出现之前提醒开发者。
  • 工具生态系统:轻量化的特性使其易于嵌入 IDE 插件、构建工具(Maven/Gradle)或代码审查机器人,实时建议模块边界。
  • 可维护性提升:通过将代码库对齐到显式模块,开发者获得更强的封装保证、更清晰的依赖图,以及对 Java 服务加载机制的更好支持。

限制与未来工作

  • 名称质量依赖:项目如果使用不恰当的包/类名(例如通用的 util 包),会降低嵌入质量,从而导致模块划分不够准确。
  • 语言模型范围:当前模型基于通用 Java 语料库进行训练;领域特定词汇(例如科学计算)可能需要微调。
  • 动态行为被忽略:ClassLAR 不会分析运行时的反射或动态类加载,这在高度动态的系统中可能影响模块边界。

未来的研究方向包括:引入轻量级的静态依赖图以补充名称语义、将该方法适配到其他 JVM 语言(Kotlin、Scala),以及探索对持续演化代码库的增量恢复。

作者

  • Yirui He
  • Yuqi Hu
  • Xingyu Chen
  • Joshua Garcia

论文信息

  • arXiv ID: 2512.15980v1
  • 分类: cs.SE, cs.AI
  • 出版时间: 2025年12月17日
  • PDF: 下载 PDF
Back to Blog

相关文章

阅读更多 »