论文部分内容阅读
伴随着不断增长的软件复杂性及其普适性,程序员需要开发出高质量的软件产品。然而,软件开发人员在软件开发过程中不可避免地引入软件错误(Fault/Bug),从而可能导致软件在运行过程中产生失效(Failure)。定位与修复这些软件错误对于提高软件质量至关重要。在传统的手工软件错误定位过程中,软件开发人员需要充分理解程序的功能、语义、结构、实现以及相关失效的表征,定位效果大多依据开发人员的经验、直觉与运气。因此,受诸多因素影响,手工的软件错误定位困难、耗时,且代价昂贵。轻量级软件错误定位方法是一种自动化软件错误定位方法,主要是指利用软件测试过程中收集的程序实体覆盖信息以及测试结果实施错误定位的一类方法。该类方法通常不需要收集复杂程序语义信息,其定位代价小、扩展性好,是学术界研究的热点。然而,该类方法的定位准确性与结果的可理解性是影响该类方法现实可用的关键。本文主要围绕轻量级软件错误定位中的定位准确性和可理解性等问题,采用轻量级的方法予以解决。结合轻量级故障上下文信息,如故障触发上下文、程序频谱中故障执行上下文以进一步提高轻量级软件错误定位结果的准确性;通过构建两阶段错误定位,以及反映故障传播上下文的加权故障传播图以支持故障理解的错误定位。主要工作包含以下几个方面:(1)针对程序频谱中可能存在不同的故障触发模式,提出一种基于故障触发模式的软件错误定位方法以提高错误程序实体的绝对排名。考虑软件运行的复杂性及错误的多样性,故障触发模式复杂且难以精确定义。该方法从软件失效的必要条件入手,给出两种基于程序频谱的故障触发模式(RIPR-a和RIPR-b)。针对该两种故障触发模式,提出不同的软件错误定位策略实施错误定位。其基本想法是当确定了特定错误程序在运行过程中所属的故障触发模式后,能排除一些不是由该故障触发模式触发且排名较高的程序实体,从而提高错误程序实体的绝对排名。在三种不同的应用场景下,验证了该方法的有效性。(2)针对轻量级软件错误定位方法仅考虑程序实体的覆盖信息与软件失效之间的相关关系,未能充分考虑程序失败运行的上下文信息,提出一种结合程序频谱故障执行上下文的轻量级错误定位方法。该方法基于程序实体的可疑度及其程序频谱故障执行上下文的可疑度进行软件错误定位。在该方法中,给出了程序频谱故障执行上下文的轻量级定义,以及结合程序实体可疑度及其故障执行上下文可疑度进行可疑错误程序实体排名列表的重排方法。实证研究结果表明,该方法能进一步提高错误程序实体的绝对排名。(3)为了提高轻量级软件错误定位的现实可用性,提出一种基于加权故障传播图的错误定位方法。在该错误定位中,首先实施模块级的错误定位,然后对每一个需要进一步验证的可疑模块构建一个加权故障传播图来实施细粒度的错误定位。考虑到故障的传播性,以及程序流图在程序理解中的重要作用,该方法首先构建程序流图,然后基于软件失败执行过程中收集的覆盖信息计算节点与边的可疑度,进一步利用边的可疑度对节点的权重进行调整,最后得到每一个节点的加权信息。实证和案例研究结果表明,该方法能进一步提高轻量级软件错误定位方法的可用性。