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)和软件保证参考数据