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 具备有效的检测能力.
   133   134   135   136   137   138   139   140   141   142   143