Page 313 - 《软件学报》2021年第7期
P. 313

张献  等:基于代码自然性的切片粒度缺陷预测方法                                                        2231


                 集(software assurance reference dataset,简称 SARD).目前,这两个数据源已被广泛应用于安全缺陷领域的研究工
                 作.在 NVD 中,每个漏洞样本包含一个通用漏洞披露标识(common vulnerabilities and exposures identifier,简称
                 CVE ID)和一个通用缺陷列表标识(common weakness enumeration identifier,简称 CWE ID),它们指示了漏洞的
                 相关类型.在 SARD 中,每个程序样本对应一个或多个 CWE ID,这是由于实例可能包含多种漏洞类型所致.
                    数据集的基本信息见表 3,其中,软件模块总数为 61 638,无缺陷模块数为 43 913,缺陷模块数为 17 725,平均
                 缺陷率为 28.76%,模块的平均代码行为 9.16.这些样本源自 NVD 库中 19 个知名 C/C++开源项目(如 Linux
                 kernel、Firefox、Thunderbird 等)的 840 个源程序和 SARD 库中 9 851 个 C/C++源程序.针对这些源程序和 6 045
                 种 C/C++库/API 函数调用,实验共抽取了 56 902 个函数调用实例            [30] ,包括 7 255 个前向函数调用和 49 647 个后
                 向函数调用.其中,数据集中共有 10 440 个模块对应 BE 缺陷,7 285 个模块对应 RME 缺陷.进一步观察后可知,
                 数据集中软件模块的平均代码行仅为 9.16,远小于常用的文件粒度模块的代码规模                           [34,41,44,55,56] .换言之,当缺陷
                 预测模型将某个新模块判别为“有缺陷类型”时,软件开发人员只需重点审查大约 10 行代码(平均意义上)即可,
                 从而极大地节约了成本,提高了效率.
                                        Table 3    Information of the slice-level defect datasets
                                               表 3   切片粒度缺陷数据集信息
                             数据集名称           模块数         缺陷模块数         缺陷率(%)       平均代码行
                               BE-ALL        39 753       10 440        26.26         8.54
                              RME-ALL        21 885        7 285        33.29         10.29
                              总计/平均          61 638       17 725        28.76         9.16

                 4.3   评价指标
                    为充分验证本文方法的有效性,实验将考察 CE 类度量元的判别力和缺陷预测模型的分类性能.考虑到不
                 同评价机制存在不同“偏好”,实验将选取多种评价指标来减少偏差.
                    (1)  度量元判别力评价指标
                    判别力指标旨在评价度量元在区分样本类别方面的能力,本质上也是在解决特征与类标间的相关程度度
                 量问题.一般情况下,度量元的判别力越强,模型就越有可能得到好的预测结果.我们选取了 3 种常用的过滤式特
                 征选择方法    [57] ,用来衡量不同度量元的判别力:Pearson 相关性、Fisher 准则和信息增益,这些方法均是效益型度
                 量指标,目前已在软件缺陷预测中得到了广泛应用                 [34,58,59] .
                    Pearson 相关性是一种简单且常用的相关性度量指标,它反映了两个变量间的线性相关程度:
                                             PC (, )X Y   cov(, ) / var( ) var( ),X Y  X   Y
                 其中, PC  [0,1], X 和 Y 表示两个随机变量, cov( , )X Y 和 var( )X 分别表示协方差函数和方差函数.
                    Fisher 准则可由经典的线性判别分析诱导而来,其旨在衡量不同类别样本间的易区分度:
                                                           S   (X   X  ) 2
                                                FC (X X   )   b        ,
                                                      ,
                                                     
                                                                  2
                                                           S w   S   S   2
                                                                  
                 其中, FC   0,    , “+”和“”表示两种类别, X 表示样本特征的均值;S b 和 S w 分别表示类间散度和类内散度;
                                    2
                    
                 S 2 /    i x  X  /   (x   i  X  /   ) 表示“+”类/“”类的类散度.
                    信息增益是一种基于熵的度量指标,其度量观测特征 x 后类标 y 减少的不确定性,即增加的信息量:
                                                  IG (, )X Y   HY   ( |  ),
                                                            ( ) HY X
                 其中, IG   0,    , 这里,X 和 Y 表示的是特征 x 和类标 y 的取值集合,H(Y)和 HY
                                                                              (| )X 表示香农熵和条件熵.
                    (2)  缺陷预测性能评价指标
                    本文关注的软件缺陷倾向性预测问题在本质上可视为一个典型的二分类问题,即将软件模块分为有缺陷
                 类或无缺陷类.在二分类问题中,一个待测样本可被预测为 4 种情况,即真阳性(true positive,简称 TP)、假阳性
                 (false positive,简称 FP)、真阴性(true negative,简称 TN)或假阴性(false negative,简称 FN).为可观评价预测模型
                 性能,选取了 5 种使用最为广泛的评价指标             [6,60] :假阳性率(false positive rate,简称 FPR)、假阴性率(false negative
   308   309   310   311   312   313   314   315   316   317   318