论文部分内容阅读
缺陷定位是软件调试过程中花费代价最大的工作之一。为了辅助程序员更好地在大型软件中找到含有缺陷的语句,减少缺陷定位所需要的时间和耗费,研究者提出了许多自动化缺陷定位方法。这些方法可以有效的提高缺陷定位的效率,但仍然存在诸多不足。其一,单一的缺陷定位方法往往基于特定的程序状态信息,因而也只能处理相对应的程序错误类型。因此在实际调试过程中很难确定使用哪种缺陷定位方法。其二,目前大多数缺陷定位方法均基于单一类型的程序节点(如语句、谓词等),所得到的多种程序信息并没有被充分利用,这使得缺陷定位的精度受到了一定的限制。为了充分利用多种程序信息,本文提出了一种结合多种基于频谱信息的缺陷定位算法的集成框架。该框架主要是借鉴机器学习领域中的集成学习的思想,对多种基于频谱信息的缺陷定位方法进行了比较深入的研究和分析。这个集成框架主要包括程序信息的收集和模型集成算法的实现。本文实现了基于LLVM编译器的插桩工具对程序信息进行收集。本文对LLVM编译器的框架和Pass插件子系统进行了介绍,并根据程序的特点提出了对程序的语句覆盖信息和谓词信息进行收集的方法,并在LLVM编译器的环境下进实现了对程序的语句覆盖信息和谓词信息收集的插桩工具。本文使用这两个插桩工具收集Siemens程序集的语句覆盖信息和谓词信息。此外,本文实现了基于语句覆盖信息缺陷定位模型和基于程序谓词信息缺陷定位模型结合的方法。由于基于语句覆盖信息和程序谓词信息的两种缺陷定位模型存在一定的差异,本文选取了Tarantula方法和SOBER方法进行结合。由此,本文设计了3种模型结合算法:简单组合算法、Max-mix Rank算法和Mid-mix Rank算法。在利用Siemens程序集所得的实验结果表明,与基于单一频谱信息的缺陷定位模型相比,简单组合算法和Max-mix Rank算法具有更高的缺陷定位效率,并且具有更强的泛化能力。