论文部分内容阅读
软件调试是软件开发过程中最耗时和最昂贵的过程之一。随着信息技术的发展,软件系统变得越来越复杂,规模越来越大,软件调试也变得更加困难和耗时。软件调试包括错误的定位、理解和修正,错误定位是其中的一个核心过程,也是最困难和耗时的过程。使用自动化错误定位技术能够有效提高软件调试的效率,大大降低软件调试的耗费。基于覆盖分析的错误定位技术计算复杂度低,可自动化程度高,是目前研究得最为广泛和深入的方法之一基于覆盖分析的错误定位方法首先搜集程序频谱信息和测试用例执行结果向量;然后,设计度量公式对每个程序实体的可疑度进行风险评估:最后,按照可疑度值从高到低对程序实体进行排序。程序频谱信息、度量公式和测试执行结果向量是影响基于覆盖分析的错误定位技术的三个关键因素。本文针对这三个关键因素进行深入研究和分析,主要工作和贡献如下:针对程序频谱信息对错误定位效果提升的局限性问题,论文提出将类可疑度信息和程序频谱信息相结合的错误定位方法,进而提高现有基于覆盖分析的错误定位技术的定位效果。程序频谱信息只包含测试用例是否覆盖程序实体的二元信息,无法区分具有相同覆盖信息的语句,对错误定位技术效果的提升具有局限性。因此,该方法利用类的可疑度信息区分不同类中具有相同覆盖信息的语句。为了提取类的可疑度信息,论文利用每个对象的方法调用执行序列信息描述类的封装特性,量化每个类的可疑度信息;进一步,设计类的可疑度信息与程序频谱信息的结合算法,从而有效地提高错误定位效率。该方法首次提出考虑面向对象语言中类的封装特性对错误定位效果的影响。实证分析表明相对于现有的基于覆盖分析的错误定位方法,该方法能够大幅提高其错误定位效率。针对错误定位排序中缺失上下文信息的问题,论文提出结合函数调用路径上下文信息的错误定位方法,提供有效的上下文信息并提高错误定位效率。该方法首先构建具有权重的函数调用图;然后,设计基于具有权重的函数调用图的启发式搜索算法;最后,利用该算法遍历函数调用路径搜索错误语句。该方法利用函数调用路径信息将可疑语句排序中独立的不相关的语句关联起来,并提供失效执行相关的函数调用路径上下文信息,有助于开发人员在定位错误的过程中理解错误;同时,该方法能够有效地减少代码审查量。通过实证分析,论文得出该方法能够有效地提高基于覆盖分析的错误定位方法的效率。针对不同度量公式具有不同错误定位效果这一问题,论文研究不同度量公式在结合切片击中集信息和频谱信息错误定位方法中的定位效果。论文首先对结合切片击中集信息和程序频谱信息的错误定位方法进行修正和改进;接着,扩展基于集合理论的分析框架;然后,通过理论分析可以证明在单错情况下改进的方法比原有的方法以及频谱错误定位方法的定位效果要好。在改进的方法中,选取不同的度量公式,其错误定位效果可能会不同。论文从理论角度考察不同度量公式在改进方法中的定位效果,并证明在改进方法中局部最优的度量公式集合。通过理论分析,论文得出与改进方法等价的度量公式转换过程。该分析工作首次给出结合切片信息和程序频谱信息错误定位方法的理论结果。针对基于覆盖的失效邻接矩阵的测试预言问题,论文提出将蜕变测试技术应用到该领域的方法,获取缺少测试预言的基于覆盖的失效邻接矩阵。当程序包含多个错误时,首先需要获得失效邻接矩阵,基于失效邻接矩阵对失败测试用例进行聚类;最后,基于每个聚类的失败测试用例和配套的成功测试用例进行错误定位。基于覆盖的失效邻接矩阵包含两部分:提取失败测试用例签名的指纹函数和失败测试用例之间的距离公式。失效邻接矩阵是对多个错误进行错误定位的前提。当测试预言不存在时,论文利用蜕变测试技术获取基于覆盖的失效邻接矩阵,主要包括如下三个步骤:利用失效蜕变测试组代替程序失效执行;利用蜕变切片作为失败测试用例的签名;利用失效蜕变测试组的距离代替失败测试用例的距离。实证分析表明蜕变测试技术能够有效地缓解该领域的测试预言问题。