Page 139 - 《软件学报》2025年第7期
P. 139
3060 软件学报 2025 年第 36 卷第 7 期
表 16 Gradle 检测结果 表 17 整体人工验证结果
异味类别 异味数目 异味类别 检测结果集 真阳实例数 (精确率 (%))
1.1 5 1.1 15 15 (100)
1.2 1 013 1.2 45 45 (100)
1.3 2 594 1.3 41 41 (100)
1.4 1 871 1.4 47 47 (100)
1.5 3 194 1.5 45 32 (71.1)
1.6 434 1.6 32 31 (96.9)
1.7 0 1.7 13 13 (100)
1.8 0 1.8 2 2 (100)
2.1 1 2.1 11 11 (100)
2.2 1 2.2 12 12 (100)
2.3 25 2.3 16 16 (100)
2.4 49 2.4 49 49 (100)
2.5 85 2.5 31 31 (100)
合计 9 272 合计 359 345 (96.1)
表 18 Maven 项目人工验证结果 表 19 Gradle 项目人工验证结果
异味类别 检测结果集 真阳实例数 (精确率 (%)) 异味类别 检测结果集 真阳实例数 (精确率 (%))
1.1 10 10 (100) 1.1 5 5 (100)
1.2 23 23 (100) 1.2 22 22 (100)
1.3 18 18 (100) 1.3 23 23 (100)
1.4 18 18 (100) 1.4 29 29 (100)
1.5 24 16 (66.7) 1.5 21 20 (95.2)
1.6 14 14 (100) 1.6 18 13 (72.2)
1.7 13 13 (100) 1.7 0 0
1.8 2 2 (100) 1.8 0 0
2.1 10 10 (100) 2.1 1 1 (100)
2.2 11 11 (100) 2.2 1 1 (100)
2.3 0 0 2.3 16 16 (100)
2.4 24 24 (100) 2.4 25 25 (100)
2.5 21 21 (100) 2.5 10 10 (100)
合计 188 180 (95.7) 合计 171 165 (96.5)
● 假阳分析. 我们进一步分析出现检测结果中被人工验证为假的实例 (假阳), 发现它们主要集中在异味类别
1.5 和 1.6 中. 其中, 有 13 个类别为 1.5 的假阳实例, 其产生原因与我们在 RQ3 中分析的原因类似, 都是由于动态
特性的使用导致项目调用图的构建不够精确; 仅有 1 个类别为 1.6 的假阳实例, 其产生原因主要是项目 Btrace [52]
添加了额外的自定义脚本进行检查以使得依赖库满足其特殊需求, 而 JDepAna 只对常规代码进行分析, 因此出现
误报.
● 开发者反馈. 尽管 JDepAna 可以自动化检测依赖异味问题, 但向开发人员报告这些问题涉及大量的人工工
作, 例如与开发人员沟通及帮助他们提交修复等. 因此, 我们从人工验证为真的实例中挑选出有代表性且有价值的
部分实例, 将它们以问题报告的形式提交给开发者. 问题报告中包括了问题描述、可能危害以及可能的解决措施.
最终, 我们提交了 25 个问题报告, 其中包含了 48 个实例 (一个问题报告中可能包含多个实例), 其中 22 个问题报
告中的 42 个实例已经被确认, 16 个问题报告中的 21 个实例已经被修复. 我们将结果展示在表 20 中.
绝大多数开发者对我们提交的问题报告都给予了正面反馈. 我们在下面展示了一些例子, 这些例子对应了不
同的异味类别, 说明了我们检测工具的全面性. 在 Issue #2189 (异味 1.3) [53] 中, 开发者在我们的帮助下找到了问题
并成功解决, 对我们的帮助表示了感谢: “I found the issue with your help and here is the PR to get the issue resolved.
Thanks a lot for your help.” 在 Issue #2001 (异味 1.4) [54] 中, 开发者先前并不了解此类异味, 但我们的报告促使开发

