论文部分内容阅读
缺陷定位作为软件调试过程中的关键活动,对于提升软件调试效率以及软件质量有着重要意义。学术界和工业界多年来一直致力于研究出高效缺陷定位技术,取得了不少进展。由于软件缺陷作用机理的复杂性,目前缺陷定位仍然面临很大挑战,定位精度有待进一步提升。本文从测试用例生成、测试用例集有效性、强语义关联性模型、无测试预言场景、信息类型有效性五个方面系统地研究基于关联性分析的缺陷定位技术。基于上述研究,提出了一系列提升缺陷定位能力的优化技术,以大规模实验和科学度量方法验证了本文所研究技术的有效性。论文的主要研究工作及创新点如下所示:1)基于反馈的测试用例生成,为解决缺陷定位缺乏动态调整问题提供新思路现有缺陷定位技术忽视了缺陷定位是一个不断动态调整的过程,缺乏以不断推理来实现精度动态调整,在缺陷定位精度上已接近饱和,须结合动态推理过程实现精度的上限突破。本文提出基于反馈的测试用例生成方法,通过提炼调试人员在调试过程中所使用的知识和经验,并抽象成反馈机制;然后采用测试用例生成技术,产生满足反馈机制的新测试用例,即生成能反映知识和经验的新测试用例;最后将新测试用例反馈到原有测试用例集中,通过新测试用例来模拟调试人员推理过程,不断迭代这个过程直至满足精度收敛条件,实现缺陷定位精度的动态提升。实验表明,该方法所产生的新测试用例能有效改进原有测试用例集的质量,提升缺陷定位有效性。2)基于随机抽样的测试用例集有效性分析,为面向缺陷定位的测试用例集优化研究提供崭新的思路测试用例集的运行信息是分析和推导缺陷位置的关键。测试用例集对缺陷定位的有效性分析,能帮助了解测试用例集在缺陷定位过程中的作用机理,对面向缺陷定位的测试用例集设计、生成和约简具有重要的指导意义。本文以原有测试用例集为总体,采用随机抽样的方法,生成大量的随机样本,研究随机样本和总体之间的关系。理论分析和实验数据表明,测试用例集体积与缺陷定位有效性没有明显的关联性,明确了有效性失败测试用例集与未执行缺陷语句的成功测试用例集对缺陷定位有效性有正效应,而执行缺陷语句的成功测试用例集对缺陷定位有效性有负效应。基于缺陷语句在失败测试用例集已获得最大优势的分析,进一步发现成功测试用例所包含的非确定性信息是导致缺陷定位有效性扰动的原因。基于此,本文提出新的度量标准,即成功用例识别度(Passing Tests Discrimination,PTD)来衡量一个测试用例集对缺陷定位有效性的影响。为了展示这些研究成果的应用前景,本文基于ptd提出了一个测试用例集优化方法。实验表明,该优化方法能有效地提升测试用例集质量,改进缺陷定位有效性。3)基于强语义关联性的缺陷定位技术,突破弱关联性度量的精度瓶颈大多数缺陷定位方法通常基于语法单位(如函数、语句等粒度)相互独立的基本假设,定位方法不考虑语法单位之间的程序逻辑和语义关联性,须融入了语义关联性来突破语义独立所带来的精度瓶颈。本文基于逆向切片(backwardslice)定义了融合语义的关联性表达信息模型,能剥离出与测试输出结果(成功或者失败)关联的语义场景,即将语句执行是否影响测试输出结果进行关联,并将模型应用到当前先进的统计方法体系,即基于频谱的缺陷定位技术sfl(spectrum-basedfaultlocalization,sfl)的统计方法体系。实验表明,基于强语义关联性的缺陷定位技术能显著提升缺陷定位的有效性。4)基于无测试预言的缺陷定位技术,构建了缺陷定位应对“预言家难题”的新方法体系一般情况下,缺陷定位技术的应用前提必须存在测试预言,否则缺陷定位技术会无法使用。然而,在现实很多情况下,测试预言不存在或者很难定义,这就是著名的“预言家难题”(oracleproblem)。针对存在的“预言家难题”,本文应用蜕变测试(metamorphictesting)将测试输出结果(失败或者成功)重新定义为蜕变测试组输出结果(违反或者未违反),从而实现在无测试预言情境下应用缺陷定位技术。该技术应用到本文之前提出的基于强语义关联性的缺陷定位技术上,实验表明,在无测试预言的情境下,缺陷定位有效性与在有测试预言情境下的有效性相当。本文进一步研究了逆向切片与执行切片(executionslice)在定位有效性上的关系。实验表明,在有测试预言和无测试预言两种情况下,逆向切片比执行切片具有更强的缺陷定位能力,并且在现有统计方法体系中,公式gp19和er1’相比于其它公式,更有可能达到最优结果。5)面向缺陷定位的信息类型有效性分析,发现执行次数对缺陷定位的负效应现象,为信息类型选取与设计提供新指导测试用例集的运行信息需要采用具体信息类型来表达,不同信息类型表达能力各有不同,对缺陷定位的有效性会产生不同影响,有必要研究现有主流信息类型对缺陷定位有效性的影响,以此指导适用于缺陷定位的信息类型的选取和设计。本文选取二进制执行bc(binaryinformationofexecutioncount,bc)、执行次数fc(frequencyexecutioncount,fc)、逆向切片bs(backwardslice,bs)、执行次数与逆向切片混合体fc&bs四种用于缺陷定位的信息类型,系统研究了它们在当前被广泛应用的缺陷定位技术sfl体系下的有效性。研究表明执行次数fc存在很大风险损害缺陷定位的有效性,依赖信息(如:逆向切片BS)比代码覆盖(如:二进制执行BC和执行次数FC)具备更强缺陷定位能力,建议以程序依赖为基础构建新信息类型来进一步改进缺陷定位有效性。