CN101661425B - 测试覆盖分析方法和装置 - Google Patents
测试覆盖分析方法和装置 Download PDFInfo
- Publication number
- CN101661425B CN101661425B CN2008102124465A CN200810212446A CN101661425B CN 101661425 B CN101661425 B CN 101661425B CN 2008102124465 A CN2008102124465 A CN 2008102124465A CN 200810212446 A CN200810212446 A CN 200810212446A CN 101661425 B CN101661425 B CN 101661425B
- Authority
- CN
- China
- Prior art keywords
- function
- program
- tested
- subclauses
- test
- 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
Images
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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
-
- 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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- 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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
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
公开了一种测试覆盖分析方法和相应的装置,该方法包括:通过使用一个或多个测试用例运行被测试程序,生成包含被测试程序的调用栈信息的一个或多个堆转储文件;以及对所述一个或多个堆转储文件中的调用栈信息进行分析,以获得所述一个或多个测试用例对于所述被测试程序中函数的覆盖性信息。
Description
技术领域
本发明涉及计算机领域,具体涉及软件测试领域,更具体涉及一种测试覆盖分析方法和装置。
背景技术
对于大的软件厂商来说,测试用例或测试程序的数量通常是很大的,并且会随着每一个产品版本的升级发布而递增。例如,IBM ContentManager具有在6年多的时间里陆续开发的超过2000个Java函数测试用例。了解这些测试用例的覆盖性,即被测软件的哪些函数已被这些测试用例调用,对于保证测试质量和设计新的测试用例来说是非常重要的。然而,由于测试用例的巨大数量,这种覆盖性分析是很繁重的工作。
目前存在几种能够进行覆盖性分析的工具,但这些工具都具有其各自的缺点。
现有的堆分析工具主要致力于分析内存使用,而不是用于进行覆盖性分析。尽管也有可能从这类工具中获得函数覆盖信息,但这类工具并不直接报告这种信息。而且,使用这种工具,一次只能分析一个堆转储(heapdump),而不能同时分析由多个测试用例产生的多个堆转储。
现有的一些测试分析工具具有专用于覆盖性分析的功能,然而这种功能通常是通过插装(instrumentation)来实现的,这就需要获得并修改被测试程序的源代码,并需要被测试程序在工具本身的运行环境中执行,从而带来额外的购买、安装、学习和使用成本。此外,这类工具也只能一次分析一个测试用例,而不能在运行多个测试用例之后,集中地对这些测试用例的运行结果进行覆盖性分析。
显然,本领域中需要这样一种有效的覆盖分析解决方案,它能够对多个测试用例的运行结果一次性的进行覆盖性分析、而不需要测试用例在特定工具的执行环境中运行。
发明内容
根据本发明的一个方面,提供了一种测试覆盖分析方法,包括:通过使用一个或多个测试用例运行被测试程序,生成包含被测试程序调用栈信息的一个或多个堆转储文件;以及对所述一个或多个堆转储文件中的调用栈信息进行分析,以获得所述一个或多个测试用例对于所述被测试程序的函数的覆盖性。
根据本发明的另一个方面,提供了一种测试覆盖分析装置,包括:堆转储生成模块,被配置为通过使用一个或多个测试用例运行被测试程序,生成包含被测试程序调用栈信息的一个或多个堆转储文件;以及分析模块,被配置为对所述一个或多个堆转储文件中的调用栈信息进行分析,以获得所述一个或多个测试用例对于所述被测试程序的函数的覆盖性。
本发明的解决方案不仅能够有效地实现对测试用例的覆盖性的分析,而且不需要被测试程序的源代码,不需要在特殊的环境中运行被测试程序,而只需要利用被测试程序在测试环境中的运行结果来进行分析。此外,本发明的技术方案能够实现一次性地对包含大量测试用例的测试用例集的覆盖性进行分析。
附图说明
所附权利要求中阐述了被认为是本发明的特点的创造性特征。但是,通过参照附图阅读下面对说明性实施例的详细说明可更好地理解发明本身以及其优选使用模式、目标、特征以及优点,在附图中:
图1示出了根据本发明的实施例的测试覆盖分析方法;
图2示出了根据本发明的实施例对过滤后的调用栈信息中的函数调用条目进行分析以获得一个或多个测试用例对被测试程序中函数的覆盖性的具体实现方式;
图3示出了根据本发明的实施例的测试覆盖分析装置;以及
图4示出了根据本发明的实施例的分析模块中包含的各子模块。
具体实施方式
下面参照附图来说明本发明的实施例。在下面的说明中,阐述了许多具体细节以便更全面地了解本发明。但是,对于本技术领域内的技术人员明显的是,本发明的实现可不具有这些具体细节中的一些。此外,应当理解的是,本发明并不限于所介绍的特定实施例。相反,可以考虑用下面的特征和元素的任意组合来实施本发明,而无论它们是否涉及不同的实施例。因此,下面的方面、特征、实施例和优点仅作说明之用而不应被看作是所附权利要求的要素或限定,除非权利要求中明确提出。
下面以Java环境为例来说明本发明的技术方案,然而,应指出的是,本发明不仅限于Java环境,而是适合于所有能够在程序运行中产生包含调用栈(call stack)信息的堆转储文件的执行环境。
调用栈是指在计算机程序的运行过程中用来存储程序运行中的活动子程序(即函数)的信息的栈,所述活动子程序是指那些已被调用但尚未完成执行并返回的子程序。程序的每一个执行线程具有一个调用栈。调用栈由栈帧组成,每一个栈帧对应于一个被调用的子程序。每一个栈帧中存储有被调用子程序的返回地址,以使被调用子程序执行完成后能返回调用子程序,并通常还存储有调用子程序传递给被调用子程序的参数值,以及被调用子程序的本地变量。每当一个子程序被调用,在调用栈中形成该子程序的栈帧;当该子程序在运行过程中调用其他子程序时,在调用栈中在该子程序的栈帧之上形成该其他子程序的栈帧;而当当前子程序(其帧栈位于调用栈的最顶端)执行完成后,从调用栈中将其栈帧出栈。因此,在程序执行过程中任一时刻的调用栈反映了程序执行到该时刻的子程序调用路径。通过获取和分析程序执行过程中各时刻的调用栈,就可以了解程序的整个执行历史和调用历史。
Java环境中内置了一个称为Hprof的简单的命令行概要分析工具,其用于进行堆和CPU概要分析(profiling)。Hprof实际上是一种JAVA虚拟机本机代理库,其可通过一命令行选项“-Xrunhrof”在JAVA虚拟机启动时被动态加载。例如,使用如下命令行命令:
Java—Xrunhprof:cpu=samples,depth=15Testcase1,可启动Hprof工具,该工具将在Testcase1程序运行结束后,生成一堆转储文件,该堆转储文件中除了包含Java堆中的对象动态分配信息外,还包含程序在执行过程中所产生的所有调用栈信息。例如,下面示出了堆转储文件中包含的一个调用栈信息的示例:
TRACE300649:
java.net.Inet4AddressImpl.lookupAllHostAddr(Inet4AddressImpl.java:Unknown line)
java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:873)
java.net.InetAddress.getAddressFromNameService(InetAddress.java:1211)
java.net.InetAddress.getLocalHost(InetAddress.java:1342)
com.abc.mm.sdk.server.DKDatastoreICM.logon(DKDatastoreICM.java:2299)
com.abc.mm.sdk.server.DKDatastoreICM.connect(DKDatastoreICM.java:2076)
com.abc.mm.qa.cm.Connect.test(Connect.java:63)
com.abc.mm.qa.common.TestRunner.runTest(TestRunner.java:27)
com.abc.mm.qa.common.VU.run(VU.java:35)
java.lang.Thread.run(Thread.java:799),
其中,300649是该调用栈信息的编号,并可作为该调用栈的唯一标识。上述调用栈信息中列出了该调用栈中按调用顺序排列的各函数调用的信息,其中每个函数调用条目包括该函数的完整名称(类名和方法名)、位于括号中的该函数所处的源文件以及被调用时所处的行号。
由于堆转储文件的调用栈信息都包含了测试用例运行过程中每个所调用的函数,因此所述调用栈信息可用来分析所述一个或多个测试用例对于被测试程序中函数的覆盖性。
以上简要说明了本发明的原理,下面参照附图描述本发明的测试覆盖分析方法。
图1示出了根据本发明的实施例的测试覆盖分析方法。如图所示,该方法包括以下步骤。
在步骤101,通过针对被测试程序运行一个或多个测试用例,生成包含被测试程序运行过程中产生的调用栈信息的一个或多个堆转储文件。
根据本发明的实施例,所述被测试程序在Java环境中运行,并且所述堆转储文件是使用Java虚拟机中内置的hprof工具生成的。这样,就可以在Java程序测试环境中直接生成所述堆转储文件,而不需要使用专用的工具。
前文中示出了该步骤中生成的堆转储文件中包含的一个调用栈信息的示例。
根据本发明的实施例,该测试覆盖分析方法包括一可选步骤102,其中使用过滤规则对所述调用栈信息中的函数调用条目进行过滤,以便只保留对测试用例的函数覆盖分析有意义的函数调用条目,而滤除那些无意义的函数调用条目。
根据本发明的实施例,所述过滤规则可包含被测试程序包的名称的部分或全部,其用于将不包含所述包的名称的部分或全部的函数调用条目滤除。例如,如果过滤规则指定了被测试程序的包名称“com.abc.mm.sdk”,则函数调用栈信息中所有不包含“com.abc.mm.sdk”的函数调用条目将被滤除,而函数调用栈信息中所有包含“com.abc.mm.sdk”的函数调用条目将被保留,用于进行覆盖性分析。这些被保留的函数调用条目表明测试用例对被测试程序包“com.abc.mm.sdk”中的函数调用。
此外,所述过滤规则还可包含对于测试覆盖分析不重要的类或方法的名称,其用于将包含所述类或方法的函数调用条目滤除。例如,由于方法“com.abc.mm.sdk.server.DKDatastoreICM.connect”和“com.abc.mm.skd.server.DKDatastoreICM.logon”总是被所有测试用例所执行,因此它们对于分析测试用例对于被测试程序中函数的覆盖性没有帮助,可以将调用栈信息中包含这些方法的条目滤除。
在本发明中,可以使用以上两种过滤规则中的任何一个或同时使用两者来对调用栈信息中的函数调用条目进行过滤。
在步骤103,对所述一个或多个堆转储文件中的调用栈信息进行分析,以获得所述一个或多个测试用例对于所述被测试程序中函数的覆盖性信息。也就是说,通过分析由测试用例生成的调用栈信息中的各个函数调用条目,判断测试用例调用了被测试程序的哪些函数,从而得到测试用例对于被测试程序中函数的覆盖性信息。在本发明的包含所述过滤步骤102的实施例中,所述对调用栈信息进行分析包括对过滤后的所述调用栈信息中的函数调用条目进行分析,以获得所述一个或多个测试用例对于所述被测试程序中函数的覆盖性。
图2示出了根据本发明的实施例对调用栈信息中的函数调用条目进行分析以获得一个或多个测试用例对被测试程序中函数的覆盖性的具体实现方式,即根据本发明的实施例的上述步骤103中包括的具体实现步骤。应指出的是,该具体实现方式仅为示例,而不是对本发明的限制。本发明可使用任何其他方式对调用栈信息中的函数调用的条目进行分析来获得测试用例对被测试程序中函数的覆盖性信息。
如图2所示,根据本发明的实施例,所述对调用栈信息中的函数调用条目进行分析的步骤102包括以下步骤:
在步骤201,对每个函数调用条目执行散列运算,并将所获得散列码作为该函数调用条目的标识。可使用本领域中已知的很多散列算法中的任何一个散列算法来执行所述散列运算,且所述散列码的位数可以不同。优选地,所述散列算法和散列码的位数应尽可能保证使不同的函数调用条目能产生不同的散列码。如下示出了一示例性调用栈信息:
TRACE300586
java.net.SocketInputStream.socketRead0(SocketInputStream.java:Unknown line)
java.net.SocketInputStream.read(SocketInputStream.java:155)
java.net.SocketInputStream.read(SocketInputStream.java:211)
com.abc.mm.sdk.internal.PHttpResponse.readResponseHeaders(PHttpResponse.java:247)
com.abc.mm.sdk.internal.PHttpResponse.retrieveHeadersFromResponse(PHttpResponse.java:202)
com.abc.mm.sdk.internal.PHttpResponse.getStatusCode(PHttpResponse.java:113)
com.abc.mm.sdk.internal.PHttpURLConnection.getResponseCode(PHttpURLConnection.java:248)
com.abc.mm.sdk.internal.PHttpPut.getHTTPResponse(PHttpPut.java:913)
com.abc.mm.sdk.common.DKLobICM.storeOnObjectServer(DKLobICM.java:3115)
com.abc.mm.sdk.common.DKLobICM.validatePrimaryRMForStoreOrReplace(DKLobICM.java:2916)
其中,"com.abc.mm.sdk.internal.PHttpResponse.retrieveHeadersFromResponse(PHttpResponse.java:202)"是一个函数调用条目,由该函数调用条目所生成的作为其标识的散列码为-2042986671。
在步骤202,将所获得的各个函数调用条目的标识进行排序,并去除重复的标识,从而形成包含一组唯一标识的标识列表。
在步骤203,记录所述标识列表中每个标识与相应的函数、调用栈和测试用例之间的关联。例如,对于标识列表中包含的上述示例性标识-2042986671,可记录该标识-2042986671与函数“com.abc.mm.sdk.internal.PHttpResponse.retrieveHeadersFromResponse”、该调用栈的标识300586以及产生该调用栈信息的测试用例Testcase1之间的关联。可以将所述关联存储在存储器或数据库中。在本发明的一实施例中,标识列表中的每个标识与相应的函数、调用栈和测试用例之间的关联可通过针对标识列表中的每个标识,遍历所有测试用例所产生的所有堆转储文件中调用栈信息,并使用与生成所述标识列表中的标识相同的散列算法生成每个调用栈信息中的每个函数调用的条目的散列值,然后将该散列值与该标识比较来获得。当然,标识列表中的每个标识与相应的函数、调用栈和测试用例之间的关联也在生成标识列表中的每个标识时直接获得并记录下来。
在步骤204,使用所述标识列表以及所述关联获得所述一个或多个测试用例对于所述被测试程序中的函数的覆盖性信息。
通过获得每个测试用例产生的调用栈信息中每个函数调用条目的散列值,并将这些散列值排序,可以更迅速地判断每个测试用例的调用了被测试程序中的哪些函数,从而可以更迅速有效地进行测试用例的覆盖性分析。
根据本发明的实施例,所述覆盖性可包括以下各项中的任何一个或多个:所述被测试程序中的特定函数由所述一个或多个测试用例中的哪一个或一些测试用例所覆盖;所述一个或多个测试用例中的特定测试用例覆盖了所述被测试程序中的哪些函数;以及所述被测试程序中的哪一个或一些函数未被所述一个或多个测试用例所覆盖。
例如,可根据所述标识列表以及所述关联判断一特定函数“com.abc.mm.sdk.common.DKLobICM.storeOnObjectServer”由测试用例Testcase1和Testcase2所覆盖,并包含在Testcase1和Testcase2所分别产生的标识分别为300654和300661的调用栈信息中。
再例如,可根据所述标识列表以及所述关联判断一特定测试用例在由其产生的调用栈信息中覆盖了“eom.abc.mm.sdk.internal.PHttpSocketHandler.connect”、“com.abc.mm.sdk.internal.PHttpURLConnection.connect”、“com.abc.mm.sdk.internal.PHttpURLConnection.<init>”、“com.abc.mm.sdk.internal.PHttpPut.createConnection”、“com.abc.mm.sdk.internal.PHttpPut.openConnection”等函数。
又例如,可通过将被测试程序中所有函数的列表与由所有测试用例产生的所有调用栈信息中包含的所有函数调用条目中的函数进行比较来判断被测试程序中的哪些函数没有被这些测试用例所覆盖。
此外,可将所获得的有关覆盖性的结果保存以便进一步处理和显示。
以上描述了根据本发明的实施例的测试覆盖分析方法,应指出的是,以上描述仅为示例性说明,而不是对本发明的限制。在本发明的其他实施例中,该方法可具有更多、更少或不同的步骤,且各步骤之间的关系可以与所描述的不同。此外,一些步骤可以被划分为更小的步骤,一些步骤可以被合并为更大的步骤。例如,在本发明的一些实施例中,可以没有所述过滤步骤102、排序子步骤中的任何一个或两者,等等。所有这些变化都处于本发明的范围之内。
下面参照附图3描述根据本发明的实施例的测试覆盖分析装置。为简明起见,在以下描述中省略了与以上描述重复的部分内容,因此可参见以上描述获得对本发明的测试覆盖分析装置的更详细的了解。
如图所示,根据本发明的实施例的测试覆盖分析装置包括:堆转储生成模块301,其被配置为通过使用一个或多个测试用例运行被测试程序,生成包含被测试程序运行过程中产生的调用栈信息的一个或多个堆转储文件;以及分析模块302,其被配置为对所述一个或多个堆转储文件中的调用栈信息进行分析,以获得所述一个或多个测试用例对于所述被测试程序中函数的覆盖性。
根据本发明的实施例,所述被测试程序在Java环境中运行,并且堆转储生成模块301为Java虚拟机中内置的hprof工具。这样,就可以通过在Java程序测试环境中直接生成堆转储文件,而不需要使用专用的工具。
根据本发明的实施例,所述测试覆盖分析装置还包括过滤模块303,该过滤模块被配置为使用过滤规则对所述调用栈信息中的函数调用条目进行过滤,且所述分析模块302进一步被配置为对过滤后的所述调用栈信息中的函数调用条目进行分析。
根据本发明的进一步的实施例,所述过滤规则包括以下各项中的任何一个或多个:所述被测试程序所在的包的名称的部分或全部,其用于将不包含所述包的名称的部分或全部的函数调用条目滤除;以及对于测试覆盖分析不重要的类或方法的名称,其用于将包含所述类或方法的函数调用条目滤除。
图4示出了根据本发明的实施例所述被配置为对过滤后的所述调用栈信息中的函数调用条目进行分析的分析模块302中包含的各子模块。如图所示,该分析模块302包括:
散列子模块401,其被配置为对所述过滤后的每个函数调用条目执行散列运算,并将所获得散列码作为该函数调用条目的标识;
标识列表形成子模块402,其被配置为将所获得的各个函数调用条目的标识进行排序,去除重复的标识,从而形成标识列表;
关联记录子模块403,其被配置为记录标识列表中每个标识与相应的函数、调用栈信息和测试用例之间的关联;以及
覆盖性获得子模块404,其被配置为使用所述标识列表以及所述关联获得所述一个或多个测试用例对于所述被测试程序中的函数的覆盖性。
根据本发明的实施例,所述覆盖性包括以下各项中的任何一个或多个:所述被测试程序中的特定函数由所述一个或多个测试用例中的哪一个或一些测试用例所覆盖;所述一个或多个测试用例中的特定测试用例覆盖了所述被测试程序中的哪些函数;以及所述被测试程序中的哪一个或一些函数未被所述一个或多个测试用例所覆盖。
以上描述了根据本发明的实施例的测试覆盖分析装置,应指出的是,以上描述仅为示例性说明,而不是对本发明的限制。在本发明的其他实施例中,该装置可具有更多、更少或不同的模块,且各模块之间的连接和包含关系可以与所描述的不同。此外,一些模块可以被划分为更小的模块,一些模块可以被合并为更大的模块。例如,在本发明的一些实施例中,可以没有所述过滤模块302,且所述标识列表形成子模块304可不包括排序功能,等等。所有这些变化都处于本发明的范围之内。
本发明可以硬件、软件、或硬件与软件的结合的方式实现。本发明可以集中的方式在一个计算机系统中实现,或以分布方式实现,在这种分布方式中,不同的部件分布在若干互连的计算机系统中。适于执行本文中描述的方法的任何计算机系统或其它装置都是合适的。一种典型的硬件和软件的组合可以是带有计算机程序的通用计算机系统,当该计算机程序被加载和执行时,控制该计算机系统而使其执行本发明的方法,并构成本发明的装置。
本发明也可体现在计算机程序产品中,该程序产品包含使能实现本文中描述的方法的所有特征,并且当其被加载到计算机系统中时,能够执行所述方法。
尽管已参照优选实施例具体示出和说明了本发明,但是本领域内的那些技术人员应理解,可在形式和细节上对其进行各种改变而不会背离本发明的精神和范围。
Claims (10)
1.一种测试覆盖分析方法,包括:
通过使用一个或多个测试用例运行被测试程序,生成包含被测试程序的调用栈信息的一个或多个堆转储文件,其中,所述被测试程序在Java环境中运行,并且所述堆转储文件是使用Java虚拟机中内置的hprof工具生成的;以及
对所述一个或多个堆转储文件中的调用栈信息进行分析,以获得所述一个或多个测试用例对于所述被测试程序的函数的覆盖性信息。
2.根据权利要求1的方法,其中,所述覆盖性包括以下各项中的任何一个或多个:
所述被测试程序中的特定函数由所述一个或多个测试用例中的哪一个或一些测试用例所覆盖;
所述一个或多个测试用例中的特定测试用例覆盖了所述被测试程序中的哪些函数;以及
所述被测试程序中的哪一个或一些函数未被所述一个或多个测试用例所覆盖。
3.根据权利要求1的方法,还包括使用过滤规则对所述调用栈信息中的函数调用条目进行过滤,且其中,所述对调用栈信息进行分析包括:
对过滤后的所述调用栈信息中的函数调用条目进行分析。
4.根据权利要求3的方法,其中,所述过滤规则包含以下各项中的任何一个或多个:
所述被测试程序所在的包的名称的部分或全部,其用于将不包含所述包的名称的部分或全部的函数调用条目滤除;以及
对于测试覆盖分析不重要的类或方法的名称,其用于将包含所述类或方法的函数调用条目滤除。
5.根据权利要求3的方法,其中,所述对过滤后的所述调用栈信息中的函数调用条目进行分析包括:
对所述过滤后的每个函数调用条目执行散列运算,并将所获得散列码作为该函数调用条目的标识;
将所获得的各个函数调用条目的标识进行排序,去除重复的标识,从而形成标识列表;
记录所述标识列表中每个标识与相应的函数、调用栈和测试用例之间的关联;以及
使用所述标识列表以及所述关联获得所述一个或多个测试用例对于所述被测试程序中的函数的覆盖性信息。
6.一种测试覆盖分析装置,包括:
堆转储生成模块,被配置为通过使用一个或多个测试用例运行被测试程序,生成包含被测试程序的调用栈信息的一个或多个堆转储文件,其中,所述被测试程序在Java环境中运行,并且所述堆转储生成模块为Java虚拟机中内置的hprof工具;以及
分析模块,被配置为对所述一个或多个堆转储文件中的调用栈信息进行分析,以获得所述一个或多个测试用例对于所述被测试程序中函数的覆盖性信息。
7.根据权利要求6的装置,其中,所述覆盖性信息包括以下各项中的任何一个或多个:
所述被测试程序中的特定函数由所述一个或多个测试用例中的哪一个或一些测试用例所覆盖;
所述一个或多个测试用例中的特定测试用例覆盖了所述被测试程序中的哪些函数;以及
所述被测试程序中的哪一个或一些函数未被所述一个或多个测试用例所覆盖。
8.根据权利要求6的装置,还包括过滤模块,该过滤模块被配置为使用过滤规则对所述调用栈信息中的函数调用条目进行过滤,且所述分析模块进一步被配置为对过滤后的所述调用栈信息中的函数调用条目进行分析。
9.根据权利要求8的装置,其中,所述过滤规则包含以下各项中的任何一个或多个:
所述被测试程序所在的包的名称的部分或全部,其用于将不包含所述包的名称的部分或全部的函数调用条目滤除;以及
对于测试覆盖分析不重要的类或方法的名称,其用于将包含所述类或方法的函数调用条目滤除。
10.根据权利要求8的装置,其中,所述被配置为对过滤后的所述调用栈信息中的函数调用条目进行分析的分析模块包括:
散列模块,其被配置为对所述过滤后的每个函数调用条目执行散列运算,并将所获得散列码作为该函数调用条目的标识;
标识列表形成模块,其被配置为将所获得的各个函数调用条目的标识进行排序,去除重复的标识,从而形成标识列表;
记录模块,其被配置为记录标识列表中每个标识与相应的函数、调用栈和测试用例之间的关联;以及
覆盖性获得模块,其被配置为使用所述标识列表以及所述关联获得所述一个或多个测试用例对于所述被测试程序中的函数的覆盖性信息。
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008102124465A CN101661425B (zh) | 2008-08-26 | 2008-08-26 | 测试覆盖分析方法和装置 |
US12/547,262 US8527952B2 (en) | 2008-08-26 | 2009-08-25 | Test coverage analysis method and apparatus |
US13/912,954 US9141520B2 (en) | 2008-08-26 | 2013-06-07 | Test coverage analysis |
US14/831,125 US9342440B2 (en) | 2008-08-26 | 2015-08-20 | Test coverage analysis |
US15/155,387 US9678858B2 (en) | 2008-08-26 | 2016-05-16 | Test coverage analysis |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008102124465A CN101661425B (zh) | 2008-08-26 | 2008-08-26 | 测试覆盖分析方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101661425A CN101661425A (zh) | 2010-03-03 |
CN101661425B true CN101661425B (zh) | 2012-03-21 |
Family
ID=41727201
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008102124465A Active CN101661425B (zh) | 2008-08-26 | 2008-08-26 | 测试覆盖分析方法和装置 |
Country Status (2)
Country | Link |
---|---|
US (4) | US8527952B2 (zh) |
CN (1) | CN101661425B (zh) |
Families Citing this family (37)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101661425B (zh) | 2008-08-26 | 2012-03-21 | 国际商业机器公司 | 测试覆盖分析方法和装置 |
US20110271252A1 (en) * | 2010-04-28 | 2011-11-03 | International Business Machines Corporation | Determining functional design/requirements coverage of a computer code |
US9535823B2 (en) * | 2011-02-28 | 2017-01-03 | Typemock Ltd. | Method and apparatus for detecting software bugs |
US8719799B2 (en) * | 2011-03-07 | 2014-05-06 | International Business Machines Corporation | Measuring coupling between coverage tasks and use thereof |
US8719789B2 (en) * | 2011-03-07 | 2014-05-06 | International Business Machines Corporation | Measuring coupling between coverage tasks and use thereof |
CN103106133B (zh) * | 2011-11-09 | 2016-12-07 | 阿里巴巴集团控股有限公司 | 软件缺陷定位方法及系统 |
CN103930898B (zh) * | 2011-11-15 | 2016-10-12 | 国立研究开发法人科学技术振兴机构 | 程序分析/验证服务提供系统及其控制方法、程序分析/验证装置、程序分析/验证工具管理装置 |
CN103365765B (zh) * | 2012-03-28 | 2016-10-12 | 腾讯科技(深圳)有限公司 | 测试用例筛选方法和系统 |
CN104123218B (zh) * | 2013-04-23 | 2015-06-24 | 腾讯科技(深圳)有限公司 | 一种代码覆盖测试方法、装置和系统 |
CN103942140A (zh) * | 2013-12-19 | 2014-07-23 | 江苏锐天信息科技有限公司 | 一种测试程序自动转换方法 |
CN104899016B (zh) * | 2014-03-07 | 2018-10-09 | 腾讯科技(深圳)有限公司 | 调用堆栈关系获取方法及装置 |
CN107077341B (zh) | 2014-10-24 | 2020-07-14 | 谷歌有限责任公司 | 用于基于软件执行跟踪自动加标签的方法和系统 |
CN105701001A (zh) * | 2014-11-25 | 2016-06-22 | 阿里巴巴集团控股有限公司 | 一种测试覆盖率的处理方法和设备 |
CN104598375B (zh) * | 2014-11-28 | 2017-09-12 | 江苏苏测软件检测技术有限公司 | 一种用于软件开发的缺陷预测方法 |
IN2015DE01188A (zh) * | 2015-04-29 | 2015-06-05 | Hcl Technologies Ltd | |
US10474555B2 (en) * | 2016-03-03 | 2019-11-12 | Synopsys, Inc. | Detecting errors for function calls with an implicit receiver object |
US10467123B2 (en) * | 2016-05-09 | 2019-11-05 | Oracle International Corporation | Compression techniques for encoding stack trace information |
CN108268366B (zh) * | 2016-12-30 | 2021-01-22 | 腾讯科技(深圳)有限公司 | 测试用例执行方法及装置 |
CN107193747B (zh) * | 2017-05-27 | 2022-01-11 | 北京金山安全软件有限公司 | 代码测试方法、装置和计算机设备 |
CN107704383A (zh) * | 2017-09-12 | 2018-02-16 | 中国航空工业集团公司洛阳电光设备研究所 | 一种基于任务栈分析的动态测试函数覆盖率获取方法 |
US10725894B2 (en) | 2017-10-04 | 2020-07-28 | International Business Machines Corporation | Measuring and improving test coverage |
US11074158B2 (en) * | 2017-12-01 | 2021-07-27 | International Business Machines Corporation | Gray-box testing based on concrete usages |
CN108037989B (zh) * | 2017-12-15 | 2021-11-30 | 北京小米移动软件有限公司 | Sdk组件识别方法及装置 |
CN110109816A (zh) * | 2018-02-01 | 2019-08-09 | 华为技术有限公司 | 测试用例选择方法和装置 |
US11106567B2 (en) | 2019-01-24 | 2021-08-31 | International Business Machines Corporation | Combinatoric set completion through unique test case generation |
US11263116B2 (en) | 2019-01-24 | 2022-03-01 | International Business Machines Corporation | Champion test case generation |
US11099975B2 (en) | 2019-01-24 | 2021-08-24 | International Business Machines Corporation | Test space analysis across multiple combinatoric models |
US10970195B2 (en) * | 2019-06-13 | 2021-04-06 | International Business Machines Corporation | Reduction of test infrastructure |
US11422924B2 (en) | 2019-06-13 | 2022-08-23 | International Business Machines Corporation | Customizable test set selection using code flow trees |
US11232020B2 (en) | 2019-06-13 | 2022-01-25 | International Business Machines Corporation | Fault detection using breakpoint value-based fingerprints of failing regression test cases |
CN112231520A (zh) * | 2019-07-15 | 2021-01-15 | 北京达佳互联信息技术有限公司 | 数据处理方法、装置、电子设备及存储介质 |
CN110806969A (zh) * | 2019-09-18 | 2020-02-18 | 北京你财富计算机科技有限公司 | 一种测试用例完整度评估方法、装置及电子设备 |
CN111026665B (zh) * | 2019-12-09 | 2023-02-28 | 建信金融科技有限责任公司 | 测试范围分析方法、装置及设备 |
CN112416794B (zh) * | 2020-12-03 | 2023-11-21 | 平安银行股份有限公司 | 代码覆盖率的处理方法、装置、设备及存储介质 |
US11599455B2 (en) | 2021-07-08 | 2023-03-07 | Bank Of America Corporation | Natural language processing (NLP)-based cross format pre-compiler for test automation |
US11599454B2 (en) | 2021-07-08 | 2023-03-07 | Bank Of America Corporation | Natural language processing (NLP)-based cross format pre-compiler for test automation |
US11720471B2 (en) | 2021-08-09 | 2023-08-08 | International Business Machines Corporation | Monitoring stack memory usage to optimize programs |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1949187A (zh) * | 2006-11-17 | 2007-04-18 | 深圳市领测科技有限公司 | 一种程序调测系统及方法 |
CN1979422A (zh) * | 2005-12-02 | 2007-06-13 | 凌阳科技股份有限公司 | 用以获得应用程序代码执行率的仿真装置及其方法 |
CN100357911C (zh) * | 2004-03-22 | 2007-12-26 | 国际商业机器公司 | 对代码覆盖使用硬件辅助的自主测试用例反馈的方法和设备 |
Family Cites Families (63)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3386232B2 (ja) * | 1994-07-15 | 2003-03-17 | 富士通株式会社 | テスト計算機システム |
US5918037A (en) * | 1996-06-05 | 1999-06-29 | Teradyne, Inc. | Generating tests for an extended finite state machine using different coverage levels for different submodels |
US6760903B1 (en) * | 1996-08-27 | 2004-07-06 | Compuware Corporation | Coordinated application monitoring in a distributed computing environment |
US6721941B1 (en) * | 1996-08-27 | 2004-04-13 | Compuware Corporation | Collection of timing and coverage data through a debugging interface |
US6002869A (en) * | 1997-02-26 | 1999-12-14 | Novell, Inc. | System and method for automatically testing software programs |
US6513155B1 (en) * | 1997-12-12 | 2003-01-28 | International Business Machines Corporation | Method and system for merging event-based data and sampled data into postprocessed trace output |
US6359886B1 (en) * | 1998-08-17 | 2002-03-19 | Compaq Computer Corporation | Method and apparatus for filtering and routing communications frames |
US6230184B1 (en) * | 1998-10-19 | 2001-05-08 | Sun Microsystems, Inc. | Method and apparatus for automatically optimizing execution of a computer program |
US7430670B1 (en) * | 1999-07-29 | 2008-09-30 | Intertrust Technologies Corp. | Software self-defense systems and methods |
US7100195B1 (en) * | 1999-07-30 | 2006-08-29 | Accenture Llp | Managing user information on an e-commerce system |
US6550057B1 (en) * | 1999-08-31 | 2003-04-15 | Accenture Llp | Piecemeal retrieval in an information services patterns environment |
US6477666B1 (en) * | 1999-11-22 | 2002-11-05 | International Business Machines Corporation | Automatic fault injection into a JAVA virtual machine (JVM) |
US7058928B2 (en) * | 1999-12-23 | 2006-06-06 | Identify Software Ltd. | System and method for conditional tracing of computer programs |
US7080382B2 (en) * | 2000-02-25 | 2006-07-18 | Oracle International Corporation | Accessing shorter-duration instances of activatable objects based on object references stored in longer-duration memory |
US6907546B1 (en) * | 2000-03-27 | 2005-06-14 | Accenture Llp | Language-driven interface for an automated testing framework |
US8312435B2 (en) * | 2000-12-26 | 2012-11-13 | Identify Software Ltd. (IL) | System and method for conditional tracing of computer programs |
US7284274B1 (en) * | 2001-01-18 | 2007-10-16 | Cigital, Inc. | System and method for identifying and eliminating vulnerabilities in computer software applications |
US20030066055A1 (en) * | 2001-04-26 | 2003-04-03 | Spivey John Michael | Profiling computer programs |
WO2002095585A1 (en) * | 2001-05-24 | 2002-11-28 | Techtracker, Inc. | Program execution stack signatures |
US7080358B2 (en) * | 2002-04-10 | 2006-07-18 | Sun Microsystems, Inc. | Mechanism for generating an execution log and coverage data for a set of computer code |
US6946715B2 (en) * | 2003-02-19 | 2005-09-20 | Micron Technology, Inc. | CMOS image sensor and method of fabrication |
US7234132B2 (en) * | 2002-08-29 | 2007-06-19 | International Business Machines Corporation | Application integration model for dynamic software component assembly within an application at runtime |
US7219345B2 (en) * | 2002-12-17 | 2007-05-15 | Hewlett-Packard Development Company, L.P. | System and method for terminating processes in a distributed computing system |
JP2004341671A (ja) * | 2003-05-14 | 2004-12-02 | Internatl Business Mach Corp <Ibm> | 情報処理システム、制御方法、制御プログラム、及び記録媒体 |
US7568192B2 (en) * | 2003-09-29 | 2009-07-28 | International Business Machines Corporation | Automated scalable and adaptive system for memory analysis via identification of leak root candidates |
US7395527B2 (en) * | 2003-09-30 | 2008-07-01 | International Business Machines Corporation | Method and apparatus for counting instruction execution and data accesses |
US7299224B2 (en) * | 2003-12-19 | 2007-11-20 | International Business Machines Corporation | Method and infrastructure for processing queries in a database |
US7421684B2 (en) * | 2004-03-22 | 2008-09-02 | International Business Machines Corporation | Method and apparatus for autonomic test case feedback using hardware assistance for data coverage |
US7509538B2 (en) * | 2004-04-21 | 2009-03-24 | Microsoft Corporation | Systems and methods for automated classification and analysis of large volumes of test result data |
US7765525B1 (en) * | 2004-09-01 | 2010-07-27 | Intuit Inc. | Operations manager infrastructure for dynamically updating software operational policy |
US8255435B2 (en) * | 2004-10-07 | 2012-08-28 | International Business Machines Corporation | Detecting memory management anti-patterns |
US20060136877A1 (en) * | 2004-12-22 | 2006-06-22 | International Business Machines Corporation | Method, system and program product for capturing a semantic level state of a program |
US7475289B2 (en) * | 2005-02-11 | 2009-01-06 | Microsoft Corporation | Test manager |
US20070006037A1 (en) * | 2005-06-29 | 2007-01-04 | Microsoft Corporation | Automated test case result analyzer |
US7587636B2 (en) * | 2005-08-04 | 2009-09-08 | Microsoft Corporation | Unit test generalization |
US7506212B2 (en) * | 2005-11-17 | 2009-03-17 | Microsoft Corporation | Distributed exception handling testing |
US7493522B2 (en) * | 2006-01-30 | 2009-02-17 | Microsoft Corporation | Model independent input reduction |
US7886272B1 (en) * | 2006-03-16 | 2011-02-08 | Avaya Inc. | Prioritize code for testing to improve code coverage of complex software |
US7757215B1 (en) * | 2006-04-11 | 2010-07-13 | Oracle America, Inc. | Dynamic fault injection during code-testing using a dynamic tracing framework |
US7356432B1 (en) * | 2006-05-19 | 2008-04-08 | Unisys Corporation | System test management system with automatic test selection |
CN100555240C (zh) * | 2007-01-16 | 2009-10-28 | 国际商业机器公司 | 用于诊断应用程序的方法和系统 |
US7743280B2 (en) * | 2007-02-27 | 2010-06-22 | International Business Machines Corporation | Method and system for analyzing memory leaks occurring in java virtual machine data storage heaps |
KR101019209B1 (ko) * | 2007-04-25 | 2011-03-04 | 이화여자대학교 산학협력단 | 임베디드 소프트웨어의 인터페이스 자동 추출 장치 및 그방법 |
CN101295268B (zh) * | 2007-04-27 | 2011-03-02 | 国际商业机器公司 | 面向软件系统的分区存储器转储方法和装置 |
US8127277B2 (en) * | 2007-05-21 | 2012-02-28 | International Business Machines Corporation | Framework for conditionally executing code in an application using conditions in the framework and in the application |
WO2008155779A2 (en) * | 2007-06-20 | 2008-12-24 | Sanjeev Krishnan | A method and apparatus for software simulation |
US20090070746A1 (en) * | 2007-09-07 | 2009-03-12 | Dinakar Dhurjati | Method for test suite reduction through system call coverage criterion |
US8302080B2 (en) * | 2007-11-08 | 2012-10-30 | Ntt Docomo, Inc. | Automated test input generation for web applications |
US20110022551A1 (en) * | 2008-01-08 | 2011-01-27 | Mark Dixon | Methods and systems for generating software quality index |
US7788270B2 (en) * | 2008-02-28 | 2010-08-31 | Red Hat, Inc. | Name-based filters utilized in full-text search engine |
US8527482B2 (en) * | 2008-06-06 | 2013-09-03 | Chrysalis Storage, Llc | Method for reducing redundancy between two or more datasets |
US8607198B2 (en) * | 2008-06-24 | 2013-12-10 | International Business Machines Corporation | Cross-concern code coverage assessment |
CN101661425B (zh) | 2008-08-26 | 2012-03-21 | 国际商业机器公司 | 测试覆盖分析方法和装置 |
US8381184B2 (en) * | 2008-09-02 | 2013-02-19 | International Business Machines Corporation | Dynamic test coverage |
US8949103B2 (en) * | 2009-05-01 | 2015-02-03 | Microsoft Corporation | Program code simulator |
US9600347B2 (en) * | 2009-11-26 | 2017-03-21 | International Business Machines Corporation | Verifying synchronization coverage in logic code |
US9129056B2 (en) * | 2009-12-04 | 2015-09-08 | Sap Se | Tracing values of method parameters |
US8850403B2 (en) * | 2009-12-04 | 2014-09-30 | Sap Ag | Profiling data snapshots for software profilers |
US8584098B2 (en) * | 2009-12-04 | 2013-11-12 | Sap Ag | Component statistics for application profiling |
US20110302422A1 (en) * | 2010-06-02 | 2011-12-08 | Apple Inc. | Hash function using a repeated function with shifts |
US20120089873A1 (en) * | 2010-08-17 | 2012-04-12 | Nec Laboratories America, Inc. | Systems and methods for automated systematic concurrency testing |
US9535823B2 (en) * | 2011-02-28 | 2017-01-03 | Typemock Ltd. | Method and apparatus for detecting software bugs |
US8850270B2 (en) * | 2012-07-19 | 2014-09-30 | International Business Machines Corporation | Test selection |
-
2008
- 2008-08-26 CN CN2008102124465A patent/CN101661425B/zh active Active
-
2009
- 2009-08-25 US US12/547,262 patent/US8527952B2/en not_active Expired - Fee Related
-
2013
- 2013-06-07 US US13/912,954 patent/US9141520B2/en not_active Expired - Fee Related
-
2015
- 2015-08-20 US US14/831,125 patent/US9342440B2/en not_active Expired - Fee Related
-
2016
- 2016-05-16 US US15/155,387 patent/US9678858B2/en not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100357911C (zh) * | 2004-03-22 | 2007-12-26 | 国际商业机器公司 | 对代码覆盖使用硬件辅助的自主测试用例反馈的方法和设备 |
CN1979422A (zh) * | 2005-12-02 | 2007-06-13 | 凌阳科技股份有限公司 | 用以获得应用程序代码执行率的仿真装置及其方法 |
CN1949187A (zh) * | 2006-11-17 | 2007-04-18 | 深圳市领测科技有限公司 | 一种程序调测系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
US20100058300A1 (en) | 2010-03-04 |
US20150355999A1 (en) | 2015-12-10 |
US20130275953A1 (en) | 2013-10-17 |
US9141520B2 (en) | 2015-09-22 |
US9342440B2 (en) | 2016-05-17 |
US8527952B2 (en) | 2013-09-03 |
CN101661425A (zh) | 2010-03-03 |
US9678858B2 (en) | 2017-06-13 |
US20160259715A1 (en) | 2016-09-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101661425B (zh) | 测试覆盖分析方法和装置 | |
Artzi et al. | Fault localization for dynamic web applications | |
Alexander et al. | Criteria for testing polymorphic relationships | |
CN111832026B (zh) | 一种漏洞利用定位方法、系统、装置及介质 | |
Obbink et al. | An extensible approach for taming the challenges of JavaScript dead code elimination | |
Qu et al. | Impact analysis of configuration changes for test case selection | |
CN1908895A (zh) | 验证应用程序全球化问题的系统和方法及计算机产品 | |
Mariani et al. | A technique for verifying component-based software | |
US8898644B2 (en) | Efficient unified tracing of kernel and user events with multi-mode stacking | |
CN114328168A (zh) | 异常检测方法、装置、计算机设备和存储介质 | |
Zhang et al. | Automatic construction of accurate application call graph with library call abstraction for java | |
CN110134583B (zh) | 软件测试及数据处理方法及装置 | |
Jalote et al. | Program partitioning: a framework for combining static and dynamic analysis | |
Pócza et al. | Cross-language program slicing in the .NET framework | |
CN116467712B (zh) | 动态污点追踪方法、装置及相关污点传播分析系统 | |
CN112597669B (zh) | 一种模拟试验平台及其工作方法 | |
JP7385105B2 (ja) | 情報処理プログラム、情報処理装置および情報処理方法 | |
Kansomkeat et al. | An analysis technique to increase testability of object‐oriented components | |
Xia et al. | Detecting Interpreter Bugs via Filling Function Calls in Skeletal Program Enumeration | |
CN117992359A (zh) | 服务化软件的观测方法、装置和电子设备 | |
Anand et al. | An accurate stack memory abstraction and symbolic analysis framework for executables | |
CN113204350A (zh) | 代码增量覆盖率统计方法、装置、电子设备及存储介质 | |
CN117331830A (zh) | 单元测试方法、装置、电子设备及可读存储介质 | |
CN113722233A (zh) | 一种代码覆盖率确定方法、系统、存储介质及电子设备 | |
Clerissi et al. | Guess the State: Exploiting Determinism to Improve GUI Exploration Efficiency |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |