Page 138 - 《软件学报》2025年第7期
P. 138
孙伟杰 等: Java 依赖异味的实证研究与统一检测技术 3059
4.2 RQ4: 实用性
4.2.1 实验设置
为了回答 RQ4, 我们首先从 GitHub 中选取了符合以下标准的 Maven 和 Gradle 项目各 100 个: (1) 项目的
Star 数目大于 100; (2) 项目在最近 1 个月里有更新 (2023 年 7–8 月); (3) 项目包含的测试数量大于 10; (4) 项目为
常规 Java 项目 (不是 Spring 或者 Android 项目). 在排除了实验环境下无法正常构建和无法正常使用 Soot 构建调
用图的项目后, 最终我们得到了 73 个 Maven 项目和 51 个 Gradle 项目. 我们将这些项目及其所有子模块作为我们
的实验对象后, 最终得到 73 个 Maven 项目和对应的 1 614 个模块, 以及 51 个 Gradle 项目和对应的 416 个模块. 这
些项目的信息如表 12、表 13 所示, 可以看到这些项目都相当流行并且有一定规模. 我们在所有实验对象中运行
了 JDepAna, 并收集了检测结果, 最终结果如表 14−表 15 和后文表 16 所示, JDepAna 共检出 30 689 个依赖异味实
例, 其中 Maven 和 Gradle 项目中分别检出 21 417 和 9 272 个. 由于最终异味实例数量众多, 为了进行人工验证, 我
们从中进行了采样. 我们挑选能通过所有自带测试的模块和对应项目, 收集其检测结果中的异味实例并进行复杂
度排序, 根据各个异味类别实例的数量, 按一定比例选取复杂度较大的异味实例. 最终在 Maven 和 Gradle 中分别
采样到 188 个和 172 个异味实例, 我们对这些异味实例进行人工验证.
表 12 Maven 项目信息 (k) 表 13 Gradle 项目信息 (k)
统计指标 Star 数目 Fork 数目 代码行数 统计指标 Star 数目 Fork 数目 代码行数
平均值 3.8 1 650 平均值 3.3 0.5 199.5
最大值 27 7.3 26 532 最大值 47.3 7.8 1 495
最小值 0.3 0.1 1.5 最小值 0.1 0.03 2.7
表 14 整体检测结果 表 15 Maven 检测结果
异味类别 异味数目 异味类别 异味数目
1.1 70 1.1 65
1.2 4 048 1.2 3 035
1.3 11 160 1.3 8 566
1.4 4 970 1.4 3 099
1.5 7 932 1.5 4 738
1.6 1 021 1.6 587
1.7 818 1.7 818
1.8 2 1.8 2
2.1 56 2.1 55
2.2 62 2.2 61
2.3 25 2.3 0
2.4 395 2.4 346
2.5 130 2.5 45
合计 30 689 合计 21 417
4.2.2 评估指标
我们使用公式 (1) 中定义精确率来评估 JDepAna 的实用性, 具体指标定义如下.
● 真阳 (TP): 被检测为依赖异味且人工验证为真.
● 假阳 (FP): 被检测为依赖异味且人工验证为假.
4.2.3 实验结果
我们将综合 Maven 和 Gradle 检测结果后的实验结果展示在表 17 中, 可以看到 JDepAna 检出的 360 个依赖
异味实例中有 346 个被人工验证为真, 精确率为 96.1%. 表 18 和表 19 对应于 Maven 和 Gradle 中的实验结果, 在
Maven 项目的 188 个异味实例中, 有 180 个 (95.7%) 被人工验证为真; 而在 Gradle 项目的 172 个异味实例中, 有
166 个 (95.6%) 被人工验证为真. 值得注意的是, 虽然 RQ3 数据集中缺失了 3 类依赖异味 (1.7、2.3、2.5), 但这些
异味在 RQ4 的数据集中均有出现, 并且都被人工验证为真, 这进一步说明了 JDepAna 具备有效的检测能力.

