论文部分内容阅读
软件调试包括错误定位和修复,错误定位是首要环节,也是最费时费力的工作。因此,为了提高错误定位的效率,各种自动化技术应运而生。其中,基于频谱的错误定位技术(SFL)由于其不依赖系统模型且易于实现的特点,成为了目前比较行之有效的方法之一。SFL主要依赖程序的执行频谱数据,通过构造可疑度计算公式来评估程序元素的可疑度,最终根据可疑度大小按序排查程序错误。因此,可疑度评估的精确程度成为了 SFL方法是否有效的关键。然而,学者们已经证明通过构造新可疑度计算公式的方式已经很难进一步提升错定位的精度。因此,本文另辟蹊径,在探索程序元素颗粒度对错误定位精度影响的基础上,提出了一种基于动态程序失效执行块(DFEB)的错误定位新方法。然后,针对当前可疑度计算公式不能有效适用于不同程序和不同错误测试场景的问题,基于DFEB技术,设计了一种能够动态适应测试场景的错误定位新方法。最后,通过SIR程序测试基准库的实验验证了所提出方法的有效性。本文的主要工作和创新成果可以归纳如下:(1)提出了动态程序失效执行块的错误定位方法。从失败测试用例中获取所有DFEB,借助可疑度计算公式获取每个DFEB和每条语句的可疑度值,生成错误定位报告。以Siemens套件,Space程序以及3个Unix程序为基准,针对8种经典错误定位方法进行了对比实验。实证结果表明,该方法总体上具有较好的错误定位效果。(2)提出了基于动态预测模型的错误定位方法。基于动态程序失效执行块,在传统SFL方法4个因子的基础上,引入了 DFEB长度这一新特征,并对这5个特征进行特征衍生和特征筛选,用逻辑回归和随机森林的方法在Siemens单错误程序上进行训练,用Siemens多错误版本进行测试验证。实验结果表明该方法相比于其它8种经典错误定位方法,用随机森林训练得到的模型具有更好的错误定位效果。(3)设计并开发了自动化错误定位软件系统。该系统基于Python语言和Shell脚本,实现了本文所提出的算法,支持从频谱数据输入到错误报告输出的的全过程,有效的提高了测试实验执行的效率。