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

2066                                                       软件学报  2026  年第  37  卷第  5  期


                    3) 参数关系   PAR (parameter relation): 类  A  中的方法包含以类  B  为数据类型的参数.
                    4) 全局变量关系     GVR (global variable relation): 类  A  中存在以类  B  为数据类型的属性.
                    5) 局部变量关系     LVR (local variable relation): 类  A  中创建了以类  B  为数据类型的局部变量.
                    6) 返回类型关系     RET (return type relation): 类  A  中存在返回值类型是类  B  的方法.
                    7) 实例化关系    INS (instantiates relation): 类  A  中实例化了类  B  的对象.
                    8) 属性访问关系     ACC (field access relation): 类  A  中的方法访问了以类  B  为数据类型的属性.
                    9) 方法调用关系     MEC (method call relation): 类  A  中的方法调用了类  B  对象的方法.
                    CCN                                 ψ 关联.            ψ ij  的定义如下:
                        是一个加权有向网络, 它与一个权重矩阵                   ψ 中任一元素
                                                       {
                                                         w ij ,  ⟨n i ,n j ⟩ ∈ L
                                                   ψ i j =                                            (2)
                                                         0,  其他
                 其中,  w i j  是有向边  ⟨i, j⟩ 的边权, 用于抽象类节点  i 和类节点  j 之间的耦合强度. 边权越大, 表示相应类之间的耦合
                 强度越大. 如果边     ⟨i, j⟩ 存在, 则  ψ ij = w i j ; 否则,   ψ ij = 0. 因此, 求   ψ ij  的关键在于求  w i j .
                    在面向对象     (如  Java) 软件中, 不同类型的耦合会有不同的权值        (交互强度), 并且这些耦合类型在类之间发生的频
                 率也存在着显著差异. 因此, 类之间的耦合强度不仅受耦合类型的影响, 同时也受耦合类型发生频次的影响                              [5,9−11,19,24] .
                 此外, 在真实的软件系统中, 两个类之间可能会同时发生多种不同类型的耦合. 因此, 在计算两个类之间的耦合强度
                 时, 我们将由不同类型耦合产生的强度进行累加, 即类节点                i 和类节点   j 之间的耦合强度    w i j  的计算公式如下:

                                                           ∑
                                                               r
                                                       w ij =  f ×w r                                 (3)
                                                               i j
                                                             r
                 其中,  r ∈ {INH, IMP, PAR, GVR, LVR, RET, INS, ACC, MEC} 是上述  9  种耦合类型之一;   f  是类  i 与类  j 之间类型
                                                                                      r
                                                                                     i j
                 为  r 的耦合发生的频次, 其值可以通过分析所收集的软件结构信息确定;                    w r  是耦合类型  r 的权值. 因此, 求  w i j  的关
                          w r  的值. 在本文中, 我们使用   3              w r  赋权.
                 键在于确定                            种不同的方式为
                    (1) Brito E Abreu  等人  [29,30] 提出了一种基于耦合分布的赋权方法     DWM (distribution-based weighting mech-
                 anism). 该方法中, 不同类型耦合的权值会随耦合类型在软件不同包的包内和包外的分布变化而变化. 计算方法如下:

                                         
                                          10,                      N  r  , 0∧ N  r  = 0
                                                                    intra   inter
                                         
                                         
                                         
                                          1,                       N r  = 0∧ N r  = 0
                                         
                                                                    intra   inter
                                      w r =                                                          (4)
                                               (          r    )
                                                         N
                                         
                                                          intra
                                          round 0.5+10×         ,  其他
                                         
                                                        r    r
                                                       N   + N
                                                         intra  inter
                 其中,  N r   和  N r   分别表示类型为  r 的类间耦合其两端类出现在同一个包和出现在不同包的次数.
                       intra  inter
                    (2) Kang  等人  [31] 提出了一种基于顺序尺度的赋权方法        OWM (ordinal-scale-based weighting mechanism). 该方
                 法考虑了类之间的       6  种耦合类型, 并为它们分配       1–10  之间的数值作为其权值. 本文将所识别出的             9  种耦合类型
                 与  Kang  等人识别出的   6  种耦合类型进行映射      (对应关系如表     1  所示). Kang  等人未考虑  ACC  和  INS  两种耦合类
                 型. 因此, 在使用该赋权方法时, 我们将忽略这两种耦合类型.
                    (3) Şora 等人  [20] 提出了一种基于实验的赋权方法      EWM (empirical weighting mechanism). 在该方法中, 不同类
                 型耦合的权值是通过软件重构实验获得的, 即: 软件重构实验取得最优结果时, 各耦合类型所对应的权值. 赋权方
                 法如表   2  所示.
                                              [31]                                         [20]
                            表 1 OWM   赋权方法                               表 2 EWM   赋权方法

                 权值      Kang等人的耦合类型          本文的耦合类型               权值                 耦合类型
                                             MEC, PAR, LVR,          4                   IMP
                  1         Dependency
                                                  RET                3             INH, PAR, RET, GVR
                        Aggregation/Composition                      2               MEC, ACC, INS
                 5.5                              GVR
                            association                              1                   LVR
                  7   Generalization (concrete parent)  INH (concrete parent)
                  9   Generalization (abstract parent)  INH (abstract parent)
                  10         Realize              IMP
   182   183   184   185   186   187   188   189   190   191   192