CN101661425B - 测试覆盖分析方法和装置 - Google Patents

测试覆盖分析方法和装置 Download PDF

Info

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
Application number
CN2008102124465A
Other languages
English (en)
Other versions
CN101661425A (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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to CN2008102124465A priority Critical patent/CN101661425B/zh
Priority to US12/547,262 priority patent/US8527952B2/en
Publication of CN101661425A publication Critical patent/CN101661425A/zh
Application granted granted Critical
Publication of CN101661425B publication Critical patent/CN101661425B/zh
Priority to US13/912,954 priority patent/US9141520B2/en
Priority to US14/831,125 priority patent/US9342440B2/en
Priority to US15/155,387 priority patent/US9678858B2/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test 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的装置,其中,所述被配置为对过滤后的所述调用栈信息中的函数调用条目进行分析的分析模块包括:
散列模块,其被配置为对所述过滤后的每个函数调用条目执行散列运算,并将所获得散列码作为该函数调用条目的标识;
标识列表形成模块,其被配置为将所获得的各个函数调用条目的标识进行排序,去除重复的标识,从而形成标识列表;
记录模块,其被配置为记录标识列表中每个标识与相应的函数、调用栈和测试用例之间的关联;以及
覆盖性获得模块,其被配置为使用所述标识列表以及所述关联获得所述一个或多个测试用例对于所述被测试程序中的函数的覆盖性信息。
CN2008102124465A 2008-08-26 2008-08-26 测试覆盖分析方法和装置 Active CN101661425B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (3)

* Cited by examiner, † Cited by third party
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