CN104932975A - 一种测试用例选择方法和装置 - Google Patents

一种测试用例选择方法和装置 Download PDF

Info

Publication number
CN104932975A
CN104932975A CN201510282695.1A CN201510282695A CN104932975A CN 104932975 A CN104932975 A CN 104932975A CN 201510282695 A CN201510282695 A CN 201510282695A CN 104932975 A CN104932975 A CN 104932975A
Authority
CN
China
Prior art keywords
test case
test
current
mrow
group
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
CN201510282695.1A
Other languages
English (en)
Other versions
CN104932975B (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 CN201510282695.1A priority Critical patent/CN104932975B/zh
Publication of CN104932975A publication Critical patent/CN104932975A/zh
Application granted granted Critical
Publication of CN104932975B publication Critical patent/CN104932975B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种测试用例选择方法和装置。本实施例提供的测试用例选择方法包括:通过第一测试用例集中每个测试用例运行程序,获取第一测试用例集中每个测试用例对应于程序中每条语句的覆盖信息,其中,第一测试用例集包括至少一个失败测试用例和第二测试用例集;根据第一测试用例集中每个测试用例的覆盖信息,将第二测试用例集中的部分测试用例添加到第三测试用例集中;通过已添加的第三测试用例集中的每个测试用例定位出程序中错误的语句,以计算出程序中每条语句的可疑度。本实施例提供的测试用例选择方法,解决了现有技术在进行错误定位时,由于需要预先获取所有测试用例的执行结果,从而导致通过错误定位的效率较低的问题。

Description

一种测试用例选择方法和装置
技术领域
本发明涉及计算机测试技术,尤指一种测试用例选择方法和装置。
背景技术
随着计算机技术的发展,计算机程序作为其中一项重要的发展内容,对计算机程序进行错误定位为测该程序的主要方式。为了产生较好的错误定位效果,目前通常使用的错误定位技术需要覆盖度很高的测试用例集作为输入,需要收集每个测试用例的覆盖信息和执行结果,两者缺一不可。
然而,在一些程序失效的测试场景下,并没有大量已知执行结果的测试用例可以用来进行错误定位,例如处于开发过程中的计算机程序。在这种情况下,已知执行结果的测试用例的数量通常非常少,将这些少量的已知执行结果测试用例用于错误定位时,无法准确定位出程序的错误语句。在上述场景中场景,测试用例的覆盖信息可以通过插桩的方法自动收集,但是这些测试用例的执行结果是未知的,需要通过进一步的判断以获取执行结果;例如可以通过运行所有测试用例来判断执行结果是否正确,即判断所有测试用例的执行结果是否与预期相符合;再例如,还可以通过构造自动化的测试预言来判断所有测试用例的执行结果的判定。
显然地,现有技术在进行错误定位时,由于需要预先获取所有测试用例的执行结果,从而导致通过错误定位的效率较低的问题。
发明内容
为了解决上述技术问题,本发明提供了一种测试用例选择方法和装置,以解决现有技术在进行错误定位时,由于需要预先获取所有测试用例的执行结果,从而导致通过错误定位的效率较低的问题。
第一方面,本发明提供的一种测试用例选择方法,包括:
通过第一测试用例集中每个测试用例运行程序,获取所述第一测试用例集中每个测试用例对应于程序中每条语句的覆盖信息,其中,所述第一测试用例集包括至少一个失败测试用例和第二测试用例集;
根据所述第一测试用例集中每个测试用例的覆盖信息,将所述第二测试用例集中的部分所述测试用例添加到第三测试用例集中;
通过已添加的第三测试用例集中的每个测试用例定位出所述程序中错误的语句,以计算出所述程序中每条语句的可疑度。
在第一方面的第一种可能的实现方式中,所述第三测试用例集的初始值包括所述至少一个失败测试用例,所述根据所述第一测试用例集中每个测试用例的覆盖信息,将所述第二测试用例集中的部分所述测试用例添加到第三测试用例集中之前,还包括:
根据所述第一测试用例集中每个测试用例的覆盖信息将所述程序的语句划分为动态基本块DBB,所述动态DBB中的语句具有相同覆盖信息;
根据当前第三测试用例集中每个测试用例的覆盖信息,生成所述动态DBB的当前最大分组集合,所述当前最大分组集合中的最大分组包括一个或多个所述动态DBB,所述当前最大分组集合中的每个最大分组被所述当前第三测试用例集中相同的测试用例覆盖;
根据所述第一测试用例集中每个测试用例的覆盖信息,将所述第二测试用例集中的部分所述测试用例添加到第三测试用例集中,包括:
从当前第二测试用例集中选择将当前分组集合中的分组划分为第一分组和第二分组的测试用例,所述已选择的测试用例对所述第一分组和所述第二分组具有不同的覆盖信息,所述当前分组集合中的分组包括一个或多个所述动态DBB,分组集合的初始值为通过所述第三测试用例集的初始值生成的最大分组集合;
获取所述已选择的测试用例的执行结果,并将所述已选择的测试用例添加到所述当前第三测试用例集中;
当所述当前分组集合中的每个分组均不能被所述当前第二测试用例集中测试用例划分时,判断所述当前分组集合与通过所述当前第三测试用例集生成的最大分组集合是否相同;
若不同,则将所述当前分组集合中的分组进行合并以形成最大分组,从而根据所述第一测试用例集中每个测试用例的覆盖信息,继续执行将所述第二测试用例集中的部分所述测试用例添加到第三测试用例集的操作,其中,所述合并的分组为所述当前分组集合中被相同数量的正确测试用例和相同数量的失败测试用例覆盖的分组;
若相同,则完成所述第三测试用例集的添加操作。
根据第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述从当前第二测试用例集中选择将当前分组集合中的分组划分为第一分组和第二分组的测试用例,包括:
从所述当前第二测试用例集中选择将所述分组均匀的划分为所述第一分组和所述第二分组的测试用例。
根据第一方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中,从所述当前第二测试用例集中选择的测试用例满足以下条件:
arg max t ∈ T g { Σ i = 1 | G ( T r ) | S ( g i ) * Split ( t , g i ) } , 其中,Split(t,gi)=min(|gi1|,|gi2|)
其中,S(gi)表示被所述已选择的测试用例t覆盖的分组gi中包含错误语句的程度,|G(Tr)|表示根据所述当前第三测试用例集Tr形成的分组的数量,Split(t,gi)表示所述已选择的测试用例t将所述分组gi划分为所述第一分组gi1和所述第二分组gi2中较小的一个包含的动态DBB的数量。
第二方面,本发明提供的一种测试用例选择装置,包括:
获取模块,用于通过第一测试用例集中每个测试用例运行程序,获取所述第一测试用例集中每个测试用例对应于程序中每条语句的覆盖信息,其中,所述第一测试用例集包括至少一个失败测试用例和第二测试用例集;
添加模块,用于根据所述获取模块获取的第一测试用例集中每个测试用例的覆盖信息,将所述第二测试用例集中的部分所述测试用例添加到第三测试用例集中;
错误定位模块,用于通过所述添加模块添加的第三测试用例集中的每个测试用例定位出所述程序中错误的语句,以计算出所述程序中每条语句的可疑度。
在第二方面的第一种可能的实现方式中,所述第三测试用例集的初始值包括所述至少一个失败测试用例,所述装置还包括:第一生成模块,用于在所述添加模块根据所述获取模块获取的第一测试用例集中每个测试用例的覆盖信息,将所述第二测试用例集中的部分所述测试用例添加到第三测试用例集中之前,根据所述获取模块获取的第一测试用例集中每个测试用例的覆盖信息将所述程序的语句划分为动态基本块DBB,所述动态DBB中的语句具有相同覆盖信息;
第二生成模块,用于根据当前第三测试用例集中每个测试用例的覆盖信息,生成所述动态DBB的当前最大分组集合,所述当前最大分组集合中的最大分组包括一个或多个所述动态DBB,所述当前最大分组集合中的每个最大分组被所述当前第三测试用例集中相同的测试用例覆盖;
则添加模块,包括:选择单元,用于从当前第二测试用例集中选择将当前分组集合中的分组划分为第一分组和第二分组的测试用例,所述已选择的测试用例对所述第一分组和所述第二分组具有不同的覆盖信息,所述当前分组集合中的分组包括一个或多个所述动态DBB,分组集合的初始值为通过所述第三测试用例集的初始值生成的最大分组集合;
添加单元,用于获取所述选择单元已选择的测试用例的执行结果,并将所述已选择的测试用例添加到所述当前第三测试用例集中;
判断单元,用于当所述当前分组集合中的每个分组均不能被所述当前第二测试用例集中测试用例划分时,判断所述当前分组集合与通过所述当前第三测试用例集生成的最大分组集合是否相同;
则所述添加单元,还用于在所述判断单元的判断结果为不同时,将所述当前分组集合中的分组进行合并以形成最大分组,从而根据所述第一测试用例集中每个测试用例的覆盖信息,继续执行将所述第二测试用例集中的部分所述测试用例添加到第三测试用例集的操作,其中,所述合并的分组为所述当前分组集合中被相同数量的正确测试用例和相同数量的失败测试用例覆盖的分组;或者,
所述添加单元,还用于在所述判断单元的判断结果为相同时,完成所述第三测试用例集的添加操作。
根据第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述选择单元,具体用于从所述当前第二测试用例集中选择将所述分组均匀的划分为所述第一分组和所述第二分组的测试用例。
根据第二方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中,所述选择单元从所述当前第二测试用例集中选择的测试用例满足以下条件:
arg max t ∈ T g { Σ i = 1 | G ( T r ) | S ( g i ) * Split ( t , g i ) } , 其中,Split(t,gi)=min(|gi1|,|gi2|)
其中,S(gi)表示被所述已选择的测试用例t覆盖的分组gi中包含错误语句的程度,|G(Tr)|表示根据所述当前第三测试用例集Tr形成的分组的数量,Split(t,gi)表示所述已选择的测试用例t将所述分组gi划分为所述第一分组gi1和所述第二分组gi2中较小的一个包含的动态DBB的数量。
本发明提供的测试用例选择方法和装置,通过第一测试用例集中每个测试用例运行程序,获取该第一测试用例集中每个测试用例对应于程序语句的覆盖信息,该第一测试用例集包括至少一个失败测试用例和第二测试用例集,从而根据获取的覆盖信息从第二测试用例集中选择部分测试用例添加到第三测试用例集中,进而通过已添加的第三测试用例集中的每个测试用例对程序进行错误定位;本实施例提供的方法通过选择出的测试用例进行错误定位,实现了通过较少的测试用例对程序中的语句进行错误定位,以解决现有技术在进行错误定位时,由于需要预先获取所有测试用例的执行结果,从而导致通过错误定位的效率较低的问题,相应地提高了调试程序的工作效率。
附图说明
附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。
图1为本发明实施例提供的一种测试用例选择方法的流程图;
图2为本发明实施例提供的另一种测试用例选择方法的流程图;
图3为本发明实施例提供的一种测试用例选择装置的结构示意图;
图4为本发明实施例提供的另一种测试用例选择装置的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图1为本发明实施例提供的一种测试用例选择方法的流程图。本实施例提供的测试用例选择方法适用于从大量未知结果的测试用例中选择用于进行错误定位的测试用例,该方法可以由测试用例选择装置执行,该装置通常以硬件和软件的方法来实现,可以集成在终端设备的处理器中,例如集成在处理器芯片的存储单元中,供处理器调用执行。如图1所示,本实施例的方法可以包括:
S110,通过第一测试用例集中每个测试用例运行程序,获取第一测试用例集中每个测试用例对应于程序语句的覆盖信息,该第一测试用例集包括至少一个失败测试用例和第二测试用例集。
在本实施例中,第二测试用例集中的测试用例均为未知结果的测试用例,该些未知结果的测试用例可以由测试用例生成工具生成,目前已经具有可以生成完备的、合理的测试输入的自动化的测试用例生成工具,通过该测试用例生成工具,可以生成大量满足特定覆盖需求的测试输入,如分支覆盖等。在具体实现中,程序员对一个已开发的程序进行错误定位时,首先可以通过现有的测试用例生成工具生成大量的测试输入,以获取具有高覆盖度的测试用例,即程序中的可执行语句均被测试用例覆盖到,通常包括大量未知结果的测试用例;另外,由于程序的调试通常起始于至少一个结果为失败的测试用例,以下简称为失败测试用例,因而在初始时刻已知程序的源代码P和上述至少一个失败测试用例。因此,通过运行上述至少一个失败测试用例和第二测试用例集中的每个测试用例可以获取到第一测试用例集中每个测试用例对应程序语句的覆盖信息。
举例来说,本实施例中将由测试用例生成工具生成的未知执行结果的测试用例集标记为Tg,该Tg就是第二测试用例集,并假设程序P由m个语句构成,可表示为P={s1,s2,…,sm}。运行在程序P上的第一测试用例集表示为T=Tg∪Ts,其中,Ts是上述至少一个失败测试用例的集合;以第一测试用例集T中的测试用例作为输入执行程序P,通过在程序中插桩的方法记录语句的覆盖信息。具体地,在通过第一测试用例集T中的各个测试用例运行程序的每条语句后,可收集到的覆盖信息记为MS,该MS可表示成n×m维矩阵,其中,n为第一测试用例集T中测试用例的数量,矩阵的每一个元素cij表示通过测试用例ti运行程序的过程中,语句sj在是否被覆盖,如果被覆盖,cij的值为1,否则cij的值为0。此时,获取到第一测试用例集T中每个测试用例对应于程序P中每条语句的覆盖信息,然而,上述第二测试用例集Tg中每个测试用例的执行结果是未知的。
S120,根据第一测试用例集中每个测试用例的覆盖信息,将该第二测试用例集中的部分测试用例添加到第三测试用例集中。
现有技术中采用逐条判断上述第二测试用例集Tg中每个测试用例的执行结果的方式,将自动化测试用例生成工具生成的全部测试用例应用于错误定位技术,然而,判断大量测试用例对应的执行结果会产生大量的人力开销或系统开销,不仅会增加程序员的工作量,还会增加检测程序过程中的调试负担,从而降低了使用错误定位方式检测程序的工作效率。
本实施例中,通过上述已获取的覆盖信息MS,从第二测试用例集Tg中选择部分测试用例添加到第三测试用例集中,添加入该第三测试用例集中的测试用例均为需要判断结果的测试用例,将该第三测试用例集标记为Tr,用于表示已知结果的测试用例集。需要说明的是,在执行本实施例中的添加操作之前,该Tr的初始值为Ts,由于Ts中每个测试用例的结果已知,均为失败,因此在未开始进行从第二测试用例集Tg中选择的工作之前,Tr中已存在Ts
S130,通过所述已添加的第三测试用例集中的每个测试用例定位出程序中错误的语句,以计算出所述程序中每条语句的可疑度。
在本实施例中,根据已添加的第三测试用例集Tr中的每个测试用例对程序进行错误定位,即将选择出的少量已知结果的测试用例用于错误定位,该已添加的第三测试用例集Tr包括上述Ts和从Tg中选择的测试用例,并且该Tr中测试用例的数量小于T中测试用例的数量,从而通过Tr中已知结果的测试用例计算程序语句的可疑度,例如可以生成可疑语句的排行,从而程序员可以依据语句可疑度的高低对语句依次进行排查。显然地,在本实施例中,仅需要判断加入第三测试用例集Tr中每个测试用例的执行结果,该判断的方式例如可以为,判断待加入的测试用例的运行结果是否与预期结果一致,如果一致,则将该测试用例标记为正确测试用例,否则标记为失败测试用例;需要说明的是,上述判断和标记的行为可以是通过计算机程序执行的,也可以是由程序员根据预期结果和运行结果判断后自行标记的,本实施例中仅需要获取加入第三测试用例集Tr中的测试用例的执行结果,明显减少了判断测试用例执行结果所花费的时间和精力。
在具体实现中,本本实施例提供的方法可以应用在基于覆盖信息的错误定位技术中,这一类错误定位技术的典型代表有Tarantula、Ochiai等。当采用某一种错误定位技术后,以选择的第三测试用例集Tr作为输入,就可得到程序中每个可执行语句的排行,程序员可依此排行进行调试活动。
本实施例提供的测试用例选择方法,通过第一测试用例集中每个测试用例运行程序,获取该第一测试用例集中每个测试用例对应于程序语句的覆盖信息,该第一测试用例集包括至少一个失败测试用例和第二测试用例集,从而根据获取的覆盖信息从第二测试用例集中选择部分测试用例添加到第三测试用例集中,进而通过已添加的第三测试用例集中的每个测试用例对程序进行错误定位;本实施例提供的方法通过选择出的测试用例进行错误定位,实现了通过较少的测试用例对程序中的语句进行错误定位,以解决现有技术在进行错误定位时,由于需要预先获取所有测试用例的执行结果,从而导致通过错误定位的效率较低的问题,相应地提高了调试程序的工作效率。
图2为本发明实施例提供的另一种测试用例选择方法的流程图。在上述图1所示实施例的基础上,S120之前还包括:
S111,根据第一测试用例集中每个测试用例的覆盖信息将程序的语句划分为动态基本块(Dynamic Basic Block,简称为:DBB),该动态DBB中的语句具有相同覆盖信息。
本实施例中的动态DBB是根据第一测试用例集T中每个测试用例的覆盖信息划分的,即该动态DBB是基于测试用例的覆盖信息划分出的,不同于现有技术中的DBB,是基于程序结构划分的。由于在程序中存在着一些不可被任何测试用例区分开来的语句,对于已经收集到语句覆盖信息的测试用例集来说,程序中的一些语句总是被同样的测试用例执行,即这些语句具有相同的覆盖信息,本实施例中以动态DBB表示上述具有相同覆盖信息的语句;即动态DBB的定义为:假设有程序P和测试用例集To,程序P中的一些语句集合满足如下的两个条件时,这些语句集合即为一个动态DBB,(1)、这些语句都被To中相同的测试用例覆盖;(2)、如果k是动态DBB中的一条语句,而h不是集合DBB中的语句,那么To中至少存在一个测试用例tx,在通过该测试用例tx运行程序时候只覆盖语句k和h中的一条。
以下通过一个具体实例对本实施例所提出的动态DBB,以及后续提出的分组和最大分组的概念予以说明。如下表1所示,为通过图1或图2所示实施例获取的对应于pow程序(程序的名称)中每条语句的覆盖信息。
表1
如表1所示,t1为结果为失败的测试用例,即为Ts中的元素,表1所示实例的Ts中仅由一个元素,即t1;t2~t5均为第二测试用例集Tg中的元素,该pow程序具体为一个指数运算程序,用于计算x的y次方,表1的右侧列出了运行在pow程序上的第一测试用例集T,共有5个测试用例,每个测试用例对应的输入显示在该测试用例名称下,每个测试用例对应于程序中每条语句的覆盖信息的情况分别用“●”和“空白”表示,如果测试用例在程序执行过程中覆盖了对应的语句,则在相应的表格位置标记上“●”,否则相应的表格位置为空白,测试用例的执行结果显示在表格的最后一行,符号P和F分别表示测试用例执行结果为正确和失败,初始时刻,仅获取测试用例t1的执行结果为失败,其它测试用例均为未知结果的测试用例。在本实施例中,可以根据表1所示的覆盖信息将pow程序中的语句划分为动态DBB,如下表2所示,为通过图2所示实施例将表1所示pow程序的语句划分出的动态DBB。
表2
动态DBB t1 t2 t3 t4 t5
b1{1,2,3,6,9,11}
b2{4,10}
b3{5}
b4{7,8}
如表2所示,每个动态DBB中的所有语句具有相同覆盖信息,请结合表1,例如b2中的语句4和10,均被t1、t2和t3所覆盖,并且未被t4和t5所覆盖。
需要说明的是,由于现有技术中的DBB很难对程序中语句的被执行情况进行区分,也就是无法通过测试用例的覆盖信息划分DBB,现有技术中的DBB仅能代表程序中一段顺序执行的语句序列,其中只有一个入口和一个出口,入口就是DBB的第一条语句,出口就是DBB的最后一条语句,即仅能体现出程序的结构,若采用该DBB来表示测试用例的覆盖信息,会产生偏差。因此,本实施例中提出了动态DBB的概念,以该动态DBB作为基本单位来表示测试用例的覆盖信息。
S112,根据当前第三测试用例集中每个测试用例的覆盖信息,生成动态DBB的当前最大分组集合,该当前最大分组集合中的最大分组包括一个或多个动态DBB,该当前最大分组集合中的每个最大分组被当前第三测试用例集中相同的测试用例覆盖。
在通过覆盖信息划分动态DBB的实际情况中,如果两条语句被同等数量的失败测试用例和同等数量的正确测试用例覆盖,那么难以通过上述覆盖信息将这两条语句区分开来;针对上述情况,为了进一步地刻画测试用例的覆盖信息对程序语句的划分能力,本实施例通过分组和最大分组的概念来描述动态DBB在第三测试用例集Tr上的不可区分性。
具体地,定义动态DBB集合为分组,以g表示,分组g需要满足以下条件:(1)、分组g是DBB(Tr)的一个非空子集,DBB(Tr)为通过Tr形成的DBB集合;(2)、记f(b)表示第三测试用例集Tr中覆盖了动态DBB的失败测试用例的数量,p(b)表示第三测试用例集Tr中覆盖了动态DBB的正确测试用例的数量,则对于分组g中的任意两个动态DBB,例如u和v,满足f(u)=f(v)且p(u)=p(v)。
上述分组的集合以G(Tr)表示,若该G(Tr)中的一个分组g满足以下条件,则g为该分组集合G(Tr)中的最大分组;条件为:对于G(Tr)的任意一个分组g',若g'≠g,则对于分组g中的任一个动态DBB,例如为u,以及g'中的任一个动态DBB,例如为v,需要满足:f(u)≠f(v)或p(u)≠p(v);并且以最大分组形成的集合为最大分组集合,记为DG(Tr)。
也就是说,对于分组g1和g2,被同等数量的失败测试用例和同等数量的正确测试用例覆盖,该g1和g2可以为两个独立的分组,但是也可以为一个最大分组(g1,g2)。
在通过覆盖信息获取了上述动态DBB后,可以生成通过Tr形成的最大分组集合,在初始时刻,Tr为Ts,同样以表1所示pow程序为例予以说明,Tr中仅有一个已知执行结果的测试用例t1,即Ts中仅包括元素t1,t1覆盖的动态DBB包括:b1,b2和b4,即b1,b2和b4形成一个最大分组,同时,b3也形成了一个最大分组,因此,通过Tr={t1}形成的最大分组集合具体为:DG(Tr)=G(Tr)={(b1,b2,b4),(b3)}。
在本实施例中,在获取通过Tr={t1}形成的最大分组集合后,进行将第二测试用例集Tg中的部分测试用例添加到第三测试用例集Tr中的操作,即S120包括:
S121,从当前第二测试用例集中选择将当前分组集合中的分组划分为第一分组和第二分组的测试用例,该已选择的测试用例对所述第一分组和所述第二分组具有不同的覆盖信息,该当前分组集合中的分组包括一个或多个动态DBB,该当前分组集合的初始值为通过第三测试用例集的初始值生成的最大分组集合。
本实施例在具体实现中,首次对分组集合中的分组进行划分,在初始时刻,实际上是对通过Tr=Ts形成的最大分组集合中的最大分组进行划分,如果第二测试用例集Tg中的一条测试用例t只覆盖了分组g中部分的动态DBB,依据分组的定义,测试用例t将分组g划分为两个分组,例如为第一分组g1和第二分组g2
可选地,从第二测试用例集Tg中选择可以划分分组g的测试用例时,优先可以均匀划分分组g的测试用例,因为若测试用例划分分组g后产生的第一分组g1和第二分组g2的大小相同或比较接近,那么第一分组g1和第二分组g2再进行划分时,则使用的测试用例是较少的。
在具体实现中,设定当前的分组集合G(Tr)包括的分组可以表示为{g1,g2,…gu},当考虑从第二测试用例集Tg中选择一个测试用例t加入第三测试用例集Tr时,t可以满足以下条件:
arg max t ∈ T g { Σ i = 1 | G ( T r ) | S ( g i ) * Split ( t , g i ) } , 其中,Split(t,gi)=min(|gi1|,|gi2|)    (1)
上述(1)式中的S(gi)表示被已选择的测试用例t覆盖的分组gi中包含错误语句的程度,|G(Tr)|表示根据当前第三测试用例集Tr形成的分组的数量。
上述(1)式中S(gi)的具体计算方式为:
S ( g i ) = a ef ( g i ) - a ep ( g i ) a ep ( g i ) + a np ( g i ) + 1 - - - ( 2 )
其中,上述(2)式中的aep(gi)表示gi被Tr中正确测试用例覆盖的数量,aef(gi)表示gi被Tr中失败测试用例覆盖的数量,anp(gi)表示gi未被Tr中正确测试用例覆盖的数量。
需要说明的是,(1)式中的Split(t,gi)表示测试用例t对分组gi划分产生的第一分组gi1和第二分组gi2中较小的一个包含动态DBB的数量;如果测试用例t没有对gi产生划分,则Split(t,gi)为0,并且Split(t,gi)优先考虑可以对gi尽可能产生均匀划分的测试用例t,即划分后产生两个包含动态DBB数量尽可能接近的第一分组gi1和第二分组gi2
S122,获取已选择的测试用例的执行结果,并将已选择的测试用例添加到当前第三测试用例集中。
在本实施例中,S121中选择的测试用例通常够对潜在包含错误语句的分组进行划分,对于选择添加到第三测试用例集Tr中的测试用例,为后续进行错误定位时需要使用的测试用例,因此,需要获取已选择的测试用例的执行结果,从而满足错误定位的条件。
进一步地,若从第二测试用例集Tg中选择一些加入第三测试用例集Tr中的测试用例,此时,当前分组集合中的每个分组均不能被当前第二测试用例集中Tg测试用例划分,然而,可能存在上述情况,即分组集合中的一些分组可能被相同数量的失败测试用例和相同数量的正确测试用例覆盖,这些分组内的动态DBB不可被区分,而当前的第二测试用例集Tg中仍可能存在一些测试用例只覆盖了这些分组集合中的一部分分组,即可能需要继续从而当前第二测试用例集Tg中选择用于进行错误定位的测试用例,则本实施例提供的方法,S120中还包括:
S123,在当前分组集合中的每个分组均不能被当前第二测试用例集中测试用例划分时,判断当前分组集合与通过当前第三测试用例集生成的最大分组集合是否相同;若不同,则执行S124,若相同,则执行S125。需要说明的是,S123中执行判断时用于与当前分组集合对比的最大分组集合为,通过S112获取的当前第三测试用例集生成的最大分组集合,并且此时的第三测试用例集为执行S122后已添加的第三测试用例集。
S124,将当前分组集合中的分组进行合并以形成最大分组,其中,合并的分组为当前分组集合中被相同数量的正确测试用例和相同数量的失败测试用例覆盖的分组。在合并后,根据第一测试用例集中每个测试用例的覆盖信息,继续执行将第二测试用例集中的部分测试用例添加到第三测试用例集的操作,即执行S124之后,返回S121继续执行。
S125,完成第三测试用例集的添加操作。
在本实施例中,在当前分组集合中的每个分组均不能被当前第二测试用例集中测试用例划分时,需要进一步通过当前已选择的第三测试用例集Tr生成的最大分组集合与此时经过多次划分后的分组集合是否相同,若不同,则说明第二测试用例集Tg中可能存在一些测试用例只覆盖了当前分组集合中的部分分组,因此需要考虑将这些测试用例选择加入第三测试用例集Tr中,若相同,则说明当前分组集合已不能再被划分,即当前第三测试用例集Tr为最终需要选择的第三测试用例集。
同样以上述表1所示pow程序和上述表2所示对pow程序划分的动态DBB为例,说明本实施例中分组的划分方式,在通过初始Tr={t1}形成的最大分组集合DG(Tr)=G(Tr)={(b1,b2,b4),(b3)}后,开始选择需要添入第三测试用例集Tr中的测试用例,例如,先选择测试用例t2,通过判断将测试用例t2的执行结果将其标记为失败测试用例,用测试用例t2进行测试,b4的覆盖信息不同,因此b4从最大分组(b1,b2,b4)中划分被分出,此时,Tr={t1,t2},G(Tr)={(b1,b2),(b3),(b4)};随后,本实例中选择了测试用例t4,继续对测试用例t4的执行结果标记完后,Tr={t1,t2,t4},此时G(Tr)={(b1),(b2),(b3),(b4)}。由于第二测试用例集Tg中的任一测试用例均不能再对G(Tr)中的分组进行划分,并且|G(Tr)|=|DG(Tr)|,因而测试用例的选择过程完成,即最终选择的第三测试用例集为:Tr={t1,t2,t4}。需要说明的是,选择测试用例t4时若选用测试用例t5可以实现相同的效果。
在获取已选择的第三测试用例集Tr后,可以将该已选择的第三测试用例集Tr用于错误定位,采用错误定位技术Ochiai计算语句可疑度,可以得到各个语句的可疑度排名,如表3所示,为通过图2所示实施例生成的pow程序的语句可疑度值及其排行;可以看到,语句s4和s10的可疑度排行为2,排行时若存在几个结果相同的语句,均取最坏的结果,由于s4和s10的可疑度相同,说明最多只需检查两条语句就能够发现错误代码,而在测试用例选择过程中也只需检查2条测试用例的执行结果。
表3
语句编号 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11
可疑度值 0.50 0.50 0.50 1.00 0.00 0.50 0.33 0.33 0.50 1.00 0.50
排行 8 8 8 2 11 8 10 10 8 2 8
需要说明的是,对上述表1所示pow程序生成的最大分组集合进行划分中,在完成划分后,对分组集合划分的结果为,每个动态DBB为一个分组,并且无法对分组合并进行划分,也就是说,通过Tr={t1,t2,t4}形成的最大分组集合D(Tr)=G(Tr)={(b1),(b2),(b3),(b4)},因此,Tr={t1,t2,t4}为最终选择的第三测试用例集合,无需再对分组集合中的分组进行合并后继续选择测试用例。
以下通过一段具体的代码说明图2所示实施例的执行过程,如表4所示,为图2所示实施例的算法过程。
表4
算法的输入是失败测试用例集Ts和大量执行结果未知的第二测试用例集Tg及其语句覆盖信息MS,输出是用于错误定位的第三测试用例集Tr。算法主要包含如下主要的步骤:
(1)、算法1~4行首先将初始失败测试用例Ts加入Tr,同时根据第一测试用例集T=Tg∪Ts的覆盖信息生成动态DBB,即DBB(T),对应表2中的横向,动态DBB被测试用例覆盖的信息,并以动态DBB为单位表示测试用例,对应表2中的纵向,测试用例被动态DBB覆盖的信息。
(2)、算法6行首先生成初始第二测试用例集Tr=Ts时的最大分组集合DG(Tr),接着用该最大分组集合作为当前的分组集合G(Tr)。
(3)、算法7~16行迭代从Tg中选择测试用例加入Tr;具体地,11~12行判断当前选择的测试用例是否对当前分组集合中的分组进行了划分,如果没有产生划分,则停止测试用例的选择过程,否则对选择的测试用例标记执行结果后,将该测试用例加入Tr,并重复再次选择新的测试用例。
(4)、上述已经说明,当分组集合G(Tr)中的每个分组不可再被划分时,由于G(Tr)中的一些分组可能被相同数量的失败测试用例和相同数量的正确测试用例覆盖,这些分组内的动态DBB不可被区分,而当前Tg仍可能存在一些测试用例只覆盖了这些分组集合中的部分分组,因而算法的下一步也考虑将这些测试用例选择加入到Tr中,即算法的17~19行,首先可以根据当前Tr获取当前最大分组集合,从而判断当前分组集合与获取的当前最大分组集合是否相同,若不相同,可以将当前分组集合中的分组进行合并,这里的分组合并是指将分组集合中被相同数量的正确和相同数量的失败测试用例覆盖的分组合并到同一个分组中以形成最大分组;若判断为相同的,则说明当前的分组集合已不能再被测试用例划分,算法收敛,返回已选择的第三测试用例集Tr。需要说明的是,算法判断不相同后的执行方式为跳至第6行重新对最大分组集合再进行划分。
本发明上述实施例通过提出基于覆盖信息的动态DBB、以及分组和最大分组的划分方式,可以将程序中的各语句以动态DBB和分组进行划分,并通过对分组的划分进一步对通过现有技术中难以区分开的语句进行划分,以实现通过少量的测试用例,即可以进行高效的错误定位效果,同时可以保证错误定位的准确性。
图3为本发明实施例提供的一种测试用例选择装置的结构示意图。本实施例提供的测试用例选择装置适用于从大量未知结果的测试用例中选择用于进行错误定位的测试用例,该装置通常以硬件和软件的方式来实现,可以集成在终端设备的处理器中,例如集成在处理器芯片的存储单元中,供处理器调用执行。如图3所示,本实施例的测试用例选择装置具体包括:获取模块11、添加模块12和错误定位模块13。
其中,获取模块11,用于通过第一测试用例集中每个测试用例运行程序,获取第一测试用例集中每个测试用例对应于程序中每条语句的覆盖信息,其中,第一测试用例集包括至少一个失败测试用例和第二测试用例集。
添加模块12,用于根据获取模块11获取的第一测试用例集中每个测试用例的覆盖信息,将第二测试用例集中的部分测试用例添加到第三测试用例集中。
在本实施例中,第二测试用例集中包括的各测试用例均为未知结果的测试用例,第三测试用例集的初始值同样仅包括上述至少一个失败测试用例。
错误定位模块13,用于通过添加模块12添加的第三测试用例集中的每个测试用例定位出程序中错误的语句,以计算出程序中每条语句的可疑度。
本发明实施例提供的测试用例选择装置用于执行本发明图1所示实施例提供的测试用例选择方法,具备相应的功能模块,其实现原理和技术效果类似,此处不再赘述。
图4为本发明实施例提供的另一种测试用例选择装置的结构示意图,在上述图3所示实施例的基础上,本实施例提供的装置还包括:第一生成模块14,用于在添加模块12根据获取模块11获取的第一测试用例集中每个测试用例的覆盖信息,将第二测试用例集中的部分测试用例添加到第三测试用例集中之前,根据获取模块11获取的第一测试用例集中每个测试用例的覆盖信息将程序的语句划分为动态DBB,动态DBB中的语句具有相同覆盖信息;第二生成模块15,用于根据当前第三测试用例集中每个测试用例的覆盖信息,生成动态DBB的当前最大分组集合,当前最大分组集合中的最大分组包括一个或多个动态DBB,当前最大分组集合中的每个最大分组被当前第三测试用例集中相同的测试用例覆盖。
相应地,本实施例中的添加模块12可以包括:选择单元16,用于从当前第二测试用例集中选择将当前分组集合中的分组划分为第一分组和第二分组的测试用例,该已选择的测试用例对第一分组和第二分组具有不同的覆盖信息,当前分组集合中的分组包括一个或多个动态DBB;添加单元17,用于获取选择单元16已选择的测试用例的执行结果,并将已选择的测试用例添加到当前第三测试用例集中。需要说明的是,本实施例在首次对当前分组集合中的分组进行划分时,划分的对象,也就是待划分的当前分组集合为通过第三测试用例集的初始值生成的最大分组集合。
可选地,本实施例中的选择单元16,具体用于从当前第二测试用例集中选择将分组集合中的分组均匀的划分为第一分组和第二分组的测试用例。例如同样通过上述(1)式和(2)式对分组进行划分。
进一步地,本实施例在对分组集合中的分组进行划分之后,同样存在分组集合中的一些分组可能被相同数量的失败测试用例和相同数量的正确测试用例覆盖,此时,这些分组内的动态DBB不可被区分,然而,当前的第二测试用例集仍可能存在一些测试用例只覆盖了这些分组集合中的一部分分组,即可能需要继续从而当前第二测试用例集中选择用于进行错误定位的测试用例,因此本实施例提供的装置中,添加模块12还包括:判断单元18,用于在当前分组集合中的每个分组均不能被当前第二测试用例集中测试用例划分时,判断当前分组集合与通过当前第三测试用例集生成的最大分组集合是否相同;相应地,添加单元17,还用于在判断单元18的判断结果为不同时,将当前分组集合中的分组进行合并以形成最大分组,从而根据第一测试用例集中每个测试用例的覆盖信息,继续执行将第二测试用例集中的部分测试用例添加到第三测试用例集的操作,其中,合并的分组为当前分组集合中被相同数量的正确测试用例和相同数量的失败测试用例覆盖的分组;或者,添加单元17,还用于在判断单元18的判断结果为相同时,完成第三测试用例集的添加操作。
本发明实施例提供的测试用例选择装置用于执行本发明图2所示实施例提供的测试用例选择方法,具备相应的功能模块,本实施例中划分动态DBB,生成对应于第三测试用例集的最大分组集合,对分组集合进行划分,以及划分后进行判断以进一步选择测试用例的具体方式和实现的有益效果均与上述实施例相同,故在此不再赘述。
虽然本发明所揭露的实施方式如上,但所述的内容仅为便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式及细节上进行任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。

Claims (8)

1.一种测试用例选择方法,其特征在于,包括:
通过第一测试用例集中每个测试用例运行程序,获取所述第一测试用例集中每个测试用例对应于程序中每条语句的覆盖信息,其中,所述第一测试用例集包括至少一个失败测试用例和第二测试用例集;
根据所述第一测试用例集中每个测试用例的覆盖信息,将所述第二测试用例集中的部分所述测试用例添加到第三测试用例集中;
通过已添加的第三测试用例集中的每个测试用例定位出所述程序中错误的语句,以计算出所述程序中每条语句的可疑度。
2.根据权利要求1所述的测试用例选择方法,其特征在于,所述第三测试用例集的初始值包括所述至少一个失败测试用例,所述根据所述第一测试用例集中每个测试用例的覆盖信息,将所述第二测试用例集中的部分所述测试用例添加到第三测试用例集中之前,还包括:
根据所述第一测试用例集中每个测试用例的覆盖信息将所述程序的语句划分为动态基本块DBB,所述动态DBB中的语句具有相同覆盖信息;
根据当前第三测试用例集中每个测试用例的覆盖信息,生成所述动态DBB的当前最大分组集合,所述当前最大分组集合中的最大分组包括一个或多个所述动态DBB,所述当前最大分组集合中的每个最大分组被所述当前第三测试用例集中相同的测试用例覆盖;
根据所述第一测试用例集中每个测试用例的覆盖信息,将所述第二测试用例集中的部分所述测试用例添加到第三测试用例集中,包括:
从当前第二测试用例集中选择将当前分组集合中的分组划分为第一分组和第二分组的测试用例,所述已选择的测试用例对所述第一分组和所述第二分组具有不同的覆盖信息,所述当前分组集合中的分组包括一个或多个所述动态DBB,分组集合的初始值为通过所述第三测试用例集的初始值生成的最大分组集合;
获取所述已选择的测试用例的执行结果,并将所述已选择的测试用例添加到所述当前第三测试用例集中;
在所述当前分组集合中的每个分组均不能被所述当前第二测试用例集中测试用例划分时,判断所述当前分组集合与通过所述当前第三测试用例集生成的最大分组集合是否相同;
若不同,则将所述当前分组集合中的分组进行合并以形成最大分组,从而根据所述第一测试用例集中每个测试用例的覆盖信息,继续执行将所述第二测试用例集中的部分所述测试用例添加到第三测试用例集的操作,其中,所述合并的分组为所述当前分组集合中被相同数量的正确测试用例和相同数量的失败测试用例覆盖的分组;
若相同,则完成所述第三测试用例集的添加操作。
3.根据权利要求2所述的测试用例选择方法,其特征在于,所述从当前第二测试用例集中选择将当前分组集合中的分组划分为第一分组和第二分组的测试用例,包括:
从所述当前第二测试用例集中选择将所述分组均匀的划分为所述第一分组和所述第二分组的测试用例。
4.根据权利要求2或3所述的测试用例选择方法,其特征在于,从所述当前第二测试用例集中选择的测试用例满足以下条件:
a rg max t ∈ T g { Σ i = 1 | G ( T r ) | S ( g i ) * Split ( t , g i ) } , 其中,Split(t,gi)=min(|gi1|,|gi2|)
其中,S(gi)表示被所述已选择的测试用例t覆盖的分组gi中包含错误语句的程度,|G(Tr)|表示根据所述当前第三测试用例集Tr形成的分组的数量,Split(t,gi)表示所述已选择的测试用例t将所述分组gi划分为所述第一分组gi1和所述第二分组gi2中较小的一个包含的动态DBB的数量。
5.一种测试用例选择装置,其特征在于,包括:
获取模块,用于通过第一测试用例集中每个测试用例运行程序,获取所述第一测试用例集中每个测试用例对应于程序中每条语句的覆盖信息,其中,所述第一测试用例集包括至少一个失败测试用例和第二测试用例集;
添加模块,用于根据所述获取模块获取的第一测试用例集中每个测试用例的覆盖信息,将所述第二测试用例集中的部分所述测试用例添加到第三测试用例集中;
错误定位模块,用于通过所述添加模块添加的第三测试用例集中的每个测试用例定位出所述程序中错误的语句,以计算出所述程序中每条语句的可疑度。
6.根据权利要求5所述的测试用例选择装置,其特征在于,所述第三测试用例集的初始值包括所述至少一个失败测试用例,所述装置还包括:第一生成模块,用于在所述添加模块根据所述获取模块获取的第一测试用例集中每个测试用例的覆盖信息,将所述第二测试用例集中的部分所述测试用例添加到第三测试用例集中之前,根据所述获取模块获取的第一测试用例集中每个测试用例的覆盖信息将所述程序的语句划分为动态基本块DBB,所述动态DBB中的语句具有相同覆盖信息;
第二生成模块,用于根据当前第三测试用例集中每个测试用例的覆盖信息,生成所述动态DBB的当前最大分组集合,所述当前最大分组集合中的最大分组包括一个或多个所述动态DBB,所述当前最大分组集合中的每个最大分组被所述当前第三测试用例集中相同的测试用例覆盖;
则添加模块,包括:选择单元,用于从当前第二测试用例集中选择将当前分组集合中的分组划分为第一分组和第二分组的测试用例,所述已选择的测试用例对所述第一分组和所述第二分组具有不同的覆盖信息,所述当前分组集合中的分组包括一个或多个所述动态DBB,分组集合的初始值为通过所述第三测试用例集的初始值生成的最大分组集合;
添加单元,用于获取所述选择单元已选择的测试用例的执行结果,并将所述已选择的测试用例添加到所述当前第三测试用例集中;
判断单元,用于在所述当前分组集合中的每个分组均不能被所述当前第二测试用例集中测试用例划分时,判断所述当前分组集合与通过所述当前第三测试用例集生成的最大分组集合是否相同;
则所述添加单元,还用于在所述判断单元的判断结果为不同时,将所述当前分组集合中的分组进行合并以形成最大分组,从而根据所述第一测试用例集中每个测试用例的覆盖信息,继续执行将所述第二测试用例集中的部分所述测试用例添加到第三测试用例集的操作,其中,所述合并的分组为所述当前分组集合中被相同数量的正确测试用例和相同数量的失败测试用例覆盖的分组;或者,
所述添加单元,还用于在所述判断单元的判断结果为相同时,完成所述第三测试用例集的添加操作。
7.根据权利要求6所述的测试用例选择装置,其特征在于,所述选择单元,具体用于从所述当前第二测试用例集中选择将所述分组均匀的划分为所述第一分组和所述第二分组的测试用例。
8.根据权利要求6或7所述的测试用例选择装置,其特征在于,所述选择单元从所述当前第二测试用例集中选择的测试用例满足以下条件:
arg max t ∈ T g { Σ i = 1 | G ( T r ) | S ( g i ) * Split ( t , g i ) } , 其中,Split(t,gi)=min(|gi1|,|gi2|)
其中,S(gi)表示被所述已选择的测试用例t覆盖的分组gi中包含错误语句的程度,|G(Tr)|表示根据所述当前第三测试用例集Tr形成的分组的数量,Split(t,gi)表示所述已选择的测试用例t将所述分组gi划分为所述第一分组gi1和所述第二分组gi2中较小的一个包含的动态DBB的数量。
CN201510282695.1A 2015-05-28 2015-05-28 一种测试用例选择方法和装置 Active CN104932975B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510282695.1A CN104932975B (zh) 2015-05-28 2015-05-28 一种测试用例选择方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510282695.1A CN104932975B (zh) 2015-05-28 2015-05-28 一种测试用例选择方法和装置

Publications (2)

Publication Number Publication Date
CN104932975A true CN104932975A (zh) 2015-09-23
CN104932975B CN104932975B (zh) 2018-01-09

Family

ID=54120147

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510282695.1A Active CN104932975B (zh) 2015-05-28 2015-05-28 一种测试用例选择方法和装置

Country Status (1)

Country Link
CN (1) CN104932975B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107992414A (zh) * 2017-11-28 2018-05-04 曲明成 一种基于测试用例获取进程模块间依赖关系的方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6182245B1 (en) * 1998-08-31 2001-01-30 Lsi Logic Corporation Software test case client/server system and method
CN102063374A (zh) * 2011-01-07 2011-05-18 南京大学 一种使用半监督信息进行聚类的回归测试用例选择方法
CN102063376A (zh) * 2011-02-16 2011-05-18 哈尔滨工程大学 一种测试用例选取方法
CN102521131A (zh) * 2011-12-13 2012-06-27 南京大学 一种基于动态基本块的缺陷定位测试用例约简方法
KR20140072726A (ko) * 2012-12-05 2014-06-13 경북대학교 산학협력단 단위 테스트 케이스 재사용 기반의 함수 테스트 장치 및 그 함수 테스트 방법

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6182245B1 (en) * 1998-08-31 2001-01-30 Lsi Logic Corporation Software test case client/server system and method
CN102063374A (zh) * 2011-01-07 2011-05-18 南京大学 一种使用半监督信息进行聚类的回归测试用例选择方法
CN102063376A (zh) * 2011-02-16 2011-05-18 哈尔滨工程大学 一种测试用例选取方法
CN102521131A (zh) * 2011-12-13 2012-06-27 南京大学 一种基于动态基本块的缺陷定位测试用例约简方法
KR20140072726A (ko) * 2012-12-05 2014-06-13 경북대학교 산학협력단 단위 테스트 케이스 재사용 기반의 함수 테스트 장치 및 그 함수 테스트 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107992414A (zh) * 2017-11-28 2018-05-04 曲明成 一种基于测试用例获取进程模块间依赖关系的方法

Also Published As

Publication number Publication date
CN104932975B (zh) 2018-01-09

Similar Documents

Publication Publication Date Title
CN109902002B (zh) 组合测试用例的生成方法及装置、存储介质、计算机设备
US10579349B2 (en) Verification of a dataflow representation of a program through static type-checking
Feyzi et al. Inforence: effective fault localization based on information-theoretic analysis and statistical causal inference
US9396095B2 (en) Software verification
CN110515826A (zh) 一种基于次数频谱与神经网络算法的软件缺陷定位方法
EP3264274A1 (en) Input discovery for unknown program binaries
CN110048901B (zh) 一种电力通信网的故障定位方法、装置及设备
CN102750223A (zh) 一种基于面向对象程序切片谱的错误定位方法
Böhme et al. Characterizing load and communication imbalance in large-scale parallel applications
Zakari et al. A community-based fault isolation approach for effective simultaneous localization of faults
CN104572474A (zh) 一种基于动态切片的轻量级错误定位技术实现方法
CN104536882A (zh) 基于频繁子图挖掘的错误定位方法
CN103019943B (zh) 一种面向失败测试用例稀少情况的软件错误定位方法
US8683494B1 (en) Constructing event sequences in event-driven programs
CN104932975B (zh) 一种测试用例选择方法和装置
CN107102942A (zh) 一种基于输入域错误定位的极小故障定位方法
Dutta et al. Effective fault localization using an ensemble classifier
Landsberg et al. Optimising Spectrum Based Fault Localisation for Single Fault Programs Using Specifications.
Lei et al. Effective fault localization approach using feedback
US20130239093A1 (en) Parallelizing top-down interprocedural analysis
Friedler et al. Effective post-silicon failure localization using dynamic program slicing
Mohapatra et al. Minimizing test cases to reduce the cost of regression testing
Hofer et al. AI for the win: improving spectrum-based fault localization
Haque et al. An automated tool for MC/DC test data generation
Lima et al. Towards decentralized conformance checking in model-based testing of distributed systems

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
GR01 Patent grant