基于AST变化嵌入的实时缺陷预测
2022-7-27 08:30:32 Author: 安全学术圈(查看原文) 阅读量:10 收藏

原文标题:Just-in-time defect prediction based on AST change embedding

原文作者:Zhuang W, Wang H, Zhang X

原文链接:https://www.sciencedirect.com/science/article/pii/S0950705122004075

原文来源:KBS'22

笔记作者:[email protected]

笔记小编:[email protected]

近年来,利用代码表示技术提取软件代码文件的语义特征被认为是有效的。然而,如何从破碎的变化代码片段中提取语义信息仍然是一个具有挑战性的问题。本文使用AST来表征代码语义,通过比较变更前后的AST,提取AST的变更序列;同时结合门控机制,将人工提取的特征和代码的语义特征相结合,构建了一个名为ACE(AST变更嵌入)的JIT缺陷预测模型,并在10个开源Java项目上分别进行了项目内和项目间缺陷预测实验。JIT缺陷预测的一般模型如图1所示。分为:

  1. 数据标注:将代码变更标记为buggy或clean;
  2. 特征提取
  3. 模型构建
  4. 模型评估
Fig. 1 JIT缺陷预测一般模型

ACE模型的特征提取流程如图2所示。首先获取变更前后的源代码,生成对应的AST。使用GumTree工具来识别两个AST的不同节点。

对于AST的变更节点,作者考虑了四种语义编辑操作,探索如何通过不同的语义编辑操作将旧文件的AST更改为新文件的AST。四种语义编辑操作为:

  1. Insert:如图2橙色文本所示,Insert节点作为新的节点插入到新文件的AST中。

  2. Delete:如图2红色本文所示,新文件的AST变更节点被删除。

  3. Move:如图2绿色文本所示,将这类变更节点移动到新文件AST中的另一个位置。

  4. Update:如图2蓝色文本所示,用变更节点来修改AST的label属性发生变化的节点。

在AST变更序列中,作者使用_符号来连接变更节点和它们对应的语义编辑操作。

Fig. 2 ACE模型特征提取流程

对于一个源代码,其AST中第i个变更节点表示为,则该源代码可以由AST变更序列表示。遍历所有的源代码,可以得到一个由AST变更序列组成的语料库。使用GloVe构建词向量模型。这样一来,对于一个AST变更序列,可以得到其对于的ACE嵌入矩阵。同时,模型还用到了如图3所示的人工特征。

Fig. 3 模型采用的14个人工特征

模型的训练流程如图4所示。模型由两个LSTM网络构成,一个用于获取ACE语义特征的表征,另一个用于处理人工特征。为去除特征中的噪声,帮助模型学习得到更robust的特征,作者在LSTM网络后面加了gate单元进行噪声过滤。然后使用如下连接函数对两种不同类型的特征进行融合,其中,h表示LSTM最后的输出,W、b表示gate单元的参数,σ表示Sigmoid函数。最后,使用Softmax进行分类,损失函数用的是CrossEntropy。

Fig. 4 模型训练流程

在模型评估阶段,作者分别对模型的项目内和项目间缺陷预测能力进行了评估。

对于数据集的组织,无论是缺陷预测还是缺陷定位模型,都是按照缺陷代码的日期进行升序排序,前百分之x作为训练集,后百分之y作为测试集。本文同理,前3/4作为训练集,后1/4作为测试集。同时,作者还在训练集和测试集之间增加了一个gap,如图5所示。表示第i次提交代码提交。实心圆表示buggy提交,空心圆表示clean提交。箭头起始端修复了终止端的缺陷。对于Run 1,1-6被分作为训练集,7-8被分作为训练集;在这种情况下,模型无法学习到7是5的修复,所以5会被预测为clean。为解决这个问题,作者在采用了Run 2的方式,在训练集和测试集之间添加gap。

对于跨项目缺陷预测,使用一个作为训练,剩余9个作为测试,构建数据集。

Fig. 5 训练集和测试集划分

文章选择的10个用于测试Java项目如图6所示,gap设置为2个月。

Fig. 6 数据集

看完论文,不由感慨,现在写文章都奔着20多页去了吗?太卷了吧。文章里面的各种对比实验让人眼花缭乱,工作量确实挺大的,方法上感觉也有新颖性。但是,在解释训练集和测试集的设置时,gap的用途个人感觉没有解释得太清楚。我理解gap部分不做训练?不过确实也存在作者在描述gap部分时提到的问题,可以深究一下。

安全学术圈招募队友-ing 
有兴趣加入学术圈的请联系 secdr#qq.com


文章来源: http://mp.weixin.qq.com/s?__biz=MzU5MTM5MTQ2MA==&mid=2247488081&idx=1&sn=b4af64dd92a3a2f2dc3d5439b935dc1c&chksm=fe2eeddac95964ccfde27e6260bdd3e01fec74174fe5e8bff85101fc380527be4bef10285721#rd
如有侵权请联系:admin#unsafe.sh