Page 293 - 《软件学报》2021年第7期
P. 293
贾修一 等:基于变分自编码器的异构缺陷预测特征表示方法 2211
通过引入式(9)损失项,就可以保证源项目与目标项目经过映射后,隐式特征空间从均值相近的高斯分布中
重采样.此时,隐变量所服从的方差参数描述了源项目和目标项目之间的真正差异所在,从生成模型可以有效地
重构原始数据,还原原始的边缘概率分布.由此我们可以得出,隐式分布中的均值参数体现了源项目与目标项
目之间公有的高层语义特征度量,而标准差参数体现了源项目和目标项目之间的差异,也就是项目各自的特
性,从而可以有效地捕获更具价值的特征表示,以进一步指导软件开发中影响缺陷的宏观层面的相关因素,以帮
助开发人员调整优化结构.
3.3 利用判别网络提取缺陷相关的高层特征表示
我们对推断模型输出的均值向量 之后追加一层非线性感知机,用于预测在以该均值向量作为参数的后
s
(| ),x 判断模块包含缺陷概率 qy
验概率分布 qz (| ) 的性能好坏,并不断优化其中的参数.由于我们只有源项
(|
)
目的标记信息,没有目标项目的标记信息,因此,基于源项目训练出来的分类模型 qy 性能的好坏完全取决
s
|
于:(1) 源项目的后验概率分布 qz x s ) 与目标项目的后验概率分布 qz t t
(
(| )x 两者之间的匹配程度;(2) 源项
s
)
(|
目隐式特征表示的条件概率分布 qy 与目标项目隐式特征表示的条件概率分布 qy 两者之间的相
(|
)
t
s
似程度.在异构缺陷预测问题中,无论是源项目还是目标项目,提取缺陷度量时通常基于一个核心假设,即对于
越复杂的软件模块而言,其包含缺陷的概率越大.因此,对于原始数据而言,如果能够很好地学习原始缺陷数据
)
集的边缘概率分布 p(X),我们就可以推断出它们之间的条件概率分布 (|py X 也应该是相似的.
本文采用交叉熵计算判别模型预测出的包含缺陷的概率和真实是否有缺陷的标记作为损失,具体的损失
项如下式所示:
s n
( , ˆ y
Hy s s ) y i s log( ˆ )y i s (11)
i 1
其中,y s 表示源项目数据是否包含缺陷的真实标记, ˆ y 表示判别网络对源项目数据预测是否包含缺陷的概率值.
s
结合上述各小节所述,基于公式(5)、公式(9)和公式(11),最终的模型目标函数如下:
min E [E [ logqx ( | )]]z E [D (q ( | ) || ( ))]z x p z MMD( , ) H ( ,y y ˆ ) (12)
zx
p
ˆ () x q (| ) 1 p ˆ ( ) x KL 2 s t 3 s s
首先,源项目数据集和目标项目数据集成对输入变分自编码器网络之中,通过推断网络得到隐式特征分布
的参数和.然后,(1) 根据参数重采样得到新的隐式变量 z 并输入至生成网络,计算重构误差以及隐式分布和
先验分布之间的 KL 散度,分别对应公式(12)目标函数的第 1 项和第 2 项;(2) 计算源项目对应的 和目标项目
s
对应的 之间的最大均值差异距离,对应目标函数的第 3 项;(3) 计算以 为判别网络输入得到的有缺陷概率
t s
和真实缺陷标记之间的交叉熵,对应目标函数第 4 项;最终逐步训练整个网络,网络架构基于 Tensorflow 2.0 框架
实现,通过 Keras 提供的 ADAM(adaptive moment estimation)优化器来求解我们的目标函数. 、 和 为正则
1
3
2
化参数.
4 实验分析
4.1 实验数据
我们在公开缺陷数据集上进行实验,包括 NASA、SOFTLAB、AEEEM 和 ReLink.在这些数据集中,有缺陷
成分的百分比为 8.65%~50.52%.表 1 给出了数据集所对应的详细项目信息.
[5]
NASA 数据集广泛应用于缺陷预测 ,其静态代码度量包括大小、可读性、复杂性等,它们与软件质量密切
相关.我们使用了 5 个项目,包括 CM1、MW1、PC1、PC3 和 PC4,因为这 5 个项目具有 37 个通用度量.
土耳其软件公司(SOFTLAB)由 AR1、AR3、AR4、AR5 和 AR6 项目组成,其中的项目是从 PROMISE 存
储库中获得的,有 29 个度量元,其中包括 Halstead 和 McCabe 的圈数度量.
ReLink 中的数据集由 Wu 等人收集 [26] ,通过增加缺陷数据的质量来提高缺陷预测性能.ReLink 中的缺陷信
息已通过手动验证和纠正并由 3 个开源项目组成,每个项目都有 26 个复杂性度量.
[3]
AEEEM 由 D’Ambros 等人收集 .每个 AEEEM 数据集包含 61 个度量标准:17 个源代码度量标准,5 个先前