赞
踩
题目: Automatically Learning Semantic Features for Defect Prediction
作者: Song Wang, Taiyue Liu, Lin Tan
单位: Electrical and Computer Engineering, University of Waterloo, Canada
出版: ICSE, 2016
现有的机器学习与缺陷预测结合的方法大多无法抓住程序的语义信息,因而无法构建精确的预测模型。本文提出用深度学习的方法来自动学习代码的语义表达,建立起缺陷预测和程序语义之间的桥梁。
我们的方法整体过程如图所示:
我们利用Java AST来从源码中抽取语法信息。以下三种AST结点被我们抽取出来:
我们从每个文件中抽取出以上结点组成一个结点序列。
此外,我们过滤掉出现次数少于3次的结点语句,因为它们可能是为特定文件设计的,难以推广到其他文件。
我们将所有样本中的所有语句编号,用语句的编号代替该语句,完成从语句序列到整数向量的映射。
每个文件生成的整数向量长度可能不同,而DBN需要等长的输入向量,因为我们取最长向量的长度作为所有向量的长度,对于较短的向量,我们在该向量末尾补0,直到与最长向量长度一致。
我们将所有层的结点数设为相同值
DBN要求输入向量的每一维取值范围均为[0, 1],因此我们采用了min-max标准化,才输入了DBN网络。
我们设计实验来回答以下问题:
2.5GHz i5-3210M, 4GB RAM
从PROMISE数据集中选出了10个开源Java程序作为数据集,程序信息如图所示:
为验证我们方法的有效性,我们另外选定了两组特征,用它们构建同样的DBN+分类器模型,比较三种方法的实验结果。两组特征如下:
通过试验,确定了DBN层数为10层,每层结点数为100个,迭代次数为200次
利用SMOTE算法对训练数据进行处理
我们用一个项目较旧版本的代码作为训练集来训练DBN模型和分类模型,将较新版本代码作为测试集输入已训练好的DBN模型和分类模型,得到分类结果。分类模型采用ADTree,朴素贝叶斯,逻辑回归模型。
利用DBN+ADTree得到的分类效果如下图所示:
朴素贝叶斯模型和逻辑回归模型效果的对比:
用下图中Source中的程序作为训练集,Target中的程序作为测试集,将我们的方法与TCA+(J.Nam et al. Transfer defect learning)方法进行对比:
生成基于DBN的特征所用时间和空间如图所示:
其中时间是将降噪后向量通过DBN得到特征向量所用的时间,不包括解析源码,抽取AST结点和映射等过程。
作者没写,只写了未来工作,可能在C程序上展开,也可能将本文方法应用于其他层级的缺陷预测,例如函数级别,软件模块级别等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。