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.
   181   182   183   184   185   186   187   188   189   190   191