CN106598850B - 一种基于程序失效聚类分析的错误定位方法 - Google Patents
一种基于程序失效聚类分析的错误定位方法 Download PDFInfo
- Publication number
- CN106598850B CN106598850B CN201611097861.1A CN201611097861A CN106598850B CN 106598850 B CN106598850 B CN 106598850B CN 201611097861 A CN201611097861 A CN 201611097861A CN 106598850 B CN106598850 B CN 106598850B
- Authority
- CN
- China
- Prior art keywords
- row
- failure
- basic block
- covering
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/366—Software debugging using diagnostics
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提出的一种基于程序失效聚类分析的错误定位方法,从同一个错误引起的失效具有相似性触发,首先获取每次失效测试的执行切片,根据杰卡德距离公式计算执行切片之间的距离;根据K‐Means聚类算法对程序失效执行切片进行聚类,得到失效执行切片簇;然后根据跳转指令的运行时程序状态划分方法得到失效执行切片的程序状态序列图;根据程序状态序列图中函数嵌套调用次数的多少分别建立以基本块/行为单位的执行路径覆盖向量和覆盖矩阵;最后分别计算出各基本块/行的可疑度并降序排列、求出以基本块/行为单位的频繁集,根据基本块/行可疑度的大小以及其对应的频繁依次检查各基本块/行是否含有错误。
Description
技术领域
本发明涉及软件工程中软件测试技术领域,尤其涉及程序失效聚类分析的错误定位的技术研究。
背景技术
近年来,软件发展日新月异,覆盖了日常生活、工作等社会各个层次。然而,软件缺陷的存在却经常导致信息系统的失效和崩溃,给系统的可信运行带来挑战。缺陷的产生,很大一部分是由编码阶段注入的软件错误导致的。“软件调试”是定位并排除软件错误的常用手段,也是软件开发过程中繁琐且易出错的过程,具有很高的自动化需求。“错误定位”指的是在已知程序失效的情况下定位错误代码的过程,是软件调试的首要步骤。精确的错误定位方法研究,一方面有利于缺陷的检测、诊断及修复,另一方面则可以降低软件测试及维护成本,对软件质量及可靠性的提高具有重要意义。
聚类是将数据分类到不同的类或者簇这样的一个过程,所以同一个簇中的对象有很大的相似性,而不同簇间的对象有很大的相异性。聚类分析采用描述个体对(变量对)之间的接近程度的指标,例如“距离”,“距离”越小的个体(变量)越具有相似性。计算聚类距离指标D(distance)的方法非常多:按照数据的不同性质,可选用不同的距离指标。欧氏距离(Euclidean distance)、欧氏距离的平方(Squared Euclidean distance)、曼哈顿距离(Block)、切比雪夫距离(Chebychev distance)、卡方距离(Chi‐Square measure)等。采用聚类算法对程序失效进行聚类后,同一失效簇内的程序代码结构具有很大的相似性。然后对失效簇内的程序代码运用单一错误的错误定位方法进行错误定位,就可以实现扩大错误定位技术的应用范围目的。
本技术是对已有错误定位技术当高可疑代码和错误代码比较分散以及随着程序中错误数量的增多时定位效果不理想进行改进。采用聚类算法把程序失效分为不同的失效簇,同一个失效簇内的失效是由一个错误引起的;然后根据失效的所覆盖代码的状态序列采用不同的代码检查方式进行错误定位,从而提高错误定位的效率。
发明内容
本发明的目的是提供一种基于程序失效聚类分析的错误定位方法,以避免高可疑代码和错误代码跨函数体以及随着程序中错误数量增多错误定位效率降低的问题。
本发明的基于程序失效聚类分析的错误定位方法,包括以下步骤:
S1:收集每次失效执行覆盖的代码信息,一次失效执行所覆盖的代码行数的集合即为一个失效执行切片,采用杰卡德距离公式计算失效执行切片之间的距离;
S2:根据K-Means聚类算法对程序失效执行切片进行聚类,得到失效执行切片簇,同一失效簇内的失效所覆盖的代码具有较高的相似度;
S3:根据跳转指令的运行时程序状态划分方法绘出失效执行切片的程序状态序列图,程序状态序列图反映一次失效执行中函数嵌套调用的次数θ;
S4:根据程序状态序列图中函数嵌套调用次数θ分别建立以行/基本块为单位的执行路径覆盖向量和覆盖矩阵,并分别求其频繁集;频繁集是指失效执行中在所有覆盖向量上对目标基本块/行保持覆盖一致性的分量所对应的基本块/行的集合;
S5:分别计算出各基本块/行的可疑度并降序排列,根据基本块/行可疑度的大小以及其对应的频繁集依次检查各基本块/行是否含有错误。
优选的,所述的步骤S1中失效执行切片之间的距离的量化方法如下:
非空集合A,B表示两个失效执行切片;D(A,B)表示两个失效执行切片之间的
相似度,|A|表示集合中元素的个数。
优选的,所述的步骤S4中根据程序状态序列图中函数嵌套调用次数θ对每条测试用例对应的执行分别建立以行/基本块为单位的执行路径覆盖向量和覆盖矩阵,所述的基本块为中间不存在控制跳转的连续代码语句,覆盖向量的量化方法如下:
设执行轨迹的覆盖向量集合T=<t1,2,…,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为目标代码的频繁集。求解目标基本块/行的频繁集的算法如下:
OT表示目标基本块/行;TAS表示以OT为目标的基本块/行的频繁集集合,tas(e)表示以e为目标的频繁集;u∧v表示向量的与操作。
优选的,所述的步骤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执行不是失效执行。
附图说明
图1是本发明的流程图;
图2是失效测试的执行切片示例图;
图3是与其他方法的对比试验数据图。
具体实施方式
下面结合附图和实施例对本发明技术方案做进一步详细说明,以下实施例不构成对本发明的限定。
本发明利的总体思路是采用聚类算法把程序失效分为不同的失效簇,同一个失效簇内的失效是由一个错误引起的;然后根据失效的所覆盖代码的状态序列采用不同的代码检查方式进行错误定位。本实施例以西门子软件为例来进行说明。
实施例:本实施例的一种程序失效聚类分析的错误定位方法,如图1所示,包括以下步骤:
S1:收集每次失效执行覆盖的代码信息,一次失效执行所覆盖的代码行数的集合即为一个失效执行切片,采用杰卡德距离公式计算失效执行切片之间的距离;
在本实例中,假设T={t1,t2,…,tn}为缺陷程序P的配套测试套件,其中,第j个测试用例tj可用一个有序对<ij,cj>表示,其中,ij表示测试用例tj的实际输入,oj表示tj的预期输出.假设为测试用例的实际输出,若测试用例的实际输出与预期输出oj保持一致,则称该测试用例为成功测试用例(passed test case);否则,称该测试用例为失败测试用例(failed test case),该执行是一次失效执行,简称失效.
程序P的一次执行E所覆盖的一组代码语句称为E的一个执行切片,一次失效执行的执行切片为一个失效集合。如图2,E1的执行切片为{2,3,4,5,6,12,20},E2的执行切片为{2,3,4,5,8,16,20}。
本发明中设两个非空失效集合A和B,则这两个失效集合的杰卡德距离(JaccardDistance)为:
其中|A|表示集合A的大小;距离D满足:0≤D(A,B)≤1。
通过杰卡德距离公式计算出执行切片之间的距离,就可以知道执行切片两两之间的相似度。
S2:根据K‐Means聚类算法对程序失效执行切片进行聚类。本发明通过计算失效执行切片之间的距离,得到失效距离矩阵M,
其中,mi,j表示失效集合A和B之间的距离。K‐means算法是典型的基于原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。通过该算法得到失效执行切片簇,同一失效簇内的失效所覆盖的代码具有较高的相似度。
S3:根据跳转指令的运行时程序状态划分方法(BIP)绘出失效执行切片的程序状态序列图。BIP方法根据跳转指令类型和程序运行时中间数据的变化规律将程序状态划分为如下6种类型:①无条件跳转状态(unconditional‐jump‐state,UJS);②0条件跳转状态(conditional‐jump‐with‐false‐state,CJFS);③1条件跳转状态(conditional‐jump‐with‐true‐state,CJTS);④函数调用状态(CALL‐state,CALLS);⑤函数返回状态(RET‐state,RETS);⑥中断状态(INT‐state,INTS)。
不难发现,基于BIP方法得到的程序状态序列片段能够表征程序运行时所体现的程序结构上的特性,如(UJS,CJFS,…,CJFS,…,CJTS,…)的状态序列片段反映出程序正在执行一段具有循环结构特征的程序代码;(CALLS,…,RETS)的状态序列片段表示程序正在完成一次函数调用过程等。
由此得到程序状态序列图,从图中可以直观的看出一次失效执行中函数嵌套调用次数的多少(程序的复杂程度)。
S4:根据程序状态序列图中函数嵌套调用次数的多/少分别建立以行/基本块为单位的执行路径覆盖向量和覆盖矩阵;根据程序结构不同分别求其频繁集。
本发明中设执行轨迹的覆盖向量集合T=<t1,t2,…,tr>,所有覆盖向量的集合构成一个覆盖向量矩阵,其中ti表示第i次执行覆盖的信息构成的覆盖向量。T根据程序执行结果的不同,将T分为成功执行和失效执行两类,分别标记为Tp和Tf。覆盖向量ti=<e1,e2,…,es>
ej表示第i次执行覆盖的第j个基本块/行;T表示全部执行对应的覆盖向量集合,即覆盖矩阵。
频繁集是失效执行中在所有覆盖向量上对目标基本块/行保持覆盖一致性的分量所对应的基本块/行的集合,本发明中求频繁集的算法如下:
OT表示目标基本块/行;TAS表示以OT为目标的基本块/行的频繁集集合,tas(e)表示以e为目标的频繁集;u∧v表示向量的与操作。
由上述算法可以得到对目标基本块/行保持覆盖一致性的分量所对应的基本块/行的集合,即目标基本块/行的频繁集。
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执行不是失效执行。
根据基本块/行可疑度的大小以及其对应的频繁集依次检查各基本块/行是否含有错误的基本思路如下:
1)计算每个基本块/行的可疑度,并根据可疑度的大小降序排列,根据程序状态序列,查看程序函数调用次数是否小于θ,如果是转步骤2),否则转步骤4);
2)从排序后的列表中依次检查基本块是否含有错误,如果定位出错误转步骤6),否则转步骤3);
3)将没有错误的基本块作为目标基本块,依据覆盖信息矩阵求解其频繁集;将频繁集中的基本块依据其可疑度大小降序排列,依次检查各基本块是否含有错误,如果定位出错误转步骤6),否则转步骤2);
4)从排序后的列表中依次检查各行是否含有错误,如果定位出错误转步骤6),否则转步骤5);
5)将没有错误的行作为目标行,依据覆盖信息矩阵求解其频繁集;将频繁集中的各行依据其可疑度大小降序排列,依次检查各行是否含有错误,如果定位出错误转步骤6),否则转步骤4);
6)统计已检查的基本块/行的数量。
本实例为了检验方法的有效性,选用西门子测试套件进行研究,西门子套件是一个计算机研究领域公认的实验对象,经常被相关研究用来实验,在实验中去掉了那些不能被测试集中的测试用例触发的错误,实际实验中的错误版本数量共计132。图3为程序中含有2‐5个错误的错误定位技术比较图。从图中可以看出本发明的方法即CA‐MFL的错误定位效率比Tarantula、Jaccard和Ochiai方法有所提高,并且当程序中错误数量增多时相同代码检查率定位出的错误数量多于Tarantula、Jaccard和Ochiai方法。
本发明一方面利用面向错误的失效聚类方法对同时存在的多个错误的程序进行失效聚类,改善软件中多个错误同时存在的定位效果;另一方面根据代码的函数嵌套调用次数θ对失效集合构建不区分函数的全局覆盖向量和覆盖矩阵,使得频繁集求解不单独针对某一个函数,从而进一步提高错误定位的准确度。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
Claims (3)
1.一种基于程序失效聚类分析的错误定位方法,其特征在于包括以下步骤:
S1:收集每次失效执行覆盖的代码信息,一次失效执行所覆盖的代码行数的集合即为一个失效执行切片,采用杰卡德距离公式计算失效执行切片之间的距离;
S2:根据K-Means聚类算法对程序失效执行切片进行聚类,得到失效执行切片簇,同一失效簇内的失效所覆盖的代码具有较高的相似度;
S3:根据跳转指令的运行时程序状态划分方法绘出失效执行切片的程序状态序列图,程序状态序列图反映一次失效执行中函数嵌套调用的次数θ;
S4:根据程序状态序列图中函数嵌套调用次数θ分别建立以行/基本块为单位的执行路径覆盖向量和覆盖矩阵,并分别求其频繁集;频繁集是指失效执行中在所有覆盖向量上对目标基本块/行保持覆盖一致性的分量所对应的基本块/行的集合;
所述的步骤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为目标代码的频繁集;
S5:分别计算出各基本块/行的可疑度并降序排列,根据基本块/行可疑度的大小以及其对应的频繁集依次检查各基本块/行是否含有错误;
所述的步骤S5中根据基本块/行可疑度的大小以及其对应的频繁集依次检查各基本块/行是否含有错误的步骤如下:
1)计算每个基本块/行的可疑度,并根据可疑度的大小降序排列,根据程序状态序列,查看程序函数调用次数是否小于θ,如果是转步骤2),否则转步骤4);
2)从排序后的列表中依次检查基本块是否含有错误,如果定位出错误转步骤6),否则转步骤3);
3)将没有错误的基本块作为目标基本块,依据覆盖信息矩阵求解其频繁集;将频繁集中的基本块依据其可疑度大小降序排列,依次检查各基本块是否含有错误,如果定位出错误转步骤6),否则转步骤2);
4)从排序后的列表中依次检查各行是否含有错误,如果定位出错误转步骤6),否则转步骤5);
5)将没有错误的行作为目标行,依据覆盖信息矩阵求解其频繁集;将频繁集中的各行依据其可疑度大小降序排列,依次检查各行是否含有错误,如果定位出错误转步骤6),否则转步骤4);
6)统计已检查的基本块/行的数量。
2.根据权利要求1所述的一种基于程序失效聚类分析的错误定位方法,其特征在于:所述的步骤S1中失效执行切片之间的距离的量化方法如下:
非空集合A,B表示两个失效执行切片;D(A,B)表示两个失效执行切片之间的相似度,|A|表示集合中元素的个数。
3.根据权利要求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执行不是失效执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611097861.1A CN106598850B (zh) | 2016-12-03 | 2016-12-03 | 一种基于程序失效聚类分析的错误定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611097861.1A CN106598850B (zh) | 2016-12-03 | 2016-12-03 | 一种基于程序失效聚类分析的错误定位方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106598850A CN106598850A (zh) | 2017-04-26 |
CN106598850B true CN106598850B (zh) | 2019-05-28 |
Family
ID=58596821
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611097861.1A Active CN106598850B (zh) | 2016-12-03 | 2016-12-03 | 一种基于程序失效聚类分析的错误定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106598850B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107678734B (zh) * | 2017-09-05 | 2020-12-08 | 东南大学苏州研究院 | 基于遗传算法的cpu基准测试程序集构造方法 |
CN109165155B (zh) * | 2018-06-20 | 2021-06-22 | 扬州大学 | 一种基于聚类分析的软件缺陷修复模板提取方法 |
CN110134588B (zh) * | 2019-04-16 | 2023-10-10 | 江苏大学 | 一种基于代码和组合覆盖的测试用例优先级排序方法及测试系统 |
CN110362484B (zh) * | 2019-07-03 | 2022-03-01 | 北京航空航天大学 | 软件多故障的定位方法、装置、电子设备以及存储介质 |
CN115629998B (zh) * | 2022-12-22 | 2023-03-10 | 北京航空航天大学 | 一种基于KMeans聚类和相似度的测试用例筛选方法 |
CN117056237B (zh) * | 2023-10-10 | 2023-12-08 | 北京云枢创新软件技术有限公司 | 验证集成电路代码覆盖率的方法、电子设备和介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521130A (zh) * | 2011-12-13 | 2012-06-27 | 南京大学 | 一种基于聚类不变式分析的错误定位方法 |
-
2016
- 2016-12-03 CN CN201611097861.1A patent/CN106598850B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521130A (zh) * | 2011-12-13 | 2012-06-27 | 南京大学 | 一种基于聚类不变式分析的错误定位方法 |
Non-Patent Citations (3)
Title |
---|
一种对程序故障行为和失效行为的聚类有效性验证方法;张丹青 等;《中国科学:信息科学》;20141231;第44卷(第10期);第1327-1329页 |
基于关联挖掘的软件错误定位方法;赵磊 等;《计算机学报》;20121231;第35卷(第12期);第2532-2533页 |
基于数据挖掘的软件错误定位方法研究;曹鹤玲;《中国博士学位论文全文数据库信息科技辑》;20160315;第2016年卷(第3期);正文第93-94页 |
Also Published As
Publication number | Publication date |
---|---|
CN106598850A (zh) | 2017-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106598850B (zh) | 一种基于程序失效聚类分析的错误定位方法 | |
Rajbahadur et al. | The impact of using regression models to build defect classifiers | |
Gong et al. | Interactive fault localization leveraging simple user feedback | |
US20160026557A1 (en) | System and method for testing software | |
CN105045713A (zh) | 数据处理方法及移动终端 | |
US20210398674A1 (en) | Method for providing diagnostic system using semi-supervised learning, and diagnostic system using same | |
Xia et al. | Diversity maximization speedup for localizing faults in single-fault and multi-fault programs | |
CN109656917A (zh) | 多数据源的数据检测方法、装置、设备及可读存储介质 | |
CN110515826A (zh) | 一种基于次数频谱与神经网络算法的软件缺陷定位方法 | |
US11836617B2 (en) | Techniques for analytical instrument performance diagnostics | |
CN108595343A (zh) | 应用程序的测试方法及装置 | |
CN105468508A (zh) | 代码检测方法及装置 | |
CN108957385A (zh) | 一种电能计量设备自动化检定线异常表位确认方法及装置 | |
El Mandouh et al. | Application of machine learning techniques in post-silicon debugging and bug localization | |
US9411007B2 (en) | System and method for statistical post-silicon validation | |
CN115659335A (zh) | 基于混合模糊测试的区块链智能合约漏洞检测方法及装置 | |
Abreu et al. | Exploiting count spectra for bayesian fault localization | |
US11573885B1 (en) | System and method for test selection according to test impact analytics | |
CN115932144B (zh) | 色谱仪性能检测方法、装置、设备和计算机介质 | |
CN105159826B (zh) | 一种定位目标程序中的错误语句的方法和装置 | |
Berthier et al. | Tutorials on testing neural networks | |
Lim et al. | Diagnosis of scan chain faults based-on machine-learning | |
CN108763092B (zh) | 一种基于交叉验证的代码缺陷检测方法及装置 | |
KR20050061358A (ko) | 네트워크 진단 방법, 네트워크 진단을 수행하는 코드를포함하는 컴퓨터 판독 가능 매체 및 시스템 | |
CN110309059A (zh) | Ui界面测试方法、系统、计算机设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |