背景
- 出处:2016 IEEE/ACM 38th IEEE International Conference on Software Engineering
- 作者:Song Wang,Taiyue Liu and Lin Tan
概述
论文主要观点
解析程序源代码中的抽象语法树(AST),利用深度置信网络(DBN)从中抽取特征,形成“语义特征”,利用这些特征进行软件缺陷检测。
成果
利用DBN从AST中抽取的语义特征在within-project和cross-project中均表现良好。
方法模型#
相关工作图
主要步骤
- 将源码转换成AST;
- 从AST中识别声明节点、控制流节点等,将其转换成向量;
- 将向量中的元素映射成数字,形成数字向量;
- 将向量送入DBN中进行特征提取(降维),产生最终的“语义特征”;
- 如此形成带标记的训练数据,在训练数据上利用经典分类器训练。
实验
- 为DBN选择三个参数:通过改变参数值不断实验得到最优值;
- within-project:选择同一个项目的两个连续的版本,前一个作为训练数据,后一个作为测试数据。对比另外两个特征;
- 对比不同的分类器,均为经典分类器,朴素贝叶斯,逻辑回归等;
- cross-project:两个不同的项目,第一个用来训练,第二个用来测试。对比ACT+算法(使用经典特征);
- 测试算法的时间空间复杂度。
创新点
所谓的“语义特征”,用DBN处理AST,对raw数据进行了压缩提纯。
总结
优点
“语义特征”的效果似乎非常好。
不足
对比的TCA+是作者自己实现的,其效果不一定有原始的好,数据来源不太可靠。
我的想法
可否在分类器上再做些更好的选择?