Page 100 - 《软件学报》2021年第5期
P. 100

1324                                     Journal of Software  软件学报 Vol.32, No.5,  May 2021

                 feature space,简称 MFS),多源特征空间包含了软件的设计元素(如实体、功能、执行行为)以及设计元素之间的
                 二元关系.多源特性主要体现在:MFS 模型从软件系统的代码、文本、接口信息、修订历史、运行轨迹等多源
                 数据中抽取出多样化的设计元素和二元关系.多源特征空间 MFS 表示为
                                               MFS=〈D,DSM,σ:(D,D)→DSM〉                                (1)
                 其中,D 表示设计元素的集合,D=E∪G∪T.E 表示软件的实体元素的集合,实体元素包括方法/操作(opr)、类
                 (class)、接口(inf)、文件(file),即 E=ClassSet∪OperationSet∪FileSet∪InterfaceSet,且 OperationSet={opr},ClassSet=
                 {class},InterfaceSet={inf},FileSet={file};G 表示该软件所提供的功能集合,G={g};T 表示该软件的执行行为集合,
                 T={t}且 t=〈(opr 1 ,opr 2 ),(opr 3 ,opr 4 ),…,(opr m−1 ,opr m )〉,(opr i ,opr j )表示方法间的调用行为.
                    使用设计结构矩阵(design structure  matrix,简称 DSM)表示设计元素之间的二元关系              [16] .DSM 以邻接矩阵
                 的结构存储二元关系,矩阵中行和列分别对应一组设计元素,(i,j)单元格的值表示 i 行对应的设计元素与 j 列对
                 应的设计元素之间的某种二元关系值.
                    映射函数σ计算每对设计元素的二元关系值,据此构建出相应的 DSM,第 1.2 节将详细介绍.

                 1.2   映射函数以及DSM生成
                    本节将介绍不同的二元关系映射函数σ及其相应的 DSM,具体包括 DSM s 、DSM c 、DSM e 、DSM m 、DSM d 、
                 DSM b 以及 DSM p .
                    (1) DSM s  (structure DSM)
                    生成 DSM s 的二元关系映射函数为σ structure (class i ,class j ),该映射函数计算 class i 和 class j 在源代码中的结构
                 依赖.通过分析源代码的抽象语法树来抽取类之间的继承、接口实现、调用、参数类型引用、返回值类型引用
                 等结构依赖    [10] .如果从 class i 到 class j 存在上述任一种结构依赖,则 DSM 单元格(i,j)的值为 1;否则,值为空.
                    (2) DSM c  (concept DSM)
                    生成 DSM c 的二元关系映射函数为σ concept (class i ,class j ),该映射函数计算 class i 和 class j 在语义上的相似度.
                 如果构成这两个类的文本标识符的功能逻辑词汇的交集不为空,则表示这两个类之间存在语义相似                                       [8,17] ,在
                 DSM 中单元格(i,j)的值为 1;否则,值为空.
                    (3) DSM e  (evolution DSM)
                    生成 DSM e 的二元映射函数为σ evolution (file i ,file j ),该映射函数计算 file i 和 file j 在代码演化过程中的共同修改
                 程度.参考 Mo 等人提出的方法        [18] ,可将软件修订历史中 file i 和 file j 一起被修改的提交(commit)数可作为 DSM
                 单元格(i,j)的值.
                    (4) DSM m  (message DSM)
                    生成 DSM m 的二元映射函数为σ message (opr i ,opr j ),该映射函数计算 opr i 和 opr j 在消息粒度的相似度.参考
                 Mancoridis 等人的工作  [19] ,消息粒度的相似度是 opr i 和 opr j 的输入消息(即参数)之间相似性和输出消息(即返回
                 值)之间相似性的均值,计算公式如下:
                                                       1 ⎛  | ret ∩  ret  |  | par ∩  par  | ⎞
                                        σ    (opr ,opr =  )  i  j  + ⎜  i   j  ⎟                      (2)
                                         message  i  j  2 | ret ∪  ⎜  ⎝  i  ret j  |  | par ∪  i  par j ⎠  | ⎟
                 其中,ret i 和 par i 分别是 opr i 的返回值集合和输入参数集合.
                    (5) DSM d  (domain DSM)
                    生成 DSM d 的二元映射函数为σ domain (opr i ,opr j ),该映射函数计算 opr i 和 opr j 在领域粒度的相似度.参考
                 Mancoridis 等人的工作  [19] ,领域粒度的相似度等于 opr i 和 opr j 的方法签名之间的相似性,计算公式如下:
                                                         | f  (opr ∩  f  (opr  ) |
                                                                )
                                                       )
                                           σ    (opr ,opr =  term  i  term  j                         (3)
                                            domain  i  j  | f  (opr ∪  f  (opr  ) |
                                                                )
                                                           term  i  term  j
                 其中,f term (opr i )表示操作 opr i 的签名(method signature)所包含的领域词汇的集合.
                    (6) DSM b  (behavior DSM)
   95   96   97   98   99   100   101   102   103   104   105