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

2230                                     Journal of Software  软件学报 Vol.32, No.7,  July 2021


















                       程序源代码           (1)  抽取库/API      (2)  生成关于库/API        (3)  融合程序切片       (4)  标注软件模块的
                                          函数调用      函数调用中参数的切片        构成软件模块             质量类型
                                     Fig.4    Generation process of slice-level software modules [30]
                                               图 4   切片粒度模块生成过程        [30]

                 3.2   度量元设计
                    由调研情况来看,目前尚缺乏相关工作研究面向语句的切片粒度缺陷预测.为此,本文尝试设计了 4 种度量
                 元用于验证实验:修正的代码 token 序列交叉熵值 M-CE、修正的代码 token 逆序序列交叉熵值 M-CE-Inv、代
                 码行(lines of code,简称 LOC)和代码的 token 规模(token size,简称 TSize),见表 2.其中,度量元 M-CE 和 M-CE-Inv
                 是本文 CNDePor 方法首次引入的;LOC 是一种经典的规模度量元,被较早地用于缺陷预测,这里,LOC 是指切片
                 粒度软件模块的 LOC;TSize 同样是一种规模度量元,它反映了软件模块词化后的 token 数量.

                                    Table 2    The designed metrics of slice-level software modules
                                             表 2   设计的切片粒度软件模块度量元
                       度量元               全称                度量元类型                 度量元描述
                       M-CE            Modified  CE        代码自然性          修正的代码交叉熵值(token 序列)
                      M-CE-Inv   Modified CE of inverse sequence   代码自然性   修正的代码逆序交叉熵值(token 序列)
                        LOC            Lines of  code       代码规模                 模块的代码行
                        TSize          Token  size          代码规模              模块的代码 token 规模
                 4    实验设计


                 4.1   研究问题
                    为验证本文方法在切片粒度软件缺陷预测问题上的有效性,我们设计了以下 4 个研究问题(research
                 question,简称 RQ).
                    RQ1:在切片粒度缺陷数据集上,权重比例系数如何影响 CE 类度量元?
                    RQ2:在切片粒度缺陷数据集上,CE 类度量元是否具有判别力?
                    RQ3:在切片粒度缺陷数据集上,CE 类度量元能否带来预测性能的提升(贡献度如何)?
                    RQ4:在相同切片粒度缺陷数据集上,本文方法与其他方法对比后结果如何(性能与可解释性)?
                 4.2   数据集
                    本文使用的数据集       [30] 关注两类常见安全缺陷:缓冲区错误(buffer error,简称 BE)和资源管理错误(resource
                 management error,简称 RME),它们均可由库/API 函数调用的不恰当使用触发.因此,针对一些缺陷敏感的函数调
                 用类型,设计与之相关的切片准则,我们便可以收集到实验所需的数据集.
                    该数据集的原始样本源自美国国家标准与技术协会(National Institute of Standards and Technology,简称
                 NIST)的两个漏洞数据源:美国国家漏洞数据库(national vulnerability database,简称 NVD)和软件保证参考数据
   307   308   309   310   311   312   313   314   315   316   317