基于频繁子图挖掘的错误定位方法
【技术领域】
[0001] 本发明属于计算机技术领域,涉及软件测试技术,其是软件测试中自动化测试技 术领域,为一种基于频繁子图挖掘的错误定位方法。
【背景技术】
[0002] 自动化错误定位技术主要基于对程序源文件、覆盖信息、执行序列信息、测试结果 进行分析,它能够有效辅助开发人员快速定位程序出错位置,提高调试效率。
[0003] 自动化错误定位技术经过多年在学术界的发展,已经出现了多种不同类别的错误 定位技术。该方法主要涉及基于程序动态执行的错误定位技术,该种类型的定位技术主要 结合程序执行信息、测试用例执行信息已经以及一部分源程序分析结果,给出程序中可能 出错的位置的排序。传统的自动化错误定位技术使用统计方法计算单个程序实体(语句、 分支、语句块、方法等)为程序错误的可疑度,进而按照程序实体可疑度由高到低的顺序排 序,提供给开发人员或者测试人员作为排查程序错误的优先顺序。
[0004] 传统的自动化错误定位技术中最主要的一类技术被称为基于程序频谱的错误定 位技术。频谱信息,当被插粧的程序执行包含成功测试用例和失败测试用例的用例池时,每 个程序实体分别被成功(或失败)测试用例执行到(或未执行到)的次数。以频谱信息为 基础,一系列的排序度量被提出用以计算每个程序实体的可疑度,进而排序筛选出可疑度 较高的程序实体。一般来说,一个程序实体被失败的测试用例执行的次数越多,被成功的测 试用例执行的次数越少,此程序实体为程序失败的可能性越高。
[0005] 图挖掘程序错误定位方法结合机器学习领域已有技术,将最新的机器学习方法应 用于错误定位领域,将程序的所有实体共同作为一个整体,通过图挖掘方法获取失败用例 执行中的特征模式,进而实现更加准确且包含运行时上下文的自动化错误定位结果。
【发明内容】
[0006] 本发明要解决的问题是:在现有自动化错误定位技术上,结合图挖掘程序错误定 位方法,提出一种以频繁子图挖掘方法为基础框架的区分性子图挖掘方法,以更准确得定 位程序中的错误。
[0007] 本发明的技术方案为:基于频繁子图挖掘的错误定位方法,将程序的所有实体共 同作为一个整体,通过图挖掘方法获取失败测试用例执行中的特征模式,进而实现更加准 确且包含运行时上下文的自动化错误定位结果,包括以下步骤:
[0008] 1)对程序执行频谱进行建模,基于测试用例对程序实体的执行顺序,构建出各测 试用例的执行序列图,得到执行序列图集合;
[0009] 2)根据执行序列图中每个边在所有测试用例的执行序列图中的比例,对执行序列 图进行剪枝,移除可疑度较小的边,以提升后续挖掘算法的效率和精度;对剪枝后得到的测 试用例的执行序列图集合,使用区分性子图挖掘方法,首先通过频繁子图挖掘算法从失败 的测试用例的执行序列图中挖掘出频繁子图,再通过频繁子图的熵值从中确定出对成功和 失败的测试用例执行序列图最有区分性的子图,也即最有可能导致程序行为失败的执行模 式,由此定位程序中最可能导致测试用例失败的位置。
[0010] 步骤1)对程序执行频谱的建模为:首先对程序插粧,记录程序运行时程序实体的 执行顺序信息,执行测试用例池中的成功/失败的测试用例,基于测试用例执行时的程序 实体的顺序,构建出成功/失败测试用例的执行序列图集合;最后采用最小深度优先算法 来唯一标示一个执行序列图,完成程序执行频谱建模,为下一步处理做准备。
[0011] 步骤2)所述区分性子图挖掘方法为:对于一个包含了执行成功和执行失败的 测试用例的测试用例池,测试用例池的熵值He取决于池中成功的测试用例所占的比例 pSuccess以及失败测试用例所占比例pFail,如公式(1)所示:
[0012] He = _pSuccess*log (pSuccess)_pFail*log (pFail) (1)
[0013] 设子图g为所有失败的测试用例执行序列图中挖掘出的频繁子图之一,首先依据 测试用例是否包含子图g将所有执行序列图分为两类:包含子图g的执行序列图的集合 S1,以及不包含子图g的执行序列图的集合S2 ;然后依据公式(1),根据S1和S2中包含的 成功/失败测试用例的比例分别计算出S1和S2的熵值Hgl和Hg2,再根据S1的元素个数 占所有测试用例池规模的比例pSl、S2的元素个数占所有用例池规模比例pS2加权,求出依 据子图g划分下的测试用例池的的熵值Hg,如公式(2):
[0014] Hg = pSl*Hgl+pS2*Hg2 (2)
[0015] 子图g在所有测试用例执行序列图上的划分的信息增益IG如下所示:
[0016] IG = He-Hg
[0017]区分性越强的频繁子图具有越高的信息增益,信息增益越高的子图在程序中的错 误执行模式的可疑度越高,在枚举频繁子图的过程中计算信息增益并排列可疑度最高的K 个频繁子图,提供给软件开发者和测试者错误定位使用。
[0018] 本发明方法是一种区分性子图挖掘方法,以频繁子图挖掘为基础框架,基于信息 增益方法计算子图的可疑度,通过优化的频繁子图挖掘方法获取失败用例和成功用例执行 中的特征模式,进而实现更加准确且包含运行时上下文的自动化错误定位结果。
[0019] 本发明的有益效果是:改进原频繁子图挖掘算法,原频繁子图挖掘方法定位错误 比较粗糙,仅能输出可疑的程序实体,不能对其进行排序,本发明改进后的区分性子图挖掘 方法可以获得子图可疑度的排序,进而提供给测试人员可疑度最高的K个子图,从而提高 了开发人员定位错误的准确性和效率。
【附图说明】
[0020] 图1为本发明的执行流程图。
[0021] 图2为本发明实施实例的每个测试用例执行的执行序列图,(a) (b)为成功的测试 用例,(c) (d)为失败的测试用例。
[0022] 图3为对应图2的剪枝之后的执行序列图,(a) (b)为成功的测试用例,(c)⑷为 失败的测试用例。
[0023] 图4为本发明实施例中,A程序的F-Measure。
[0024] 图5为本发明实施例中,B程序的F-Measure。
[0025] 图6为本发明实施例中,C程序的F-Measure。
【具体实施方式】
[0026] 本发明对成功及失败的测试用例执行序列图集合进行图挖掘,以找到最能区分成 功失败测试用例的子图,进而定位错误。
[0027] 本发明方法以频繁子图挖掘算法为框架,先实现频繁子图挖掘算法,再在其上进 行优化,通过在频繁子图挖掘算法基础上加入对成功执行测试用例的分析,比较成功失败 测试用例执行图集合,找出最有可能有错误的子图。本发明方法的具体执行流程图见图1。 图1中oracle类似程序断言,可以标识程序的是pass还是fail。
[0028] 基于一个测试用例的程序实体的执行顺序,可以构建出测试用例执行的程序实体 的执行序列图,本发明由此得到各测试用例的执行序列图,也即图1中的调用序列图。具体 为:首先对程序插粧,记录程序运行时程序实体的执行顺序信息,执行测试用例池中的成功 /失败的测试用例,基于测试用例执行时的程序实体的顺序,构建出成功/失败测试用例的 执行序列图集合;最后采用最小深度优先算法来唯一标示一个执行序列图,完成程序执行 频谱建模,为下一步处理做准备。