论文部分内容阅读
软件系统规模的不断扩大和复杂度的日益增加,对软件调试技术提出了新的挑战。软件错误定位是调试技术的重要步骤。然而,手工实现错误定位存在效率低下的问题,因此自动化软件错误定位成为了学术界和工业界共同追求的目标。基于程序频谱的软件错误定位方法(Spectrum-Based Fault Localization,SFL)和基于程序不变量的软件错误定位方法(Invariant-Based Fault Localization,IFL)是两类具有代表性的方法。定位效率和精确性是评判方法优劣的重要指标。可疑度计算是SFL的关键,然而通过提出新可疑度计算公式的方式已经很难提高其定位效率。IFL则利用不变量的冲突信息来揭示错误位置,但是偶然性正确测试例的普遍存在严重制约了其提示错误位置的精度。执行切片是测试例覆盖程序代码的集合,根据测试例执行的结果可以分为失效执行切片和成功执行切片。当前的错误定位方法没有充分挖掘执行切片所具有的错误揭示能力。基于此,本文深入的研究了执行切片的错误定位效用,并定义了执行切片效用度量函数f。然后,基于对失效执行切片的效用度量,提出了一种基于失效执行切片的软件错误定位方法(Failed Execution Slice,FES),进一步提升SFL的错误定位效率。基于成功执行切片效用度量,提出了一种利于高精度程序不变量生成的测试例生成方法(Successful Execution Slice,SES)。最后,在实现上述算法的基础上,研发了错误定位实验原型系统,并实验验证了所提出方法的可行性和有效性。本文的主要工作可以归纳如下:(1)提出了效用度量函数f和基于失效执行切片的软件错误定位方法。选取了12个典型的可疑度计算公式,在包括Siemens、Space等11个测试套件上进行错误定位效率实验。实验结果表明相对于SFL,新方法在错误定位效率上能够平均提高30%。设计相关性实验,实验结果验证了效用度量函数的有效性。(2)提出了基于成功执行切片的测试例生成方法。在114个错误程序版本上进行实验。实验结果表明新方法能够大幅度降低似然程序不变量判定的假阴性,从而提高了程序不变量揭示错误的能力。(3)设计并实现了自动化错误定位实验原型系统。按照模块化设计思想,将系统分为配置模块、公共函数模块、功能实现模块和说明文档模块4个部分。实现从输入测试例到输出指定方法错误定位效率整个过程的自动化运行。