1. 介绍
过去的传统方法常常关注在设计特性,希望通过行数、词频数、复杂度度量等来预测出缺陷,但是往往忽略了语法和语义方面的捕捉,这样一来会使得某些情况下设计特性不能够准确反映出源代码的缺陷
缺陷的定义
代码运行时,软件系统可能会表现出来的问题(比如栈溢出、内存泄漏等)
传统方法的局限所在
- 代码度量相同,语义不相同:比如包含了一模一样代码的、没有缺陷的两个代码段,如果在语法无误的情况下对调某一行的位置,是有可能出现两种不同语义的代码段的。也就是说,变化后的代码段可能蕴含了缺陷。
- 词与词频相同,语义不相同:原理同上。
- 词与词频不同,语义相同:比如java中 while 和 for代表的语义是相似的,互相替换不影响语义的情况下,传统检测方法会把二者区别开来,这会影响后续判断。
新的模型
Tree-structured Long Short Term Memory network which directly matches with the Abstract Syntax Tree representation of source code structure.
它的优点
- 保存了语法、语义、结构位置的信息。更准确的预测,弥补之前仅提取代码特征的预测能力的不足。