论文部分内容阅读
当今社会,计算机软件与人们的生活息息相关,人们对软件质量的要求也越来越高。软件在运行时发生失效,如何实现快速、高效的、准确的软件故障定位仍是学术界和工业界研究的关键问题。基于语句程序频谱的软件故障定位方法通常利用搜集程序在运行测试用例集合产生的语句覆盖信息来计算程序中每条语句发生故障的可疑值,按照语句的可疑值从大到小依次检查,直到精确定位至所有故障语句为止。但这种故障定位方法由于“计算整个程序中所有语句的发生故障的可疑值,缺乏一定的语句筛选机制”和“忽略了程序中语句之间的存在的依赖关系”的原因导致故障定位效率和精度受限。为了解决上述问题,本文提出了一种基于多层次频谱的软件故障定位方法。这种方法的具体做法是将软件故障定位分为函数故障定位和语句故障定位两个层次,函数故障定位方法能生成函数故障报告,语句故障定位方法生成语句故障报告,依次检查可疑语句直至找到故障语句,进而实现故障定位。主要的工作有:1)在函数故障定位层次上首先使用“函数调用对”程序频谱集合来构造函数调用对成功行为图和失效行为图,然后对两个图的进行差异分析,计算函数发生故障的可疑值,最后依照可疑值从大到小依次排列程序中的函数,主动筛选“最有可能”发生故障的函数,生成函数故障定位报告。2)在语句故障定位层次上选择函数故障报告中可疑值高的函数,计算其函数体内的语句发生故障的可疑值。在此层次上考虑语句之间存在的数据依赖和控制依赖关系,通过语句的数据依赖发生故障的可疑值和语句的控制依赖发生故障的可疑值加权差值计算的方式来计算语句发生故障的可疑值,依照此可疑值从到大到小依次排列函数中的语句,生成语句故障报告,依次检查该故障报告中的语句直至找到所有故障语句为止,完成软件故障定位。3)设计了完整的实验实例和相应的测试用例,在此基础上对本文提出的方法进行验证。实验表明,本文提出的方法能缩小代码审查区域,相比于Tarantula方法和Ochiai方法,其定位效率更高。