摘要
在软件开发中,违反语义规则的源码可以正常地编译或运行,但却存在性能或功能上的缺陷。因此,如何准确地检测此类缺陷成为了一项挑战。已有的研究通常采用基于项集的规则挖掘与检测方法,但由于未能良好地结合源码的顺序信息与控制流信息,此类方法在检测能力以及准确率上都有着较大的提升空间。针对该问题,文中提出了一种基于序列的程序语义规则提取与违规检测方法SPUME。该方法将程序源码转化为中间表示序列,使用序列规则挖掘算法从中提取语义规则,并基于语义规则来对源码中的缺陷进行检测。为验证SPUME 的有效性,文中将其与三个基线方法进行了对比,包括PR-Miner、Tikanga以及Bugram。实验结果表明,相较于基于无序项集进行规则挖掘的PR-Miner,以及结合了图模型的Tikanga,SPUME在检测效果、检测速度以及准确率上都有显著提升。而对比基于Ngram语言模型的Bugram方法,SPUME则在准确率接近持平的情况下,更高效地检测出了更多程序缺陷。
- 单位