CN105159826A - 一种定位目标程序中的错误语句的方法和装置 - Google Patents

一种定位目标程序中的错误语句的方法和装置 Download PDF

Info

Publication number
CN105159826A
CN105159826A CN201510516012.4A CN201510516012A CN105159826A CN 105159826 A CN105159826 A CN 105159826A CN 201510516012 A CN201510516012 A CN 201510516012A CN 105159826 A CN105159826 A CN 105159826A
Authority
CN
China
Prior art keywords
test case
statement
error diagnosis
coverage information
case
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.)
Granted
Application number
CN201510516012.4A
Other languages
English (en)
Other versions
CN105159826B (zh
Inventor
李一韩
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Beijing Electronic Information Industry Co Ltd
Original Assignee
Inspur Beijing Electronic Information Industry Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Inspur Beijing Electronic Information Industry Co Ltd filed Critical Inspur Beijing Electronic Information Industry Co Ltd
Priority to CN201510516012.4A priority Critical patent/CN105159826B/zh
Publication of CN105159826A publication Critical patent/CN105159826A/zh
Application granted granted Critical
Publication of CN105159826B publication Critical patent/CN105159826B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种定位目标程序中的错误语句的方法和装置,该方法包括以下步骤:在目标程序上运行多个测试用例,获取各个测试用例的执行结果和覆盖信息;根据各个测试用例的执行结果和覆盖信息,计算各个测试用例的错误诊断能力;根据各个测试用例的覆盖信息和错误诊断能力,计算所述目标程序中的各个语句的可疑度,并根据各个语句的可疑度定位所述目标程序中的错误语句。本发明根据测试用例的覆盖信息和执行结果区分不同测试用例的错误诊断能力,并根据各个测试用例的错误诊断能力计算目标程序中的各个语句的可疑度,进而定位目标程序中的错误语句,能够实现对错误语句的快速定位,减少程序调试的开销。

Description

一种定位目标程序中的错误语句的方法和装置
技术领域
本发明涉及计算机技术领域,具体涉及一种定位目标程序中的错误语句的方法和装置。
背景技术
随着计算机技术的迅速发展,程序调试在软件项目开发过程中的地位日益提高,而在程序调试过程中,错误定位是代价最昂贵且最耗时的活动之一。现有的错误定位方法通常是基于覆盖差异统计进行的,根据程序中的语句被正确测试用例和错误测试用例覆盖的信息,通过使用具有一定特点的统计模型,计算语句的可疑度,进而区分语句包含错误的可疑度大小。
具体地,针对程序中的每一条可执行语句s,收集如下四种覆盖参数:<aef,aep,anf,anp>。其中,每个参数的第一个下标记表示语句s是(用e表示)否(用n表示)被测试用例覆盖,第二个下标记表示测试用例的执行结果是通过(用p表示)还是失败(用f表示),每一个参数表示满足相应条件的测试用例的数目。由于只统计了语句被测试用例覆盖的次数,其区分语句可疑度的能力也受到了一定程度的限制。以著名的Tarantula技术为例,Tarantula计算语句可疑度的公式依赖于上述4个覆盖参数。由于在一次测试过程中,对所有的可执行语句来说,测试用例集中的测试用例的数量是一样的,且正确测试用例和失败测试用例的数目也是一样的,因此,Tarantula在区分语句可疑度时只依赖于aef和aep,如果两条语句被相同数目的正确测试用例和相同数目的失败测试用例覆盖,即使覆盖了这两条语句的测试用例之间不完全相同,在Tarantula的计算方案中,这两条语句仍将拥有相同的可疑度值,也就是说这两条语句将不可被区分,从而加大了调试的开销。
发明内容
本发明提供了一种定位目标程序中的错误语句的方法和装置,以解决现有的错误定位方法区分语句可疑度的能力受到限制的缺陷。
本发明提供了一种定位目标程序中的错误语句的方法,包括以下步骤:
在目标程序上运行多个测试用例,获取各个测试用例的执行结果和覆盖信息;
根据各个测试用例的执行结果和覆盖信息,计算各个测试用例的错误诊断能力;
根据各个测试用例的覆盖信息和错误诊断能力,计算所述目标程序中的各个语句的可疑度,并根据各个语句的可疑度定位所述目标程序中的错误语句。
可选地,所述根据各个测试用例的执行结果和覆盖信息,计算各个测试用例的错误诊断能力,具体为:
根据各个测试用例的执行结果和覆盖信息,分别计算失败测试用例和正确测试用例的错误诊断能力。
可选地,所述测试用例的覆盖信息包括所述测试用例的语句覆盖信息和数据块覆盖信息;
根据各个测试用例的执行结果和覆盖信息计算失败测试用例的错误诊断能力,具体为:
根据所述失败测试用例的基本块覆盖信息和语句覆盖信息,分别计算所述失败测试用例的第一错误诊断因子和第二错误诊断因子,并根据所述第一错误诊断因子和所述第二错误诊断因子计算所述失败测试用例的错误诊断能力。
可选地,根据各个测试用例的执行结果和覆盖信息计算正确测试用例的错误诊断能力,具体为:
计算所述正确测试用例与失败测试用例之间的相似度,并根据所述相似度计算所述正确测试用例的错误诊断能力。
可选地,所述根据各个测试用例的覆盖信息和错误诊断能力,计算所述目标程序中的各个语句的可疑度,具体为:
针对所述目标程序中的各个语句,分别计算执行各个语句的所有失败测试用例的错误诊断能力之和以及执行各个语句的所有正确测试用例的错误诊断能力之和,并根据所述所有失败测试用例的错误诊断能力之和所述所有正确测试用例的错误诊断能力之和计算各个语句的可疑度。
本发明还提供了一种定位目标程序中的错误语句的装置,包括以下步骤:
获取模块,用于在目标程序上运行多个测试用例,获取各个测试用例的执行结果和覆盖信息;
第一计算模块,用于根据各个测试用例的执行结果和覆盖信息,计算各个测试用例的错误诊断能力;
第二计算模块,用于根据各个测试用例的覆盖信息和错误诊断能力,计算所述目标程序中的各个语句的可疑度;
定位模块,用于根据各个语句的可疑度定位所述目标程序中的错误语句。
可选地,所述第一计算模块,包括:
第一计算子模块,用于根据各个测试用例的执行结果和覆盖信息,计算失败测试用例的错误诊断能力;
第二计算子模块,用于根据各个测试用例的执行结果和覆盖信息,计算正确测试用例的错误诊断能力。
可选地,所述测试用例的覆盖信息包括所述测试用例的语句覆盖信息和数据块覆盖信息;
所述第一计算子模块,具体用于根据所述失败测试用例的基本块覆盖信息和语句覆盖信息,分别计算所述失败测试用例的第一错误诊断因子和第二错误诊断因子,并根据所述第一错误诊断因子和所述第二错误诊断因子计算所述失败测试用例的错误诊断能力。
可选地,所述第二计算子模块,具体用于计算所述正确测试用例与失败测试用例之间的相似度,并根据所述相似度计算所述正确测试用例的错误诊断能力。
可选地,所述第二计算模块,具体用于针对所述目标程序中的各个语句,分别计算执行各个语句的所有失败测试用例的错误诊断能力之和以及执行各个语句的所有正确测试用例的错误诊断能力之和,并根据所述所有失败测试用例的错误诊断能力之和所述所有正确测试用例的错误诊断能力之和计算各个语句的可疑度。
本发明根据测试用例的覆盖信息和执行结果区分不同测试用例的错误诊断能力,并根据各个测试用例的错误诊断能力计算目标程序中的各个语句的可疑度,进而定位目标程序中的错误语句,能够实现对错误语句的快速定位,减少程序调试的开销。
附图说明
图1为本发明实施例中的一种定位目标程序中的错误语句的方法流程图;
图2为本发明实施例中的一种定位目标程序中的错误语句的装置结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,如果不冲突,本发明实施例以及实施例中的各个特征可以相互结合,均在本发明的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本发明实施例提供了一种定位目标程序中的错误语句的方法,如图1所示,包括以下步骤:
步骤101,在目标程序上运行多个测试用例,获取各个测试用例的执行结果和覆盖信息。
具体地,可以在目标程序上运行测试用例集中的所有测试用例,通过插桩的方法收集各个测试用例的覆盖信息,并根据各个测试用例的输出分别记录各个测试用例的执行结果。
其中,测试用例集包含多个测试用例,测试用例的覆盖信息包括测试用例的语句覆盖信息和数据块覆盖信息。
本实施例中,目标程序P由m个语句和w个基本块构成,可分别表示为P={s1,s2,…,sm}和P={b1,b2,…,bw}。在目标程序P上运行的测试用例集是T={t1,t2,…,tn}。以测试用例集T中的测试用例作为输入执行目标程序P,通过在目标程序中插桩的方法记录语句和基本块的执行情况,并记录测试用例执行结果是正确还是失败。如果测试用例的执行结果与预期结果一致,则将测试用例的执行结果标记为正确的;如果与预期结果不一致,则将测试用例的执行结果标记为错误的。根据执行结果,测试用例集T可以进一步划分为两个不相交的集合Tp和Tf,其中,Tp由T中的正确测试用例构成,Tf由T中的失败测试用例构成。在目标程序P上运行测试集T中的各个测试用例后,可分别收集到如下的覆盖信息及执行结果:
(1)语句覆盖信息:可表示成n×m维矩阵,记为MS,其中,矩阵的每一个元素cij表示语句sj在测试用例ti运行过程中是否被覆盖。如果被覆盖,其值为1,否则为0。
(2)基本块覆盖信息:可表示成n×w维矩阵,记为MB,其中,矩阵的每一个元素zij表示基本块bj在测试用例ti运行过程中是否被覆盖。如果被覆盖,其值为1,否则为0。
(3)执行结果:可表示成n维向量R=<r1,r2,…,rn>,其中,ri(1<=i<=n)表示测试用例ti的执行结果,如果执行结果为正确的,则ri等于1,否则为0。
步骤102,根据各个测试用例的执行结果和覆盖信息,计算各个测试用例的错误诊断能力。
具体地,可以根据各个测试用例的执行结果和覆盖信息,分别计算失败测试用例和正确测试用例的错误诊断能力,进而得出目标程序中的语句被各个测试用例执行时对执行结果的影响。
其中,失败测试用例是指在目标程序上的执行结果为错误的测试用例,一般而言,被失败测试用例执行过的语句都有可能包含错误的代码,并且错误的代码一定存在于这些语句当中。从失败测试用例的执行轨迹看,不同的测试用例覆盖的语句数量可能是不相同,因而对不同的失败测试用例而言,被列为可疑语句的数量也不尽相同,这说明受到覆盖语句数量多少的影响,失败测试用例将展现出不同的错误诊断能力。另一方面,在测试用例集当中,相对正确测试用例,失败测试用例的数量往往是十分有限且较少的,因此,与语句被正确测试用例覆盖的可能性相比,语句被失败测试用例覆盖的可能性更小。综上所述,由于失败执行信息较少,在区分诊断能力时更应该重视失败测试用例对参与执行的语句的可疑度贡献。
本实施例中,可以根据失败测试用例的基本块覆盖信息和语句覆盖信息,分别计算失败测试用例的第一错误诊断因子和第二错误诊断因子,并根据第一错误诊断因子和第二错误诊断因子计算失败测试用例的错误诊断能力。
其中,第一错误诊断因子衡量了测试用例关于基本块覆盖信息的错误诊断能力,其取值与测试用例覆盖的基本块数量成反比。也就是说,测试用例在执行过程中覆盖的基本块数目越少,该测试用例的诊断能力将越强。反之,则越弱。当一个失败测试用例在程序执行过程中只覆盖了一个基本块的时候,第一错误诊断因子的取值将达到最大,此时只有一个基本块被列为可疑语句范围,该测试用例的诊断能力将达到最大,被执行的语句对该失败测试用例执行结果的贡献也达到最大值,其与错误的代码关联将被增强。当一个失败测试用例在程序执行过程中覆盖了全部的基本块时,第一错误诊断因子的取值将达到最小,目标程序中所有的基本块都将被列为可疑语句范围,该测试用例的诊断能力将达到最小。
具体地,可以采用以下公式计算第一错误诊断因子:
T C ( t i ) = 1 &Sigma; r = 1 w z i r
其中,TC(ti)为失败测试用例ti的第一错误诊断因子,失败测试用例ti是失败测试用例集Tf中的一个元素,<zi1,zi2,zi3,…,ziw>为ti对目标程序P中所有基本块的覆盖特征。
另外,可以采用以下公式计算第二错误诊断因子:
T S ( t i , s j ) = l o g ( a e f | T f | - a e f + 0.1 + 2 ) , 其中cij≠0
其中,TS(ti,sj)为失败测试用例ti对语句sj的第二错误诊断因子,sj为目标程序P中的语句,aef为覆盖sj的失败测试用例的数量,Tf为失败测试用例集合,cij表示语句sj在测试用例ti运行过程中是否被覆盖,如果被覆盖,其值为1,否则为0。
综上所述,失败测试用例的错误诊断能力受到其覆盖基本块的数量和覆盖某个语句时该语句被失败测试用例覆盖情况的影响,可采用以下公式计算得到:
FW(ti,sj)=TC(ti)×TS(ti,sj)
其中,FW(ti,sj)为失败测试用例ti对语句sj的错误诊断能力,sj为目标程序P中的语句,TC(ti)为失败测试用例ti的第一错误诊断因子,TS(ti,sj)为失败测试用例ti对语句sj的第二错误诊断因子。
由于TC和TS总是大于等于1,因而决定了失败测试用例对语句的错误诊断能力也总是大于等于1。在计算语句包含错误的程度时,执行了该语句的失败测试用例数量越多且失败测试用例覆盖的基本块越少时,失败测试用例对该语句表现出越强的错误诊断能力。换句话说,该语句包含错误的可疑度将越大。
进一步地,本实施例中,可以计算正确测试用例与失败测试用例之间的相似度,并根据该相似度计算正确测试用例的错误诊断能力,正确测试用例是指在目标程序上的执行结果为正确的测试用例。
具体地,可以采用以下公式计算正确测试用例与失败测试用例之间的相似度:
S i m ( t i , t j ) = n ( t i &cap; t j ) n ( t i ) &times; n ( t j )
其中,Sim(ti,sj)表示正确测试用例ti与失败测试用例tj之间的相似度,n(ti)表示正确测试用例ti对应的语句覆盖向量中不为零的元素的数量,n(tj)表示失败测试用例tj对应的语句覆盖向量中不为零的元素的数量,ti∩tj={ciu|ciu≠0∧cju≠0,1<=u<=n}表示被失败测试用例tj和正确测试用例ti共同覆盖的语句数量与失败测试用例tj和正确测试用例ti分别覆盖的语句数量之间的比率。被失败测试用例tj和正确测试用例ti共同覆盖的语句越多,Sim(ti,sj)值越大,说明失败测试用例tj和正确测试用例ti在执行轨迹上越相似性。当失败测试用例tj和正确测试用例ti的执行轨迹相同时,Sim(ti,sj)值达到最大值1。
如果正确测试用例与失败测试用例的相似性越大,则共同覆盖的相同语句越多,由于失败测试用例必定覆盖了错误的语句,该正确测试用例在执行过程中也可能覆盖了错误的语句,该正确测试用例执行过的语句是正确语句的可信度将被降低。考虑上述情况,使用如下的公式来计算正确测试用例ti的诊断能力:
P W ( t i , s j ) = &Sigma; t j &Element; T f ( 1 - S i m ( t i , t j ) ) | T f | , t i &Element; T p , c i j &NotEqual; 0
其中,PW(ti,sj)为正确测试用例ti对语句sj的错误诊断能力,sj为目标程序P中的语句,Sim(ti,sj)表示正确测试用例ti与失败测试用例tj之间的相似度,Tf为失败测试用例集合,cij表示语句sj在测试用例ti运行过程中是否被覆盖,如果被覆盖,其值为1,否则为0。
步骤103,根据各个测试用例的覆盖信息和错误诊断能力,计算目标程序中的各个语句的可疑度,并根据各个语句的可疑度定位目标程序中的错误语句。
具体地,可以针对目标程序中的各个语句,分别计算执行各个语句的所有失败测试用例的错误诊断能力之和以及执行各个语句的所有正确测试用例的错误诊断能力之和,并根据所有失败测试用例的错误诊断能力之和所有正确测试用例的错误诊断能力之和计算各个语句的可疑度,根据可疑度对目标程序中的各个语句进行排序,从而确定目标程序中的错误语句。
本实施例根据语句在测试用例集上的覆盖信息和每个测试用例的诊断能力来计算语句的可疑度。测试用例的诊断能力越强,参与测试用例执行的语句对执行结果的影响越大。因此,可以采用以下公式计算执行目标程序中的语句的所有失败测试用例的错误诊断能力之和:
N e f ( s ) = &Sigma; t i &Element; T f F W ( t i , s )
其中,Nef(s)表示执行了语句s的所有失败测试用例的诊断能力之和,FW(ti,s)表示失败测试用例ti对语句s的错误诊断能力,Tf为失败测试用例集合。
此外,可以采用以下公式计算执行目标程序中的语句的所有正确测试用例的错误诊断能力之和:
N e f ( s ) = &Sigma; t i &Element; T p P W ( t i , s )
其中,Nep(s)表示执行了语句s的所有正确测试用例的诊断能力之和,PW(ti,s)为正确测试用例ti对语句s的错误诊断能力,Tp为正确测试用例集合。
进一步地,可采用以下公式计算语句的可疑度:
H ( s ) = N e f ( s ) ( N e p ( s ) + N e f ( s ) )
其中,H(s)为语句s的可疑度,Nef(s)表示执行了语句s的所有失败测试用例的诊断能力之和,Nep(s)表示执行了语句s的所有正确测试用例的诊断能力之和。
在计算每条语句的可疑度后,可以按照语句可疑度大小从高到低对语句进行排序。
例如,测试用例集合包括正确测试用例t1、t2、t4、t5和t7,以及失败测试用例t3和t6,失败测试用例和正确测试用例的错误诊断能力分别如下表1和表2所示:
表1失败测试用例的错误诊断能力
表2正确测试用例的错误诊断能力
s1 s2 s3 s4 s5 s6 s7 s8 s9
t1 0.09 0.09 0.09 0.09 0.09 0 0 0 0.09
t2 0.48 0 0 0 0 0 0 0 0.48
t4 0.09 0.09 0.09 0.09 0.09 0 0 0 0.09
t5 0.48 0 0 0 0 0 0 0 0.48
t7 0.48 0 0 0 0 0 0 0 0.48
Nep 1.62 0.18 0.18 0.18 0.18 0 0 0 1.62
进一步地,目标程序中的各个语句的可疑度以及排序如表3所示:
表3语句的可疑度及排序
语句 s1 s2 s3 s4 s5 s6 s7 s8 s9
可疑度 0.18 1.62 1.62 1.62 1.62 0.27 0.27 0.27 0.18
排序 9 4 4 4 4 7 7 7 9
基于表3的内容,可以对语句s2、s3、s4和s5进行检查,从而定位目标程序中的错误语句。
本发明实施例根据测试用例的覆盖信息和执行结果区分不同测试用例的错误诊断能力,并根据各个测试用例的错误诊断能力计算目标程序中的各个语句的可疑度,进而定位目标程序中的错误语句,能够实现对错误语句的快速定位,减少程序调试的开销。
基于上述定位目标程序中的错误语句的方法,本发明实施例还提供了一种定位目标程序中的错误语句的装置,如图2所示,包括:
获取模块210,用于在目标程序上运行多个测试用例,获取各个测试用例的执行结果和覆盖信息;
第一计算模块220,用于根据各个测试用例的执行结果和覆盖信息,计算各个测试用例的错误诊断能力;
其中,第一计算模块220,包括:
第一计算子模块,用于根据各个测试用例的执行结果和覆盖信息,计算失败测试用例的错误诊断能力;
第二计算子模块,用于根据各个测试用例的执行结果和覆盖信息,计算正确测试用例的错误诊断能力。
本实施例中,测试用例的覆盖信息包括所述测试用例的语句覆盖信息和数据块覆盖信息。
相应地,上述第一计算子模块,具体用于根据所述失败测试用例的基本块覆盖信息和语句覆盖信息,分别计算所述失败测试用例的第一错误诊断因子和第二错误诊断因子,并根据所述第一错误诊断因子和所述第二错误诊断因子计算所述失败测试用例的错误诊断能力。
上述第二计算子模块,具体用于计算所述正确测试用例与失败测试用例之间的相似度,并根据所述相似度计算所述正确测试用例的错误诊断能力。
第二计算模块230,用于根据各个测试用例的覆盖信息和错误诊断能力,计算所述目标程序中的各个语句的可疑度;
具体地,上述第二计算模块230,具体用于针对所述目标程序中的各个语句,分别计算执行各个语句的所有失败测试用例的错误诊断能力之和以及执行各个语句的所有正确测试用例的错误诊断能力之和,并根据所述所有失败测试用例的错误诊断能力之和所述所有正确测试用例的错误诊断能力之和计算各个语句的可疑度。
定位模块240,用于根据各个语句的可疑度定位所述目标程序中的错误语句。
本发明实施例根据测试用例的覆盖信息和执行结果区分不同测试用例的错误诊断能力,并根据各个测试用例的错误诊断能力计算目标程序中的各个语句的可疑度,进而定位目标程序中的错误语句,能够实现对错误语句的快速定位,减少程序调试的开销。
结合本文中所公开的实施例描述的方法中的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

Claims (10)

1.一种定位目标程序中的错误语句的方法,其特征在于,包括以下步骤:
在目标程序上运行多个测试用例,获取各个测试用例的执行结果和覆盖信息;
根据各个测试用例的执行结果和覆盖信息,计算各个测试用例的错误诊断能力;
根据各个测试用例的覆盖信息和错误诊断能力,计算所述目标程序中的各个语句的可疑度,并根据各个语句的可疑度定位所述目标程序中的错误语句。
2.如权利要求1所述的方法,其特征在于,所述根据各个测试用例的执行结果和覆盖信息,计算各个测试用例的错误诊断能力,具体为:
根据各个测试用例的执行结果和覆盖信息,分别计算失败测试用例和正确测试用例的错误诊断能力。
3.如权利要求2所述的方法,其特征在于,所述测试用例的覆盖信息包括所述测试用例的语句覆盖信息和数据块覆盖信息;
根据各个测试用例的执行结果和覆盖信息计算失败测试用例的错误诊断能力,具体为:
根据所述失败测试用例的基本块覆盖信息和语句覆盖信息,分别计算所述失败测试用例的第一错误诊断因子和第二错误诊断因子,并根据所述第一错误诊断因子和所述第二错误诊断因子计算所述失败测试用例的错误诊断能力。
4.如权利要求2所述的方法,其特征在于,根据各个测试用例的执行结果和覆盖信息计算正确测试用例的错误诊断能力,具体为:
计算所述正确测试用例与失败测试用例之间的相似度,并根据所述相似度计算所述正确测试用例的错误诊断能力。
5.如权利要求1所述的方法,其特征在于,所述根据各个测试用例的覆盖信息和错误诊断能力,计算所述目标程序中的各个语句的可疑度,具体为:
针对所述目标程序中的各个语句,分别计算执行各个语句的所有失败测试用例的错误诊断能力之和以及执行各个语句的所有正确测试用例的错误诊断能力之和,并根据所述所有失败测试用例的错误诊断能力之和所述所有正确测试用例的错误诊断能力之和计算各个语句的可疑度。
6.一种定位目标程序中的错误语句的装置,其特征在于,包括以下步骤:
获取模块,用于在目标程序上运行多个测试用例,获取各个测试用例的执行结果和覆盖信息;
第一计算模块,用于根据各个测试用例的执行结果和覆盖信息,计算各个测试用例的错误诊断能力;
第二计算模块,用于根据各个测试用例的覆盖信息和错误诊断能力,计算所述目标程序中的各个语句的可疑度;
定位模块,用于根据各个语句的可疑度定位所述目标程序中的错误语句。
7.如权利要求6所述的装置,其特征在于,所述第一计算模块,包括:
第一计算子模块,用于根据各个测试用例的执行结果和覆盖信息,计算失败测试用例的错误诊断能力;
第二计算子模块,用于根据各个测试用例的执行结果和覆盖信息,计算正确测试用例的错误诊断能力。
8.如权利要求7所述的装置,其特征在于,所述测试用例的覆盖信息包括所述测试用例的语句覆盖信息和数据块覆盖信息;
所述第一计算子模块,具体用于根据所述失败测试用例的基本块覆盖信息和语句覆盖信息,分别计算所述失败测试用例的第一错误诊断因子和第二错误诊断因子,并根据所述第一错误诊断因子和所述第二错误诊断因子计算所述失败测试用例的错误诊断能力。
9.如权利要求7所述的装置,其特征在于,
所述第二计算子模块,具体用于计算所述正确测试用例与失败测试用例之间的相似度,并根据所述相似度计算所述正确测试用例的错误诊断能力。
10.如权利要求6所述的装置,其特征在于,
所述第二计算模块,具体用于针对所述目标程序中的各个语句,分别计算执行各个语句的所有失败测试用例的错误诊断能力之和以及执行各个语句的所有正确测试用例的错误诊断能力之和,并根据所述所有失败测试用例的错误诊断能力之和所述所有正确测试用例的错误诊断能力之和计算各个语句的可疑度。
CN201510516012.4A 2015-08-20 2015-08-20 一种定位目标程序中的错误语句的方法和装置 Active CN105159826B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510516012.4A CN105159826B (zh) 2015-08-20 2015-08-20 一种定位目标程序中的错误语句的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510516012.4A CN105159826B (zh) 2015-08-20 2015-08-20 一种定位目标程序中的错误语句的方法和装置

Publications (2)

Publication Number Publication Date
CN105159826A true CN105159826A (zh) 2015-12-16
CN105159826B CN105159826B (zh) 2018-06-15

Family

ID=54800688

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510516012.4A Active CN105159826B (zh) 2015-08-20 2015-08-20 一种定位目标程序中的错误语句的方法和装置

Country Status (1)

Country Link
CN (1) CN105159826B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106886490A (zh) * 2016-12-30 2017-06-23 浙江理工大学 一种基于失效轨迹的程序错误定位方法
CN107577603A (zh) * 2017-08-31 2018-01-12 中国科学院软件研究所 一种基于测试用例构建决策树的程序条件语句自动化修复系统及方法
CN109857675A (zh) * 2019-02-28 2019-06-07 福建师范大学 一种利用语句类型的程序错误定位方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101866316A (zh) * 2010-06-23 2010-10-20 南京大学 一种基于相对冗余测试集约简的软件缺陷定位方法
CN101901185A (zh) * 2010-06-01 2010-12-01 南京大学 一种按类组织执行轨迹的面向对象程序缺陷定位方法
US20130055027A1 (en) * 2011-08-25 2013-02-28 Electronics And Telecommunications Research Institute Low cost error-based program testing apparatus and method

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101901185A (zh) * 2010-06-01 2010-12-01 南京大学 一种按类组织执行轨迹的面向对象程序缺陷定位方法
CN101866316A (zh) * 2010-06-23 2010-10-20 南京大学 一种基于相对冗余测试集约简的软件缺陷定位方法
US20130055027A1 (en) * 2011-08-25 2013-02-28 Electronics And Telecommunications Research Institute Low cost error-based program testing apparatus and method

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
王新平 等: "基于执行轨迹的软件缺陷定位方法研究", 《计算机科学》 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106886490A (zh) * 2016-12-30 2017-06-23 浙江理工大学 一种基于失效轨迹的程序错误定位方法
CN106886490B (zh) * 2016-12-30 2019-09-20 浙江理工大学 一种基于失效轨迹的程序错误定位方法
CN107577603A (zh) * 2017-08-31 2018-01-12 中国科学院软件研究所 一种基于测试用例构建决策树的程序条件语句自动化修复系统及方法
CN107577603B (zh) * 2017-08-31 2019-11-12 中国科学院软件研究所 一种基于测试用例构建决策树的程序条件语句自动化修复系统及方法
CN109857675A (zh) * 2019-02-28 2019-06-07 福建师范大学 一种利用语句类型的程序错误定位方法

Also Published As

Publication number Publication date
CN105159826B (zh) 2018-06-15

Similar Documents

Publication Publication Date Title
Perez et al. A test-suite diagnosability metric for spectrum-based fault localization approaches
US20190114436A1 (en) Method for automatically detecting security vulnerability based on hybrid fuzzing, and apparatus thereof
Shang et al. Automated detection of performance regressions using regression models on clustered performance counters
US8397104B2 (en) Creation of test plans
Alves et al. Experimenting machine learning techniques to predict vulnerabilities
Zhang et al. Non-parametric statistical fault localization
Antinyan et al. Mythical unit test coverage
CN103995780B (zh) 一种基于语句频度统计的程序错误定位方法
CN107798245B (zh) 一种基于组件依赖图的软件安全漏洞预测方法
CN105468517B (zh) 一种基于黑盒测试用例约简的统计错误定位方法
CN105159826A (zh) 一种定位目标程序中的错误语句的方法和装置
CN112346993B (zh) 一种情报分析引擎的测试方法、装置及设备
CN110515826A (zh) 一种基于次数频谱与神经网络算法的软件缺陷定位方法
Neelofar et al. Spectral‐based fault localization using hyperbolic function
CN104317707A (zh) 一种基于程序结构影响感知的软件错误定位方法
CN104679655A (zh) 基于参数相关性的软件系统状态评估方法
CN115659335A (zh) 基于混合模糊测试的区块链智能合约漏洞检测方法及装置
CN104536882A (zh) 基于频繁子图挖掘的错误定位方法
CN107291622B (zh) C25汇编代码静态分析方法
Zhang et al. Is non-parametric hypothesis testing model robust for statistical fault localization?
Yang et al. Silent Compiler Bug De-duplication via Three-Dimensional Analysis
CN111400695A (zh) 一种设备指纹生成方法、装置、设备和介质
KR20050061358A (ko) 네트워크 진단 방법, 네트워크 진단을 수행하는 코드를포함하는 컴퓨터 판독 가능 매체 및 시스템
CN111382052A (zh) 代码质量评价方法、装置及电子设备
CN106776264B (zh) 应用程序代码的测试方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant