Page 186 - 《软件学报》2026年第5期
P. 186
潘伟丰 等: 基于动态分析和引力公式的关键类识别 2065
合及邻居节点度分布的多样性对类重要性的影响. 相比于其他指标, GEN 可以更加全面地刻画类的结构特征.
2) 提出了静态分析技术和动态分析技术相结合的关键类识别方法, 使用动态分析技术对静态分析的结果进行
优化, 包括测试用例的自动生成、运行时类信息的收集以及类集的扩充等重要步骤.
3) 为了支持外部验证和后续研究, 我们公开了实验所用的全部数据及 CDAG 方法的源代码. 相关资料可从
https://github.com/wfpan/CDAG 下载.
本文第 1 节介绍所提出的基于动态分析和引力公式的关键类识别方法. 第 2 节通过充分的数据实验检验所提
出方法的有效性. 第 3 节介绍关键类识别的相关方法和研究现状. 最后总结全文并展望下一步工作.
1 CDAG 方法
CDAG 方法主要包含 3 个部分 (如图 1 所示): ① CCN 的构建; ② GEN 指标的构建; ③ 类排序及关键类识别.
以下各节将以 Java 软件为例, 详细介绍各部分的实施过程.
CCN 构建 (源代码的静态分析) 源代码的动态分析
软件源文件 结构信息 CCN 用户操作手册 测试用例 执行轨迹 扩充类的集合
提取软件元素及其 类/接口 1 2 3
交互关系 1 4 1
关系 2 1 1
1
微调排序结果
p d , i j IE i I j E
GEN ( ) i , i j
j sib o i p d , i j d 2
h V j h , h j , i j Compute 8.90 Metadata 12.55
w SetColor 0.02 Compute 8.90 Precision=0.90
IE w e vw v e
w w Metadata 12.55 SetText 4.32 Recall=0.75
v in w u on v vu
… … … … F1=0.85
deg deg SetText 4.32 SetColor 0.02
w e x ln x
x in w deg y deg y 计算类重要性值 降序排序 计算评价指标
y i s b x y i s b x
GEN 指标构建 类排序及关键类识别
图 1 CDAG 方法的框架图
1.1 CCN 的构建
如前所述, 使用静态分析技术构建的软件网络可能会包含“死代码”, 从而导致所构建的软件网络“不准”; 使用
动态分析技术构建的软件网络过分依赖于测试用例, 可能导致所构建的软件网络“不全” (遗漏真正的关键类). 为
了兼顾软件网络的“准”和“全”, 我们使用静态分析技术和动态分析技术相结合的方式识别关键类, 即: 通过静态分
析构建 CCN 和度量类的重要性, 并通过动态分析对静态分析的结果进行优化.
为了构建 CCN, CDAG 将使用静态分析技术对 Java 软件的源代码进行分析, 解析出源码中的各类软件元素
(类、接口、枚举、属性、方法、局部变量等) 以及元素之间的耦合关系 (类之间的继承关系、类对接口的实现关
系、方法之间的调用关系等), 并将提取的信息抽象成 CCN 中的节点、有向边和边的权值. 我们使用自主研发的
软件网络分析平台 SNAP (software network analysis platform) [5,9−11,24] 提取上述软件的结构信息.
CCN 的定义如下 [5,9−11,24] :
CCN = (V,L) (1)
其中, V 是 CCN 的节点集, 用于抽象软件中的类; L 是 CCN 的有向边集, 用于抽象类之间的耦合关系. 在本文中,
类是 Java 中类、接口和枚举的统称. 此外, 我们忽略两节点之间在某个特定方向上的多条边, 即: 若节点 A、B 之
间存在多条从节点 A 指向节点 B 的有向边, 则仅保留其中的一条.
在 CCN 的构建过程中, 我们将类之间共 9 种不同类型的耦合抽象为 CCN 中的有向边 ⟨A,B⟩.
1) 继承关系 INH (inheritance relation): 类 A 通过关键字“extends”继承类 B.
2) 实现关系 IMP (implements relation): 类 A 通过关键字“implements”实现接口 B.

