论文部分内容阅读
随着计算机技术的发展和软件应用领域的扩大,软件系统的规模和复杂性不断攀升,由于软件故障直接导致系统失效的比率持续增加,其可靠性越来越难以保证。当软件失效发生后,如何自动调试和定位引发失效的软件故障是一个非常有价值的研究课题。基于程序频谱的故障定位技术分析程序成功运行和失败运行的动态执行特征,将这些特征统称为程序频谱,计算出每个程序实体可能出错的概率。这种轻量级的故障定位技术仅仅需要程序动态运行信息,由于其计算复杂度低,无需建模代价而得到广泛研究和应用。本文在分析各种常见程序频谱的基础上,提出了一种新的程序频谱——动态方法调用图,它能够表达程序的语义信息——程序执行时方法之间的调用关系。由于传统收集程序频谱的插桩方式引入过多额外的执行开销,本文介绍一种新的收集程序频谱的方式,那就是采用面向方面编程技术收集程序频谱。通过在被测程序中增加一个新的模块——方面监视程序执行。由于方面可以跟踪程序执行时方法调用栈的转换,收集的程序频谱可以记录程序执行时方法之间的调用关系。在所收集的程序频谱的基础上,提出一种基于程序语义的故障定位技术。定义了一种新的程序模型——程序动态行为图。在行为图中,边权值表示方法调用边的调用频率,成功行为图和失败行为图的差异指出了程序中可疑的故障点。由于成功测试用例的和失败测试用例数量差异很大,比较边调用频率这个绝对数值是不合理的。本文认为如果一条边在成功行为图和失败行为图中的调用概率差越大,它出错的概率就越大。通过计算每条边在成功行为图和失败行为图中的调用概率差,得到边的故障可疑值,最后按照故障可疑值排列方法调用边,得到故障报告。最后设计和实现了基于程序语义的故障定位原型系统,初步的实验结果表明,相比传统的插桩技术,采用面向方面编程技术收集程序频谱能减少数十倍以上的执行开销。通过大量实验验证,基于程序语义的故障定位技术能够提高错误定位的效率,减轻程序员的调试负担。