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
   131   132   133   134   135   136   137   138   139   140   141