Page 125 - 《软件学报》2025年第7期
P. 125
3046 软件学报 2025 年第 36 卷第 7 期
2.2 调研结果
我们将调研结果展示在表 3 中, 它包含了调研得到的依赖异味类别, 各个类别对应的问题报告和构建工具以
及可能造成的危害. 我们用表 4 中的编号来表示对应危害. 接下来我们将结合表格介绍我们对 RQ1 和 RQ2 的调
研结果. 由于篇幅限制, 本文中仅介绍部分依赖异味类别, 剩余部分参见附录 A.
表 3 实证研究调研结果
异味编号 异味名称 异味粒度 对应构建工具 对应问题报告数 主要危害
1.1 内外类冲突 模块粒度 Maven|Gradle 2/47 1, 3, 4
1.2 外部类冲突 模块粒度 Maven|Gradle 7/47 1, 3, 4
1.3 库版本冲突 模块粒度 Maven|Gradle 7/47 1, 3, 4
1.4 未声明依赖 模块粒度 Maven|Gradle 6/47 1, 3, 4
1.5 未使用依赖 模块粒度 Maven|Gradle 6/47 2, 5, 7, 9
1.6 依赖范围误用 模块粒度 Maven|Gradle 12/47 1, 2, 3, 5, 6, 7, 8, 9
1.7 依赖范围冲突 模块粒度 Maven 2/47 1, 3
1.8 依赖树冲突 模块粒度 Maven&Gradle 1/47 1, 3, 4, 11
2.1 构建工具配置缺失 项目粒度 Maven|Gradle 2/47 1
2.2 构建工具封装器JAR缺失 项目粒度 Maven|Gradle 6/47 1
2.3 构建工具封装器JAR异常 项目粒度 Maven|Gradle 1/47 2, 10
2.4 模块间库重复 项目粒度 Maven|Gradle 2/47 11
2.5 模块间库冲突 项目粒度 Maven|Gradle 1/47 11
表 4 依赖异味主要危害
编号 潜在危害 详细说明
1 构建错误 模块构建时出现错误
2 构建时间增加 模块构建所需时间增加
3 运行时错误 模块运行时出现异常
4 运行时语义冲突 模块运行结果与预期不一致
5 构建产物冗余 模块构建产物 (可执行JAR) 体积增大
6 下游模块构建错误 当前模块的下游模块构建时出现错误
7 下游模块构建时间增加 当前模块的下游模块构建所需时间增加
8 下游模块运行时错误 当前模块的下游模块运行时出现异常
9 下游模块构建产物冗余 当前模块的下游模块运行结果与预期不一致
10 安全隐患 项目在使用构建工具时执行被植入的恶意代码
11 依赖库维护难度增加 项目无法统一调整多个同名依赖库的版本而需多次调整
2.2.1 RQ1: Java 项目中可能存在哪些依赖异味类别?
最终我们筛选出 47 个依赖异味相关的问题报告, 总结出 13 类特征各异的依赖异味. 已有研究尚未关注到其
中 7 类依赖异味 (异味 1.4、1.7–1.8、2.1–2.4), 而仅从 Maven 的角度对其余 6 类依赖异味进行了部分探讨. 我们
的研究不仅在依赖异味的类别上有所扩展, 还综合考虑了 Maven 和 Gradle 这两大主流构建工具. 为了方便研究,
我们把这些依赖异味分为两种粒度, 即模块粒度和项目粒度. 这两种粒度分别代表了依赖异味出现在单个模块中
还是整个项目中. 需要说明的是, 模块粒度关注单个模块与其依赖库之间的关系, 而项目粒度则关注项目中多个模
块之间的关系, 因此这样的划分方式确保了分类的独立性, 它们之间没有重叠.
1) 模块粒度
在模块级别的分析中, 我们发现了 36 个 (占比 36/47=76.6%) 问题报告中包含的 8 种 (占比 8/13=61.5%) 依赖
异味, 对应于表 3 中的 1.1–1.8. 在进行分类时, 我们结合问题报告中涉及的依赖管理的具体实体 (如依赖范围) 进
行分析. 最终, 我们总结出 8 类依赖异味, 它们全面概括了 36 个问题报告中的特征. 其中值得注意的是, 异味 1.7
仅在使用 Maven 中出现, 而异味 1.8 仅在同时使用 Maven 和 Gradle 时才会出现, 其余异味在使用 Maven 或

