1.本发明属于软件缺陷定位领域,涉及一种基于频谱技术和断言切换技术的软件缺陷定位方法。
背景技术:
2.在软件开发和维护的过程中,软件调试在一个项目中通常要占据很大的资源。软件调试便是为了找到代码中的错误,对于软件开发和维护来说寻找需要修复的代码片段是一个不可避免的过程,而使用缺陷定位技术不仅可以提高寻找缺陷的效率也可以提高缺陷修复的准确性。
3.近几十年来,为了提高调试工程的效率和产率有提出了许多缺陷定位技术。频谱技术通过收集测试用例执行的覆盖信息计算程序实体的怀疑度分数来探索程序实体和失败用例之间的关系,最后得到程序实体怀疑度排名来进行定位。但该技术过于依赖覆盖信息,无法识别哪些实体真正地影响了程序输出,所以一些高排名的实体可能是与缺陷无关的。程序切片追踪代码中的语句使用数据和控制依赖关系找到一个程序切片,该切片的执行会影响程序输出或者是给定的兴趣点,其中动态切片技术由于耗时少且准确度较高等优点占有重要地位。通过切片便可以识别出那些高排名实体中真正影响程序输出的实体,以进一步排除无关的可疑实体。所以,使用动态切片技术和频谱技术结合便成了一个重要的发展方向,虽然这两者的结合有效地解决了频谱技术存在的问题,但对于现实中大型项目中的遗漏型缺陷定位仍然是难点,该组合技术的准确率和效率是有待提高的。
技术实现要素:
4.本发明针对现有技术的不足,提出了基于频谱技术和断言切换技术的软件缺陷定位方法以进一步提高动态切片和频谱组合技术的效率和准确率,为缺陷定位提供依据。
5.基于频谱技术和断言切换技术的软件缺陷定位方法,具体包括以下步骤:
6.步骤1:基于断言切换技术的切片获取;
7.1-1.统计失败测试用例
8.在提供的测试用例中,将所有的失败测试用例统计并筛选出来;
9.1-2.寻找关键断言
10.对于一个程序中的断言来说,如果一个断言的结果变化导致了整个程序的输出转变为期待的输出,那么这个断言就是这个程序的关键断言。而断言切换技术就是通过动态切换断言的结果来寻找关键断言,该技术首先追踪失败测试的执行找到所有的分支断言,接着依次强制切换一个断言的结果并重新执行该测试用例,如果程序执行的输出结果是所期待的结果,那么则该断言则被判定为关键断言;
11.对要进行的切换断言缩小,使用多断言同时切换策略进行切换以便找到更多的关键断言;
12.其中断言缩小,具体为:首先通过追溯该程序的执行过程记录下所有的断言,接着
计算所有断言控制的语句,判断控制的语句中是否存在执行过的语句,如果存在则去除该断言,该断言不再进行切换;
13.其中多断言同时切换策略,具体为:在找出所有需要切换的断言后进行排序,依据断言与输出错误的距离远近排名,距离越近的断言排名越高,得出所有的排名后进行切换,对整个排名列表从高到低分别进行单断言切换、双断言切换、三断言切换,其中双断言切换固定排名第一的断言,三断言切换需要固定排名一、二的断言;
14.1-3.获取切片
15.判断该程序是否有关键断言,对之前筛选出的失败测试用例进行切片,如果有则将所有的关键断言在切片过程中放进切片,否则直接进行切片;
16.1-4.融合切片
17.在得到所有程序的失败测试用例的切片后进行进一步处理,对程序具有多个失败测试用例也就有多个切片,则需要对这些切片进行取并集处理,而只有单独切片不需要进行处理。
18.步骤2:基于频谱技术获取可疑列表;
19.2-1.获取频谱信息
20.2-1-1.首先要保证程序至少要有一个失败测试用例;
21.2-1-2.接着执行程序的所有测试用例并记录执行过程收集相应的数据,收集的数据包括:测试用例、执行的语句、执行的结果,这些数据就是覆盖信息和输出信息;
22.2-1-3.通过解释器形成一个频谱矩阵:行对应每个测试用例,列对应每条语句,并利用单独列向量表示执行结果信息;
23.2-2.计算中间变量
24.2-2-1.将上一步收集到的频谱信息输入到分析器中,进行四个中间变量的计算,公式如下:
25.a
pq
(j)=|{i|x
ij
=pλei=q}|
26.a
00
(j)表示语句j不在成功的测试用例中的个数,a
01
(j)表示语句j在不在失败的测试用例中的个,a
10
(j)表示语句j在成功的测试用例中的个数,a
11
(j)表示语句j在失败的测试用例中的个数,x
ij
为语句j在测试用例i的覆盖结果,ei为测试用例i的执行结果;
27.2-3.可疑列表获取
28.2-3-1.计算得出每条语句的中间变量后便利用公式计算出该条语句的怀疑度,这里使用的是公式:
[0029][0030]
得到每条语句的怀疑度后便以怀疑度进行排名得到可疑语句列表。
[0031]
步骤3:组合计算新可疑列表;
[0032]
3-1.确认语句
[0033]
3-1-1.根据怀疑列表中的语句依次确认其是否在该程序的切片中,如果在则该语句的切片分数为1,否则为0;
[0034]
3-2.重新计算怀疑度
[0035]
3-2-1.根据语句的怀疑度分数以及得到的切片分数重新计算怀疑度,公式如下:
[0036]
newsocre=α*oriscore+β*sliscore
[0037]
其中,oriscore即ochiai分数,sliscore即切片分数,α和β均为系数,α+β=1;
[0038]
获得了重新计算怀疑度的可疑列表;
[0039]
3-2-1.基于重新计算怀疑度的可疑列表进一步地定位缺陷。
[0040]
作为优选,所述的参数α和β均取0.5,以保持ochiai分数和sliscore具有相同的优先级,即为了切片和原可疑列表所占的比重一样,不至于其中一方过重,以致切片或者频谱技术得出的可疑语句占过高的排名。
[0041]
作为优选,所述的进一步地定位缺陷,具体为:首先检查前5的可疑语句,再检查前10的可疑语句,最后依次检查剩下的语句。
[0042]
本发明相对于现有技术具有的效果:进一步提高了可疑列表中高排名语句的准确度,以此可以更快更精确地进行缺陷定位。
附图说明
[0043]
图1是本发明的整理流程图;
[0044]
图2是断言缩小算法的流程图;
[0045]
图3是多断言切换策略说明图。
具体实施方式
[0046]
如图1所示,本发明主要包含三个部分:基于断言切换技术的切片获取、基于频谱技术的可疑列表获取、组合计算新可疑列表。
[0047]
步骤1:基于断言切换技术的切片获取;
[0048]
基于断言切换技术的切片获取包含四个步骤:失败测试统计、关键断言寻找、切片获取、切片融合;
[0049]
步骤1-1:失败测试用例统计
[0050]
在提供的测试用例中,有成功的测试用例也有失败的测试用例,而有的错误程序的失败测试用例不止一个,所以要将所有的失败测试用例统计并筛选出来以便进行后续的步骤;
[0051]
步骤1-2:寻找关键断言
[0052]
断言切换技术就是通过动态切换断言的结果来寻找关键断言,本发明采用的断言切换技术首先需要对要进行切换的断言进行缩小,再使用多断言同时切换策略进行切换以便找到更多的关键断言;
[0053]
步骤1-2-1:缩小断言
[0054]
如图2所示,首先通过追溯该程序的执行过程记录下所有的断言,接着计算所有断言控制的语句,然后判断控制的语句中是否存在执行过的语句,如果存在则去除该断言,该断言不再进行切换;
[0055]
步骤1-2-2:多断言切换
[0056]
在找出所有需要切换的断言后进行排序,依据断言与输出错误的距离远近排名,距离越近的断言排名越高,得出所有的排名后进行切换,如图3所示,对整个排名列表从高到低分别进行单断言切换、双断言切换、三断言切换,而双断言切换和三断言切换需要分别固定排名第一的断言和排名一、二的断言;
[0057]
步骤1-3:获取切片
[0058]
在寻找到所有的关键断言之后,进行切片的获取。对之前筛选出的失败测试用例的执行过程进行切片。切片之前需要判断该程序是否有关键断言,如果有则将所有的关键断言在切片过程中放进未形成的切片,否则直接进行切片;
[0059]
步骤1-4:融合切片
[0060]
在得到所有程序的失败测试切片后进行进一步的处理,若程序具有多个失败测试也就有多个切片,则需要对这些切片进行取并集处理,若程序只有单独切片不需要进行处理。
[0061]
步骤2:基于频谱技术获取可疑列表;
[0062]
基于频谱技术的可疑列表获取分为三个步骤:频谱获取、中间变量计算、可疑列表获取;
[0063]
步骤2-1:获取频谱信息
[0064]
首先要保证程序至少要有一个失败测试用例,接着执行程序的所有测试用例并记录执行过程收集相应的数据,收集的数据包括:测试用例、执行的语句、执行的结果,这些数据就是覆盖信息和输出信息,最后通过解释器形成一个频谱矩阵:行对应每个测试用例,列对应每条语句,并利用单独列向量表示执行结果信息;
[0065]
步骤2-2:计算中间变量
[0066]
将上一步收集到的频谱信息输入到分析器中,进行四个中间变量的计算,公式为:
[0067]apq
(j)=|{i|x
ij
=pλei=q}|
[0068]a00
(j)表示语句j不在成功的测试用例中的个数;a
01
(j)表示语句j在不在失败的测试用例中的个数;a
10
(j)表示语句j在成功的测试用例中的个数;a
11
(j)表示语句j在失败的测试用例中的个数,x
ij
为语句j在测试用例i的覆盖结果,ei为测试用例i的执行结果;
[0069]
步骤2-3:获取可疑列表
[0070]
计算得出每条语句的中间变量后便可以利用公式计算出该条语句的怀疑度分数,具体为:
[0071][0072]
得到每条语句的怀疑度后,根据怀疑度进行排名得到可疑语句列表。
[0073]
步骤3:组合计算新可疑列表
[0074]
利用断言切换技术得到的切片重新计算由频谱技术得到的可疑列表,该组合计算分为两个步骤:确认语句、计算分数;
[0075]
步骤3-1:确认语句
[0076]
根据由频谱技术得到的怀疑列表中的语句依次确认其是否在该程序的切片中,如果在则该语句的切片分数为1,否则为0;
[0077]
步骤3-2:重新计算怀疑度
[0078]
根据得到的ochiai分数以及切片分数sliscore,使用以下公式重新计算怀疑度:
[0079]
newsocre=α*oriscore+β*sliscore
[0080]
参数α和β均取0.5,是保持ochiai分数和sliscore具有相同的优先级,即为了切片和原可疑列表所占的比重一样,不至于其中一方过重,以致切片或者频谱技术得出的可疑语句占过高的排名。最后便获得了重新计算分数的可疑列表,基于该列表可以进一步地定
位缺陷,首先检查前5的可疑语句,再检查前10的可疑语句,最后依次检查剩下的语句。
技术特征:
1.一种基于频谱技术和断言切换技术的缺陷定位方法,其特征在于,包括如下步骤:步骤1:基于断言切换技术的切片获取;1-1.统计失败测试用例1-1-1.在提供的测试用例中,将所有的失败测试用例统计并筛选出来;1-2.寻找关键断言对要进行的切换断言缩小,使用多断言同时切换策略进行切换以便找到更多的关键断言;其中断言缩小,具体为:首先通过追溯该程序的执行过程记录下所有的断言,接着计算所有断言控制的语句,判断控制的语句中是否存在执行过的语句,如果存在则去除该断言,该断言不再进行切换;其中多断言同时切换策略,具体为:在找出所有需要切换的断言后进行排序,依据断言与输出错误的距离远近排名,距离越近的断言排名越高,得出所有的排名后进行切换,由整个排名列表从高到低分别进行单断言切换、双断言切换、三断言切换,其中双断言切换固定排名第一的断言,三断言切换需要固定排名一、二的断言;1-3.获取切片判断该程序是否有关键断言,对之前筛选出的失败测试用例进行切片,如果有则将所有的关键断言在切片过程中放进切片,否则直接进行切片;1-4.融合切片在得到所有程序的失败测试用例的切片后进行进一步处理,对程序具有多个失败测试用例也就有多个切片,则需要对这些切片进行取并集处理,而只有单独切片不需要进行处理;步骤2:基于频谱技术获取可疑列表;步骤3:组合计算新可疑列表;3-1.确认语句3-1-1.根据怀疑列表中的语句依次确认其是否在该程序的切片中,如果在则该语句的切片分数为1,否则为0;3-2.重新计算怀疑度3-2-1.根据语句的怀疑度分数以及得到的切片分数重新计算怀疑度,公式如下:newsocre=α*oriscore+β*sliscore其中,oriscore即ochiai分数,sliscore即切片分数,α和β为系数,α+β=1;获得了重新计算怀疑度的可疑列表;3-2-1.基于重新计算怀疑度的可疑列表进一步地定位缺陷。2.根据权利要求1所述的一种基于频谱技术和断言切换技术的缺陷定位方法,其特征在于:步骤2所述的可疑列表获取具体如下:2-1.获取频谱信息2-1-1.首先要保证程序至少要有一个失败测试用例;2-1-2.接着执行程序的所有测试用例并记录执行过程收集相应的数据,收集的数据包括:测试用例、执行的语句、执行的结果,这些数据就是覆盖信息和输出信息;2-1-3.通过解释器形成一个频谱矩阵:行对应每个测试用例,列对应每条语句,并利用
单独列向量表示执行结果信息;2-2.中间变量计算2-2-1.将上一步收集到的频谱信息输入到分析器中,进行四个中间变量的计算,公式如下:a
pq
(j)=|{i|x
ij
=pλe
i
=q}|a
00
(j)表示语句j不在成功的测试用例中的个数;α
01
(j)表示语句j在不在失败的测试用例中的个数;a
10
(j)表示语句j在成功的测试用例中的个数;a
11
(j)表示语句j在失败的测试用例中的个数,x
ij
为语句j在测试用例i的覆盖结果,e
i
为测试用例i的执行结果;2-3.可疑列表获取2-3-1.计算得出每条语句的中间变量后便利用公式计算出该条语句的怀疑度,这里使用的是公式:得到每条语句的怀疑度后便以怀疑度进行排名得到可疑语句列表。3.根据权利要求1所述的一种基于频谱技术和断言切换技术的缺陷定位方法,其特征在于:所述的参数α和β均取0.5,以保持ochiai分数和sliscore具有相同的优先级,即为了切片和原可疑列表所占的比重一样,不至于其中一方过重,以致切片或者频谱技术得出的可疑语句占过高的排名。4.根据权利要求1所述的一种基于频谱技术和断言切换技术的缺陷定位方法,其特征在于:所述的进一步地定位缺陷,具体为:首先检查前5的可疑语句,再检查前10的可疑语句,最后依次检查剩下的语句。
技术总结
本发明涉及一种基于频谱技术和断言切换技术的缺陷定位方法。本发明主要考虑如何获得更准确的切片以及如何将切片与可疑列表相结合,首先对程序的失败测试使用断言切换技术找出所有的关键断言;然后对该失败测试进行切片,获取到切片;接着,采用频谱技术对程序分析,即执行程序的所有测试用例收集到频谱信息,利用频谱信息计算出所有可疑元素以及对应的怀疑度分数;最后基于所获得的切片以及怀疑度分数重新计算出新的可疑列表对缺陷进行定位。本发明增强了切片和频谱组合技术对于一些遗漏型缺陷的定位,并进一步提高了切片与频谱技术结合后的定位准确率和效率。技术结合后的定位准确率和效率。技术结合后的定位准确率和效率。
技术研发人员:方景龙 谢世豪 魏丹 陈滨 王兴起
受保护的技术使用者:杭州电子科技大学
技术研发日:2021.12.06
技术公布日:2022/3/8