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) 计算所有类的

