Page 195 - 《软件学报》2026年第5期
P. 195
2074 软件学报 2026 年第 37 卷第 5 期
TP
Precision = (13)
TP+ FP
2×Precision×Recall
F1 = (14)
Precision+Recall
其中, TP (true positive) 指识别为关键类的实际也是关键类的数量; FP (false positive) 指识别为关键类的实际是非
关键类的数量; FN (false negative) 指识别为非关键类的实际是关键类的数量; TN (true negative) 指识别为非关键类
的实际也是非关键类的数量. 此外, 对于关键类识别问题, Recall、Precision 和 F1 的变化趋势是一致的, 即 Recall
大的方法其 Precision 和 F1 也大 [5] . 因此, 我们无需同时报道 Recall、Precision 和 F1 这 3 个结果. 在公式 (12) 中,
分子表示识别为关键类的实际也是关键类的数量, 分母实际上表示的是一个软件中关键类的数量. 因此, Recall 实
际上求的是特定方法正确识别的关键类的比例. 方法越好, 其 Recall 值越大. 鉴于 Recall 已经可以直接反映某一方
法在关键类识别方面的性能, 在数据实验部分, 本文仅报道了 Recall 的结果, 其他相关数据及结果可以从 https://
github.com/wfpan/CDAG 处下载.
2.4 实验结果及分析
本文将重点围绕以下 5 个研究问题展开实验.
● RQ1: 在检查不超过前 15% 的节点时, CDAG 是否比现有方法更有效?
● RQ2: 在检查不超过 top-25 的节点时, CDAG 是否比现有方法更有效?
● RQ3: 动态分析对关键类识别是否均有效?
● RQ4: 不同的赋权方式对 CDAG 的性能是否有影响?
● RQ5: 在运行效率方面, CDAG 是否可行?
我们按照图 1 所示的步骤构建 CCN、计算类的重要性、对类进行排序和对结果进行优化, 最终得到候选关
键类. 在本节中, 我们将围绕所提出的几个研究问题开展数据实验, 详细检验方法的有效性.
RQ1: 在检查不超过前 15% 的节点时, CDAG 是否比现有方法更有效?
目前已有不少关键类识别方法, 本节将检验我们提出的 CDAG 方法在关键类识别上是否比现有的方法效果
更好. 首先关注阈值 k 取值 1%–15% (步长为 1%) 的情况, 即将软件中前 k×|V| (|V|为 CCN 中的节点数) 的类视为候
选关键类. 图 6 所示的是我们的方法 CDAG 及 11 种对比方法在 8 个软件、15 个阈值上取得的结果 (Recall
值). 在构建 CCN 时, 我们采用 DWM 为不同类型的耦合赋权.
0.8
1.0 1.0 1.0 0.7
0.8 0.8 0.8 0.6
0.5
0.6
0.6
Recall 0.4 Recall 0.4 Recall 0.6 Recall 0.4
0.3
0.4
0.2 0.2 0.2
0.1
0.2
0 0 0
0 −0.1
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
k (%) k (%) k (%) k (%)
(a) argoUML (b) jEdit (c) jHotDraw (d) jMeter
1.0 0.40
0.35 1.0 1.0
0.8 0.30
0.8 0.8
0.25
Recall 0.6 Recall 0.20 Recall 0.6 Recall 0.6
0.4 0.15 0.4 0.4
0.10
0.2 0.05 0.2 0.2
0 0 0 0
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
k (%) k (%) k (%) k (%)
(e) Mars (f) Maze (g) PDFBox (h) wro4j
a-index PageRankBR PageRank ICOOK h-index k-core
PageRankIVOL ElementRank Pride MinClass iFit CDAG
图 6 Recall@top-k (使用 DWM 为不同类型的耦合赋权, k 为百分比形式)

