Page 136 - 《软件学报》2025年第7期
P. 136
孙伟杰 等: Java 依赖异味的实证研究与统一检测技术 3057
实例, 我们在实例对应的项目或模块中运行 JDepAna, 收集实例对应依赖异味类别的检测结果. 将检测结果同样以
依赖异味实例的形式表示, 最终得到 Maven 中的 192 个实例和 Gradle 中的 40 个实例, 这 232 个实例构成了我们
的检测结果集. 值得注意的是, 由于实证研究中的部分问题报告不属于我们的检测对象, 最终有 3 类依赖异味不存
在于基准集中, 但 JDepAna 对这些类别同样能有效进行检测, 我们将在 RQ4 中讨论其对这些类别的检测能力.
4.1.2 评估指标
我们用召回率 (recall) 和精确率 (precision) 来评估 JDepAna 的有效性, 包括以下指标.
● 基准真阳 (TPB): 被检测为依赖异味, 且存在于基准集中.
● 真阳 (TP): 被检测为依赖异味, 且存在于基准集中或不在基准集中但人工验证为真.
● 假阳 (FP): 被检测为依赖异味, 但不存在于基准集中且人工验证为假.
● 假阴 (FN): 未被检测为依赖异味, 但存在于基准集中.
基于以上指标, 我们如下定义召回率和精确率, 精确率能评估 JDepAna 是否能准确地检测项目中实际存在的
依赖异味, 召回率则评估 JDepAna 是否能检测基准集中的所有依赖异味问题.
Precision = TP/(TP+FP) (1)
Recall = TPB/(TPB+FN) (2)
4.1.3 实验结果
我们将综合 Maven 和 Gradle 后的实验结果展示在表 9 中. JDepAna 的召回率达到 95.9%, 精确率达到 96.1%.
表 10 和表 11 中展示了 Maven 和 Gradle 中的实验结果. 可以看到, Maven 基准集中的 125 个实例中有 120 个实例
被检出, Gradle 基准集中的 22 个实例有 21 个实例被检出, 召回率分别为 96% 和 95.4%, 精确率分别为 95.3% 和 100%.
表 9 整体检测结果
不在基准集中的检出数 (占比 (%))
异味类别 基准集 检测结果集 基准集中的检出数 (召回率 (%))
人工验证为真的检出数 人工验证为假的检出数
1.1 1 1 1 (100) 0 0
1.2 1 2 1 (100) 1 (100) 0
1.3 5 23 5 (100) 18 (100) 0
1.4 56 68 56 (100) 12 (100) 0
1.5 13 49 13 (100) 27 (75) 9 (25)
1.6 23 19 17 (73.9) 2 (100) 0
1.7 0 0 0 0 0
1.8 6 6 6 (100) 0 0
2.1 4 4 4 (100) 0 0
2.2 2 2 2 (100) 0 0
2.3 0 0 0 0 0
2.4 36 58 36 (100) 22 (100) 0
2.5 0 0 0 0 0
合计 147 232 141 (95.9) 82 (90.1) 9 (9.9)
表 10 Maven 项目检测结果
不在基准集中的检出数 (占比 (%))
异味类别 基准集 检测结果集 基准集中的检出数 (召回率 (%))
人工验证为真的检出数 人工验证为假的检出数
1.1 0 0 0 0 0
1.2 1 2 1 (100) 1 (100) 0
1.3 2 3 2 (100) 1 (50) 0
1.4 56 68 56 (100) 12 (100) 0
1.5 13 49 13 (100) 27 (75) 9 (25)
1.6 17 12 12 (71) 0 0
1.7 0 0 0 0 0

