论文部分内容阅读
目前,计算机软件已广泛应用于多个领域中,其规模也日趋庞大和复杂,人们投入大量精力来保证软件的质量,并提出了很多自动化软件错误定位方法,用来帮助开发者快速定位到软件中的错误。但是,大部分错误定位方法的结果都是一个语句的可疑值序列,其中按照可疑值降序的顺序列出了不同语句的可疑值。但是,仅仅单独检查给出的一条可疑语句,开发者很难理解错误是如何产生的,往往还需要更多与错误相关的上下文信息。针对这一问题,本文完成了以下工作:首先,基于抽象语法树对待测程序进行语句级别和逻辑表达式级别两种不同粒度的插桩,并得到相应的程序执行路径。由于目前缺乏简单易用的C语言词法语法分析工具,因此本文使用C#语言实现了一个C语言词法语法分析工具CParser。其次,为提高错误定位精度,提出了加权软件行为图,将语句执行频率作为权重,可以更好的处理循环和递归等结构。根据成功执行和失败执行的程序执行路径,分别构造出相应的加权软件行为图。然后,利用基于分支限界搜索的加权软件行为图挖掘算法,识别成功和失败的加权软件行为图之间最有差异的子图作为错误签名,最后得到的Top-K错误签名作为错误定位和错误理解的依据,并给出错误签名用于错误理解的实例。最后,使用Siemens Suit对本文方法进行了测试,分别分析本文方法的错误定位精度,对不同类型的错误的定位精度,以及逻辑表达式级别插桩对错误定位精度的改进。结果表明,本文方法的错误定位精度较高,对冗余代码、缺失代码和变量替换错误,以及会直接改变执行路径的错误的定位精度明显更高一些,而且逻辑表达式级别插桩能够在一定程度上提升多种错误定位方法的错误定位精度。