软件学报
or not. We conducted comparison experiments on 15 sets of source-target project pairs, and the experimental results demonstrate the
effectiveness of the AC-GAN method.
Key words: Cross-project defect prediction; Generative adversarial network; Bag-of-words model; Abstract syntax tree
1 引言
现代软件在人们的日常生活中发挥着越来越重要的作用.然而,潜在的软件缺陷对软件的质量和可靠性构
成了严重威胁.潜在的软件缺陷越晚被发现,修复缺陷的成本就越高,严重时可能给企业带来巨大的经济损失,
甚至有时会造成人员伤亡
[1]
. 为了更好地保证软件质量, 研究人员提出了软件缺陷预测(software defect
prediction,简称 SDP)技术
[2]
.SDP 是软件工程中数据挖掘领域的一个研究热点,它希望在项目开发的早期阶段就
能提前发现并改进有缺陷的程序模块,从而帮助开发人员更快地发现缺陷代码,以节省开发时间,提高测试效
率.
传统的 SDP 研究用手工提取的静态度量来进行缺陷预测.程序模块中的源代码作为一种形式语言,包含丰
富的结构信息和语义信息,手工提取的静态度量主要集中在程序的统计特性上
[3]
,无法从源代码中捕获这些复
杂的信息,这就使得当有 bug 代码与无 bug 代码在结构上类似时,手工提取的静态度量无法捕获这些缺陷,这个
局限性是影响缺陷预测准确性的重要因素.为了克服这一局限性,一些研究人员利用深度学习从源代码中学习
有意义的语义和上下文特征
[4-6]
.为在整个训练和预测过程中不丢失代码的语义和上下文信息,本文采用抽象语
法树(abstract syntax tree,简称 AST)
[7]
的形式来表示代码,利用连续词袋模型(continuous bag-of-words model,简
称 CBOW)
[8]
来提取包含上下文信息的词向量,并将深度学习技术应用于特征提取阶段.
实现基于深度学习的 SDP 研究的前提是获得足够的历史数据来训练预测模型.但在实际开发中,需要预测
的软件项目可能是一个全新的项目,也可能是一个历史数据较少的项目.跨项目缺陷预测(cross-project defect
prediction,简称 CPDP)
[9]
由此被提出,通过借用其他成熟项目数据来弥补历史数据的不足,其中,将成熟项目视为
源项目(训练集),而将被预测项目视为目标项目(测试集).
在 CPDP 研究中,不同项目的功能、开发人员和开发流程不尽相同,这将导致源项目和目标项目之间存在数
据分布差异,
与训练集和测试集独立相同分布的假设相悖.因此,跨项目缺陷预测的性能往往低于项目内缺陷预
测.为了解决这个问题,很多学者采用机器学习的方法进行了相关研究
[10-12]
,包括迁移学习和特征选择等.然而,
这些传统的机器学习方法往往无法学习复杂的特征,而且损失函数的设计也很复杂.有实验证明,对抗学习中的
生成式对抗神经网络(generative adversarial network,简称 GAN)
[13]
作为消除域间差异工具能够很好地应用在自
然语言处理和图像识别等领域
[14-18]
.与传统方法相比,GAN 网络有以下优点:GAN 网络的训练过程采用两种对
抗性神经网络作为训练准则,可以采用反向传播的方法进行训练,且该训练不依赖低效的马尔可夫链方法,也不
依赖近似推理,没有复杂的变分下界,大大降低了训练难度,提高了训练效率;GAN 网络训练方式采用的是对抗
训练方式,可以产生更加清晰、真实的样本,且 GAN 网络利用鉴别器来实现数据迁移,能够避免迁移学习中损失
函数设计的困难.为了能够更好地解决源项目和目标项目代码文件间的数据分布差异问题,本文采用了 GAN 网
络中的对抗学习思想来训练具有领域适应性的神经网络,不断改变目标项目特征的分布直至其与源项目特征
分布相似.
基于上述分析,为了解决跨项目缺陷预测问题,本文提出了一种采用对抗学习的抽象连续生成式对抗网络
(abstract continuous generative adversarial network,简称 AC-GAN)方法.其过程如下:首先,源项目和目标项目中
每个模块的代码被解析为抽象语法树,按照深度优先原则遍历出节点序列;接着,通过词嵌入技术 CBOW 算法
生成词向量,并根据词向量表将节点序列转换为数值向量;然后,将与源项目相对应的带标记的数值向量作为输
入,对源特征提取器和源分类器进行训练;再以源特征作为真实数据,目标特征提取器提取的目标特征作为假数
据输入到判别器中进行博弈,通过 GAN 网络的对抗训练,源数据和目标数据之间的分布差异被缩小;最后,分布
改变后的目标特征被输入到目标分类器中进行缺陷预测.
具体来说,本文针对跨项目缺陷预测的主要贡献如下:
评论