1.一种基于程序失效聚类分析的错误定位方法,其特征在于包括以下步骤:S1:收集每次失效执行覆盖的代码信息,一次失效执行所覆盖的代码行数的集合即为一个失效执行切片,采用杰卡德距离公式计算失效执行切片之间的距离;
S2:根据K-Means聚类算法对程序失效执行切片进行聚类,得到失效执行切片簇,同一失效簇内的失效所覆盖的代码具有较高的相似度;
S3:根据跳转指令的运行时程序状态划分方法绘出失效执行切片的程序状态序列图,程序状态序列图反映一次失效执行中函数嵌套调用的次数θ;
S4:根据程序状态序列图中函数嵌套调用次数θ分别建立以行/基本块为单位的执行路径覆盖向量和覆盖矩阵,并分别求其频繁集;频繁集是指失效执行中在所有覆盖向量上对目标基本块/行保持覆盖一致性的分量所对应的基本块/行的集合;
S5:分别计算出各基本块/行的可疑度并降序排列,根据基本块/行可疑度的大小以及其对应的频繁集依次检查各基本块/行是否含有错误。
2.根据权利要求1所述的一种基于程序失效聚类分析的错误定位方法,其特征在于:所述的步骤S1中失效执行切片之间的距离的量化方法如下:
非空集合A,B表示两个失效执行切片;D(A,B)表示两个失效执行切片之间的相似度,|A|表示集合中元素的个数。
3.根据权利要求1所述的一种基于程序失效聚类分析的错误定位方法,其特征在于:所述的步骤S4中根据程序状态序列图中函数嵌套调用次数θ对每条测试用例对应的执行分别建立以行/基本块为单位的执行路径覆盖向量和覆盖矩阵,所述的基本块为中间不存在控制跳转的连续代码语句,覆盖向量的量化方法如下:设执行轨迹的覆盖向量集合T=<t1,t2,…,tr>,所有覆盖向量的集合构成一个覆盖向量矩阵,其中ti表示第i次执行覆盖的信息构成的覆盖向量,T根据程序执行结果的不同,将T分为成功执行和失效执行两类,分别标记为Tp和Tf;覆盖向量ti=<e1,e2,...,es>
ej表示第i次执行覆盖的第j个基本块/行。
步骤S4中建立频繁集的方法为:首先初始化tas(e)为单位向量,然后依次遍历e分量不为0的覆盖向量并将该覆盖向量与tas(e)进行向量的与操作,求得e频繁集,最后可得所有目标基本块/行的频繁集集合TAS,tas(e)表示以e为目标代码的频繁集。
4.根据权利要求1或2所述的一种基于程序失效聚类分析的错误定位方法,其特征在于:所述的步骤S5中基本块/行的可疑度的计算方法如下:
其中,nuv(b)=|{a|xab=u∧ra=v}|,u,v∈{0,1},xab=u,u=1时表示基本块/行在a执行中被覆盖;u=0时表示基本块/行在a执行中没有覆盖,ra=v,v=1时表示a执行是失效执行;v=0时表示a执行不是失效执行。
5.根据权利要求1所述的一种基于程序失效聚类分析的错误定位方法,其特征在于:所述的步骤S5中根据基本块/行可疑度的大小以及其对应的频繁集依次检查各基本块/行是否含有错误的步骤如下:
1)计算每个基本块/行的可疑度,并根据可疑度的大小降序排列,根据程序状态序列,查看程序函数调用次数是否小于θ,如果是转步骤2),否则转步骤4);
2)从排序后的列表中依次检查基本块是否含有错误,如果定位出错误转步骤6),否则转步骤3);
3)将没有错误的基本块作为目标基本块,依据覆盖信息矩阵求解其频繁集;将频繁集中的基本块依据其可疑度大小降序排列,依次检查各基本块是否含有错误,如果定位出错误转步骤6),否则转步骤2);
4)从排序后的列表中依次检查各行是否含有错误,如果定位出错误转步骤6),否则转步骤5);
5)将没有错误的行作为目标行,依据覆盖信息矩阵求解其频繁集;将频繁集中的各行依据其可疑度大小降序排列,依次检查各行是否含有错误,如果定位出错误转步骤6),否则转步骤4);
6)统计已检查的基本块/行的数量。