Page 200 - 《软件学报》2026年第5期
P. 200

潘伟丰 等: 基于动态分析和引力公式的关键类识别                                                        2079



                                                 1.0                           1.0
                  1.0
                                                 0.8                           0.8
                  0.8
                                                 0.6                           0.6
                  0.6
                  Recall                        Recall                        Recall
                  0.4                            0.4                           0.4
                  0.2                            0.2                           0.2
                   0                              0                             0
                    0    5   10  15  20   25      0    5   10  15   20  25      0    5   10  15   20  25
                               top-k                         top-k                          top-k
                             (a) DWM                        (b) OWM                       (c) EWM
                       CG (argoUML)  CDAG (argoUML)  CG (jEdit)  CDAG (jEdit)  CG (jHotDraw)  CDAG (jHotDraw)  CG (jMeter)  CDAG (jMeter)
                       CG (Mars)  CDAG (Mars)  CG (Maze)  CDAG (Maze)  CG (PDFBox)  CDAG (PDFBox)  CG (wro4j)  CDAG (wro4j)
                                         图 15 CDAG vs. CG (Recall@top-k, k 为整数形式)

                    为了减少图的数量, 图       14  和图  15  的每个子图都包含了    CDAG  和  CG  在  8  个系统上的对比结果. 方法名后面
                 括号内的是软件名       (如  CG (argoUML)), 比较需要在同一个软件的       CDAG  和  CG  之间进行. 从图  14  和图  15  的结
                 果可知, 在所有的系统上、在所有的阈值处, CDAG             都优于相应的      CG.
                    从  CDAG  与  CG  的对比结果可知: 在检查不超过前        15% (或  top-25) 的节点时, 使用动态分析对结果进行优化
                 有助于提升    CDAG  方法的性能.
                    RQ4: 不同的赋权方式对       CDAG  的性能是否有影响?
                    本文使用    3  种方式为  CCN  中不同类型的耦合赋权. 从公式         (5) 可知, 边权的差异会直接影响类的          GEN  值. 本
                 节将检验不同的赋权方式对          CDAG  方法性能的影响.
                    从图  6–图  8  可知, 在不同的赋权方式下, CDAG       在同一个系统的某个特定阈值处并非都具有相同的值. 例如
                 在  argoUML  的阈值  k=2%  处, CDAG  在不同赋权方式下的值分别是          0.500 (DWM)、0.667 (OWM) 和   0.583
                 (EWM), 这些值互不相同. 这表明不同的赋权方式对结果有一定的影响. 此外, 我们使用                      Friedman  检验进一步分析
                 在整个测试集     (8  个系统) 上, 不同赋权方式对      CDAG  性能的影响. CDAG    在不同赋权方式下的平均排名如图             16
                 所示, 其相应的    P  值  (显著性水平) 均远大于    0.05, 这表明我们的结果接受原假设, 即不同方法之间没有显著差异.

                         2.4                                    2.6
                                                      DWM                                    DWM
                                                      OWM                                    OWM
                                                      EWM       2.4                          EWM
                         2.2
                                                                2.2
                         Rank  2.0                              Rank  2.0


                                                                1.8
                         1.8
                                                                1.6
                             0   2  4  6   8  10  12  14  16      0     5    10    15    20   25
                                          k (%)                                 top-k
                                         图 16 CDAG   方法在不同赋权方式下的平均排名

                    根据   Friedman  检验的结果及相应的      P  值, 我们可以得出结论: 不同的赋权方式对           CDAG  的性能没有显著
                 影响.
                    RQ5: 在运行效率方面, CDAG      是否可行?
                    作为一种实用的关键类识别方法, CDAG            需要具备在不同规模软件系统中高效运行的能力. 为了评估                    CDAG
                 的效率, 我们跟踪了其在       8  款实验软件上进行关键类识别时的时间消耗.
                    从图  1  可知, CDAG  的时间消耗主要来源于        5  个部分: (1) 提取结构信息, 并构建软件网络; (2) 计算所有类的
   195   196   197   198   199   200   201   202   203   204   205