CN101165658A - 自动生成可再现运行时问题的单元测试用例的方法和*** - Google Patents
自动生成可再现运行时问题的单元测试用例的方法和*** Download PDFInfo
- Publication number
- CN101165658A CN101165658A CNA2006101355340A CN200610135534A CN101165658A CN 101165658 A CN101165658 A CN 101165658A CN A2006101355340 A CNA2006101355340 A CN A2006101355340A CN 200610135534 A CN200610135534 A CN 200610135534A CN 101165658 A CN101165658 A CN 101165658A
- Authority
- CN
- China
- Prior art keywords
- program
- code
- close attention
- execution
- 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.)
- Granted
Links
- 238000012360 testing method Methods 0.000 title claims abstract description 302
- 238000000034 method Methods 0.000 title claims abstract description 213
- 238000004590 computer program Methods 0.000 claims abstract description 62
- 230000008569 process Effects 0.000 claims abstract description 33
- 230000009471 action Effects 0.000 claims description 52
- 238000001514 detection method Methods 0.000 claims description 46
- 230000002950 deficient Effects 0.000 claims description 27
- 238000013459 approach Methods 0.000 claims description 14
- 230000007547 defect Effects 0.000 claims description 13
- 238000012986 modification Methods 0.000 abstract description 6
- 230000004048 modification Effects 0.000 abstract description 6
- 238000011161 development Methods 0.000 description 33
- 238000010200 validation analysis Methods 0.000 description 25
- 230000008901 benefit Effects 0.000 description 13
- 230000006870 function Effects 0.000 description 12
- 230000003068 static effect Effects 0.000 description 10
- 208000024891 symptom Diseases 0.000 description 8
- 238000004088 simulation Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 238000003780 insertion Methods 0.000 description 5
- 230000037431 insertion Effects 0.000 description 5
- 239000011800 void material Substances 0.000 description 5
- 238000013515 script Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 230000005856 abnormality Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 238000012797 qualification Methods 0.000 description 2
- 238000013522 software testing Methods 0.000 description 2
- XXUZFRDUEGQHOV-UHFFFAOYSA-J strontium ranelate Chemical compound [Sr+2].[Sr+2].[O-]C(=O)CN(CC([O-])=O)C=1SC(C([O-])=O)=C(CC([O-])=O)C=1C#N XXUZFRDUEGQHOV-UHFFFAOYSA-J 0.000 description 2
- 238000012356 Product development Methods 0.000 description 1
- 230000002159 abnormal effect Effects 0.000 description 1
- 239000002253 acid Substances 0.000 description 1
- 239000000654 additive Substances 0.000 description 1
- 230000000996 additive effect Effects 0.000 description 1
- 235000000332 black box Nutrition 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
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/3688—Test management for test execution, e.g. scheduling of test suites
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的软件产品的开发通常遵循这样的过程,开发团队负责产品开发和单元测试,产品其他的验证测试工作则由专门的测试团队来负责,验证测试所发现的缺陷由开发团队来更正。单元测试是白盒测试,主要目的是验证代码逻辑,而验证测试则是黑盒测试,用来验证软件功能和表现。
在验证测试期间,可能会发现很多运行时问题,例如非期望的异常以及不正确的或不正常的程序行为。由于测试团队和开发团队是相互独立的,验证测试环境和开发环境也不相同,验证测试中发现的缺陷往往只能通过测试者的文字描述和软件本身记录的日志信息反馈给开发团队。由于测试环境缺乏调试工具,而缺陷描述和日志信息又无法直接调试,这样开发团队必须先根据缺陷描述重建测试环境来进行调试。这通常是非常繁琐和低效的过程。并且有时非常难以再现运行时问题并发现它们的原因。
而且,当开发团队修正了当前发现的缺陷后或者开发了软件新的版本后,因为加入了新的代码,测试团队仍然必须确保之前发现的并已修正的所有缺陷都仍然是被修正的,没有受到当前修改的影响,即进行所谓的回归测试。虽然测试团队必须进行回归测试,但是如果开发团队已经能够提前确保回归测试的正确性,那么测试团队则只要再做一次验证而已,无疑回归测试的效率将会大大提高。因为开发团队验证工具通常是单元测试用例,所以就要求开发团队为每一个已发现的缺陷开发出能够验证其是否被修正的单元测试用例。但是由于前一个问题的原因,调试工作已然复杂,根据缺陷开发单元测试用例往往也是很繁琐的过程,常常被开发团队所忽略。
目前的测试自动化工具,例如Rational Robot和WinRunner等,仅仅针对测试团队和测试过程,其出发点是替代测试者重复的测试动作。它们致力于通过记录和回放用户动作,例如键击和鼠标点击,而不是捕获内部程序行为。它们生成脚本以模拟来自用户和运行时环境的输入。难以确定必须记录多少用户交互以便再现问题。并且由于回放脚本中可能包含一些不相关的动作,再现问题所需要的时间可能不是最佳的。
单元测试目前已在软件开发过程中得到广泛使用。开发者可以在将程序提交测试团队进行验证测试之前通过执行单元测试套件(test suite)来迅速和简单地发现和消除缺陷。一般来说,单元测试的成本远低于验证测试的成本。
目前也存在几种技术和单元测试工具,例如JTest,能够帮助开发者生成单元测试用例。然而,它们只是针对开发团队和开发过程,是根据对代码的静态分析等手段而不是运行时上下文来生成测试用例的。但是单纯的静态分析不能确定程序执行时各程序单元执行的上下文,不能利用运行时上下文和状态创建出可再现运行时问题的测试用例。因此,它们都不能连接测试过程和开发过程,来解决上述问题。
因此,如果能够根据运行时刻的缺陷自动生成单元测试用例,以上两个问题将得以有效的解决:一方面开发团队可以直接使用该测试用例进行调试,省去重建测试环境的工作;另一方面开发团队还可以将此测试用例加入单元测试过程,以确保回归测试的正确性。
标题为“用于监视程序执行的方法和装置”(Method And ApparatusFor Monitoring The Execution Of A Program)的美国专利6,738,778公开了一种跟踪调试工具,它可以在程序中被调用,能够自动收集并打印程序运行信息(如程序当前运行在哪个类的哪一行)。然而,此专利只是打印用于调试的跟踪信息,而不是生成单元测试用例。也不能主动发现程序运行中的错误和异常,并以此触发生成单元测试用例的。
标题为“用于在软件开发中集成自动软件测试”(Method ForIntegrating Automated Software Testing With Software Development)的美国专利6,067,639公开了一种需要集成在开发过程中的自动化软件测试方法。该方法需要软件开发者在开发阶段就同时开发一些测试操作对象(Test Operation Object),一个测试操作对象中实现对程序的某种操作的调用。这样在测试时,软件测试者就可以编写自动测试程序或脚本,通过调用这些被测试程序中的测试操作对象来自动化测试软件。由于这些对象提供了统一的接口(Interface),这样测试者就不需要为不同的测试环境开发不同的自动测试程序或脚本。然而,该专利需要软件开发者根据统一的接口开发测试操作对象,实际上相当于在开发测试用例,而不是自动生成单元测试用例。并且,它要求开发者在开发程序时就一起开发测试操作对象。
从以上所述可见,本领域中显然需要一种能够根据运行时刻的缺陷自动生成单元测试用例的方法和***。
发明内容
为解决现有技术中由于无法在测试环境中生成单元测试用例而导致的难以在调试时再现运行时问题及便利于回归测试的上述问题并带来其他益处,而做出了本发明。
根据本发明的一个方面,提供了一种用于自动生成可再现运行时问题的计算机程序单元测试用例的方法,该方法包括以下步骤:根据计算机程序中所关注的一个或多个目标程序单元和可能发生的运行时问题修改该程序;测试执行该修改后的程序;以及根据在所述所关注的目标程序单元的执行中出现的所述所关注的运行时问题自动生成单元测试用例。
根据本发明的另一个方面,提供了一种用于自动生成可再现运行时问题的计算机程序单元测试用例的方法,该包括以下步骤:根据该计算机程序的测试后生成的测试缺陷描述,确定缺陷的性质及发生缺陷的程序单元;根据所确定的缺陷的性质及发生缺陷的程序单元修改该程序;测试执行该程序;以及根据检测到的所述缺陷以及所述捕获代码记录的执行路径及上下文生成单元测试用例。
根据本发明的另外一个方面,提供了一种计算机程序测试方法,该方法包括以下步骤:在所述程序中加入捕获代码和问题检测代码,其中所述捕获代码被配置为用于记录该程序中所关注的目标程序单元的执行路径及执行上下文,而所述问题检测代码被配置为用于检测并记录该程序中所述所关注的程序单元的执行所可能抛出的所关注的非期望异常以及所可能产生的所关注的预定行为规则的违反;以及测试执行经过所述加入的该程序,以检测并记录所述所关注的非期望异常以及预定行为规则的违反。
根据本发明的进一步的方面,还提供了一种用于自动生成可再现运行时问题的计算机程序单元测试用例的***,该***包括:修改模块,用于根据计算机程序中所关注的一个或多个目标程序单元和可能发生的运行时问题修改该程序;测试执行模块,用于测试执行所述被修改后的程序;以及单元测试用例生成模块,用于根据在所述所关注的程序单元的执行中出现的所述所关注的运行时问题自动生成单元测试用例。
根据本发明的再一个方面,提供了一种计算机程序测试装置,该装置包括:修改模块,用于在所述程序中加入捕获代码和问题检测代码,所述捕获代码被配置为用于记录该程序中所关注的目标程序单元的执行路径及执行上下文,而所述问题检测代码被配置为用于检测并记录该程序中所述所关注的程序单元的执行所可能抛出的所关注的非期望异常以及所可能产生的所关注的预定行为规则的违反;以及测试执行模块,用于测试执行经过所述加入的该程序,以检测并记录所关注的目标程序单元的执行中出现的所述所关注的非期望异常以及预定行为规则的违反。
根据本发明的另外一个方面,提供了一种包含计算机可读介质的计算机程序产品,该计算机可读介质具有包含在其中的用于使得具有数据处理能力的***执行根据前述方法权利要求中任何一个的方法的步骤的程序指令。
从以上所述可见,本发明的主要目是帮助开发团队修正缺陷以及确保回归测试的正确性,以此来提高软件开发和测试的效率。同时,由于本发明可以定义产生测试用例的行为规则,因此也有可能在测试过程中发现尚未表现出的潜在的缺陷,从而帮助开发团队或者测试团队发现缺陷。
本发明所带来的主要益处包括:
可根据运行时上下文生成单元测试用例以再现运行时问题,这样,由于排除了不相关的操作,再现运行时问题所需的执行时间大为减少,从而便利了对程序的调试;
开发者仅需要围绕所述单元测试用例工作,而无需创建验证测试中的复杂环境,从而大大节约了时间和努力;
当施加了新的代码更新后,开发者可使用单元测试用例来简化对旧问题的验证;以及
有助于发现潜在的缺陷,即有助于对程序的验证测试。
附图说明
所附权利要求中阐述了被认为是本发明的特点的新颖特征。但是,通过在结合附图阅读时参照下面对说明性实施例的详细说明将更好地理解发明本身以及其优选使用模式、另外的目标以及优点,其中:
图1示出了根据本发明的实施例用于为计算机程序自动生成可再现运行时问题的单元测试用例的方法的示意性流程图;
图2示出了根据本发明的实施例的用于检测非期望的异常的过程的示意性流程图;
图3示出了根据本发明的实施例的用于检测预定行为规则的违反的过程的示意性流程图;
图4示出了在被测试程序的执行过程中一对象的交互过程的示意图;
图5示出了根据本发明的一个实施例的图1所示方法中根据问题列表以及执行路径和执行上下文生成单元测试用例步骤中的具体步骤的流程图;
图6示出了根据本发明的另一个实施例的用于自动生成可再现运行时问题的计算机程序单元测试用例的方法的流程图;
图7示出了根据本发明的实施例的用于自动生成可再现运行时问题的计算机程序单元测试用例的***的框图;以及
图8示出了根据本发明的进一步的实施例的单元测试用例生成模块的结构示意图。
具体实施方式
本发明公开了一种可自动生成可再现程序运行时问题的单元测试用例的方法和***。该***或方法使用加入的检测代码来检测预先确定的运行时问题,例如非期望的异常和非正常的程序行为。同时,该***或方法使用加入的捕获代码来收集所确定对象的执行上下文和其执行路径。当在测试过程中发生问题时,该***或方法可生成该对象的单元测试用例。该单元测试用例可通过以所记录的上下文重放该对象的执行路径来再现该问题。
下面参照附图描述本发明的实施例。然而,应当理解的是,本发明并不限于所介绍的特定实施例。在附图及以下描述中所给出的大量细节只是为了说明之用,以便使本领域的技术人员能充分理解本发明的基本思想和实现本发明,而不构成对本发明的限制。
图1示出了根据本发明的实施例用于为计算机程序例如Java程序自动生成可再现运行时问题的单元测试用例的方法的一般步骤。
在步骤101中,确定所关注的目标程序单元和可能发生的运行时问题。对于面向对象的程序例如Java程序来说,所述目标程序单元为目标类。步骤101优选地在开发环境中执行。该步骤既可以在GUI工具中进行,即用户通过GUI工具确定目标类和运行时问题,而由GUI工具根据用户的确定生成将提供给下一步骤的包含确定的目标类和运行时问题的配置信息;也可以由用户手工进行,即由用户手工编制将提供给下一步骤的包含确定的目标类和运行时问题的配置信息;也可以与将在下面描述的用于修改目标程序的下一个步骤组合在一起,即在修改目标程序时确定所关注的目标类和运行时问题,也就是所关注的目标类和运行时问题体现在如何以及在何处对目标程序进行修改中,并且在这种情况下,该方法中可以没有该确定步骤101。
目标类是需要进行单元测试的类。目标类的所有对象将被跟踪以生成单元测试用例。目标类可通过其限定名被确定。
所述运行时问题可以是非期望的异常或预定行为规则的违反。非期望的异常是由对象方法抛出的未经检查的运行时异常,例如Java程序中的java.lang.NullPointerException,即程序某处试图在一个null对象上调用对象方法。它们往往是缺陷产生的原因。非期望的异常可以通过方法的限定名和异常的类别来确定。预定的行为规则描述了所确定对象的正常行为,包括正确的方法调用顺序、有效的方法参数和返回值等。
在一优选实施例中,在步骤101之前,还包括定义行为规则的步骤,以便定义将在步骤101中确定的预定行为规则。该定义行为规则的步骤优选地在开发环境中执行。一种定义规则的方法是通过对每一条规则确定规则模板、目标方法以及开发检验代码。规则模板是指预先定义好的一些模式,例如“Never call<X>when<CONDITION>”,“Never call<X>before<Y>of an object when<CONDITION>”等等。目标方法即是定义模板中的“<X>”、“<Y>”具体是什么类的什么方法,如确定<X>是java.lang.String.charAt(int),这决定了检验代码***的位置。检验代码即是在目标方法被调用的前后对方法的对象、参数、返回值等等实现模板中的“<CONDITION>”检验。在本发明的一个优选实施例中,检验代码通过继承一个规则抽象类来实现,如对于上述模板“Never call<X>when<CONDITION>”需要继承AbstractNeverCallXRule类,并重载其中的matchedX方法即可针对取得的上下文进行检验。规则的抽象类是模板的一部分,通过它隐藏了模板的具体实现,从而开发规则时可以只专注于检验代码的开发。
应指出,通过规则模板以及规则的抽象类来定义待确定的规则的方法只是本发明的定义和确定规则的一种实现方式,本发明也可采用其他定义和确定规则的方式,例如通过直接***规则的检验代码(定义和确定规则的步骤隐含在***检验代码的过程中)等等。
作为规则的示例,例如,Java全球化功能中可以***点处理(CodePoint Handling)、字符串处理(String Handling)、编码(Encoding)等规则。作为一个更具体的示例,java.lang.String.substring(int beginIndex,int endIndex)方法用于从一个字符串中取出一段子字符串,它简单地从一个16位的char类型数组char[]中取出由beginIndex和endIndex限定的子char[]。然而由于有一些Unicode补充字符是由2个16位的char表示的(Surrogate),比如字符″\uD840\uDC00″表示一补充汉字,此外某些文字中的组合字符,比如字符″″,也可以使用比如″\u0041\u0300″表示(字符A和组合字符一瞥),所以在使用String.substring时,很有可能取出的子串含有不完整的字符表示。于是可以定义这样一条规则,在程序中使用到的所有String.substring之前检验传入的参数和字符串本身,如果发现beginIndex和endIndex正位于一个不完整的字符上,则会触发一个规则违例。这条规则还可以定义得更宽,规定只要字符串含有多char表示的字符,就不能直接使用substring方法,而不论beginIndex和endIndex是否会取得不完整字符,因为它可导致潜在的缺陷。
在步骤102,根据确定的目标类和运行时问题修改目标程序,即在目标程序中加入捕获代码(图1中的虚线框部分)和问题检测代码(图2和图3中的虚线框部分)。优选地,步骤102在开发环境中执行。
在本发明的一优选实施例中,在编译后的Java字节码程序中,加入所述捕获代码和问题检测代码。可使用字节码***工具来修改目标程序的类文件,以加入捕获代码和问题检测代码。但是在本发明的其他实施例中,如下文中所述,提供了可以在源代码中被调用的方法,来人工或通过工具加入所述捕获代码和问题检测代码以触发测试用例的生成。
捕获代码主要用于记录目标类对象的每一次外部方法调用以及所有方法调用参数的值,作为目标类对象的执行路径和执行上下文。
有很多修改字节码的方法可以捕捉方法调用的参数和结果,不管是***在方法调用的地方还是方法体内部。在JVM中,方法调用只有一个字节码,传入方法的参数就是在执行方法调用的字节码之前的JVM参数栈中的所有对象,在该方法调用字节码执行完成之后,JVM参数栈会被清空并填上返回值。因此一种简单的获得上下文的方法是替换此方法调用的字节码,使其调用另一个对象的静态方法,此静态方法的参数和返回值类型和原有方法基本相同,只是参数里多出一个this object。第二种方法是在此调用字节码之前和之后***字节码以获取栈中对象(参数)并恢复栈。当然还有一种方法就是直接修改目标方法本身的字节码,只需要修改一处。使用直接修改目标方法时,对于某些没有办法静态修改的类,如JRE中的类(String等),必须采用动态修改的方式,即在JVM载入后进行修改。
此外,在一个完整的单元测试用例中,除被测试的目标类对象之外,还存在着需要模拟的对象(mocked object)和其他无需模拟的对象,这些是目标类对象的方法调用中的对象参数。对于Java程序来说,无需模拟的对象通常是某些Java API中的类,它们可被复制。可以确定需要被模拟的对象,如果没有确定被模拟的对象类,那么所有不被识别为无需模拟的对象将会被作为需要被模拟的对象对待。捕获代码还将被加入在对需要模拟的对象的方法的调用的前后,以记录需要被模拟的对象在被测试对象的方法中表现出的行为,即被调用的方法以及其返回值等数据。通过这两部分的记录,可以使用已有的针对Java的模拟技术(例如JMock)来生成模拟对象,进而生成单元测试用例。一段实现捕获代码的伪码可以简单表示如下:
//用于记录被测试对象的执行路径和上下文
class Captor_UnitTestObject{
//该方法将被***在目标对象的方法调用之前
public static void beforeCall(String className,String methodName,
String methodSig,Object thisObject,Object[] args){
//记录执行路径
RuntimeContextRecorder rc=RuntimeContextLogger.
getRuntimeContextRecorder(className,thisObject);
rc.recordContext(methodName,methodSig,thisObject,args);
//注册需要在此方法执行中关注的被模拟的对象
rc.beginMockingMonitor(args);
}
//该方法将被***在目标对象的方法调用之后
public static void afterCall(String className,Object thisObject){
//取消对被模拟对象的关注
RuntimeContextRecorder rc=RuntimeContextLogger.
getCurrentRuntimeContextRecorder();
rc.endMockingMonitor();
}
}
//用于记录被模拟对象的行为
public class Captor_MockedObject{
//该方法将被***在目标对象的方法调用之前
public static void beforeCall(String className,String methodName,
String methodSig,Object thisObject,Object[]args){
//记录调用的参数
ObjectMocker om=RuntimeContextLogger.
getCurrentRuntimeContextRecorder().getMocker();
om.addRecordBeforeCall(className,methodName,
methodSig,thisObject,args);
}
//该方法将被***在目标对象的方法调用之后
public static void afterCall(String className,Object thisObject,Object
returnedObject,Throwable thrownObject){
//记录调用的结果
ObjectMocker om=RuntimeContextLogger.
getCurrentRuntimeContextRecorder().getMocker();
om.addRecordAfterCall(className,thisObject,returnedObject,
thrownObject);
}
}
其中,RuntimeContextLogger是一个负责管理执行上下文信息的类,它维护了所有关注的对象的上下文信息。RuntimeContextRecorder是一个负责记录某个关注对象上下文信息的类,通过调用RuntimeContextLogger.getRuntimeContextRecorder(Class className,Object thisObject)来获得,其recordContext方法即可记录当前的上下文信息。BeginMockingMonitor(Object[]args)方法则启动对所有args对象的上下文捕获用来生成mock对象,endMockingMonitor()方法结束mock对象的上下文捕获。ObjectMocker负责记录捕获的mock对象的上下文。
应指出,上述伪码和各类只是实现本发明的捕获代码的示例,而不构成对本发明的限制。本发明的捕获代码也可以多种其他代码和类来实现。
问题检测代码被加入在每个需要检测的方法的前后。如图2所示。某些代码被加入在方法调用之后以检测所关注的例如在步骤101中确定的非期望的抛出的异常。如图3所示,其他代码被加入在方法调用之前和之后,以在执行上下文例如调用顺序、参数和返回值中发现对所关注的例如在步骤101中确定的行为规则的违反,进而由此来触发单元测试用例的生成。优选地,问题检测代码用于当发现问题时,将其记入一问题列表,以便在测试执行结束后生成测试用例。作为另一种选择,问题检测代码也可用于每当发现一个问题时,即根据该问题以及捕获代码所记录的执行路径和执行上下文生成一测试用例。一段实现上述substring规则的检测代码的伪码可以简单表示如下:
public class Detective_StringSubstring{
//该方法将被***在String.subString的方法调用之前
public static void beforeCallX(String className,String methodName,
String methodSig,Object thisObject,Object[]args){
AbstractNeverCallXRule rule=DetectiveManager.
loadRule(″Globalization.CodePointHandling.StringSubString″,thisObject);
//rule.matchedX中含有检验代码
if(rule.matchedX(thisObject,args)){
DetectiveManager.addViolation(rule);
DetectiveManager.generateTestCase();
}
}
}
其中,AbstractNeverCallXRule是一种规则的抽象类,用于隐藏规则的具体实现。DetectiveManager用来载入各种规则类,通过对规则类中方法的调用来检验上下文,然后决定是否出发generateTestCase()。
应指出,上述伪码和各类只是实现本发明的检测代码的示例,而不构成对本发明的限制。本发明的检测代码也可以多种其他代码和类来实现。
优选地,将在步骤102修改的目标程序提供给测试团队,以在测试环境中进行测试。
在步骤103中,测试执行目标程序。优选地,步骤103在测试环境中执行。
在测试执行过程中,在目标类的每个方法调用之前,捕获代码捕获该调用和该调用的参数。然后执行原来的方法调用。在方法调用的执行过程中,检测代码试图发现非期望和异常和行为规则的违反,并优选地将其记入问题列表。
在步骤104中,生成单元测试用例。
在目标程序终止后,***可使用所记录的执行路径和执行上下文以及问题列表生成单元测试用例。
作为另一种选择,也可在目标程序执行过程中,每当检测到一个所关注的问题,就根据该问题以及所记录的执行路径和执行上下文生成一个测试用例。
对于Java程序,可将单元测试用例形成为包含用于JUnit的测试用例类的Java源文件。
所生成的单元测试用例描述了对象从构造到发现问题为止的执行路径以及执行上下文。执行路径包括该对象的一系列方法调用,除了由它的其他方法进行的内部方法调用。执行上下文包括各方法调用所需的参数值。
例如,名称为testObj的对象在运行时具有如图4所示的交互。对象testObj是类ClassTarget的实例。它是通过调用构造器ClassTarget(String)创建的。在程序运行期间的某些时候,方法methodA、methodB、methodC和methodD被依次调用。当methodD被调用时发生问题。由于methodC是由methodB内部调用的,所以对象testObj的执行路径应当是ClassTarget->methodA->methodB->methodD.
传递给方法调用的参数在单元测试用例中被当作应被复制或被模拟的测试数据。原始类型(例如,int、float和char)的值和可序列化(serializable)的对象(例如,图4中的字符串“test”)可以被复制,而其他不可序列化(即不可被复制)的对象(例如,图4中的obj_b)可以被模拟。只有当一个对象的所有字段也是可序列化的或者是原始类型的时候,该对象才是可序列化的。复制物或模拟对象在运行时可提供与原始的被复制物或被模拟对象相同的行为。
当修改后的该程序执行时或执行后,***可生成如下的测试用例。
String s1=“test”;
String s2=“aaa”;
DataObject o1=new Mock_DataObject();
ClassTarget testObj=new ClassTarget(s1);
testObj.methodA(s2);
testObj.methodB(o2);
testOjb.methodD();//发现问题
图5示出了根据本发明的一个实施例的上述用于生成可再现运行时问题的测试用例的方法中的根据问题列表以及执行路径和执行上下文生成单元测试用例的步骤104中的子步骤。
如图所示,在步骤501,遍历问题列表中所有非期望异常或预定行为规则的违反。
在步骤502,对于所遍历的每一项非期望异常或预定行为规则的违反,获得所述捕获代码所记录的相应的执行路径和执行上下文以及所述不可被复制的对象在目标类中的被调用方法、调用参数及其返回值。
在步骤503,根据所访问的所述不可被复制的对象在目标类中的被调用方法、调用参数及其返回值生成所述不可被复制的对象的模拟对象。优选地,如本领域的技术人员可理解的,可使用以下方法来生成模拟类。生成被模拟对象的子类,作为模拟该对象的模拟类。该子类中的模拟方法将覆盖被模拟对象中的原始方法并返回与原始方法的返回值相同的值。这说是说,该子类的实例对象具有与原始对象相同的行为。如本域的技术人员可理解的,还可通过上面提到的***字节码的方法动态实现模拟。
在步骤504,根据所述所有相关的执行路径及执行上下文以及所生成的模块类生成测试数据结构和测试目标执行路径,并将它们组合成单元测试用例。
所生成的单元测试用例可被提供给开发团队以便利于对在测试执行中所发现的问题进行调试,或者便利于在程序被修改后进行的回归测试。
以上主要以Java面向对象程序为例描述了本发明的用于自动生成可再现运行时问题的单元测试用例的方法的实施例,应指出的是,本发明也适用于其他的面向对象程序。而且因为本发明的核心思想并不依赖面向对象,所以本发明也适用于非面向对象的程序。比如,在非面向对象的程序中,可以以单个函数作为进行单元测试的程序单元。这样,根据本发明的捕获代码和问题检测代码将用于记录所确定函数的执行路径和执行上下文,以及检测在其执行过程中所可能发生的所确定的非期望异常或预定规则的违反,并据此生成单元测试用例。
以上描述的根据本发明的实施例的用于自动生成可再现运行时问题的单元测试用例的方法主要是根据在验证测试之前确定的所关注的目标类及运行时问题修改目标程序,然后通过在验证测试过程中执行该修改后的目标程序来自动生成可再现运行时问题的单元测试用例的。根据本发明的用于自动生成可再现运行时问题的单元测试用例的方法另一个实施例,还可以不是在验证测试之前确定所关注的目标类和运行时问题并修改程序,而是首先进行正常的验证测试并产生缺陷描述;或者可以在根据本发明的上述实施例的方法中的测试执行步骤中除自动生成可再现所确定的运行时问题的单元测试用例之外,生成关于其他未确定的运行时问题的缺陷描述。开发者在得到所述缺陷描述后经过简单调试确定缺陷发生的代码位置,然后通过自定义新的规则或者是直接在代码中***能够触发本发明生成测试用例的异常代码,来直接得到测试用例。这些测试用例可以被加入到自动化的单元测试过程中,避免手工开发单元测试用例,来降低验证新代码变更的代价。
图6示出了根据本发明的该另一个实施例的用于自动生成可再现运行时问题的计算机程序单元测试用例的方法的步骤。如图所示,在步骤601,根据该计算机程序的验证测试后生成的测试缺陷描述,确定缺陷的性质及发生缺陷的程序单元。在步骤602,在所述程序中加入捕获代码和问题检测代码,所述捕获代码被配置为用于记录该程序中的所述程序单元的执行路径及执行上下文,而所述问题检测代码根据所确定的缺陷的性质被配置为用于检测该程序中所述程序单元的执行中的所述缺陷。在步骤603,测试执行该程序。最后在步骤604,根据检测到的所述缺陷以及所述捕获代码记录的相关的执行路径及上下文生成单元测试用例。
根据本发明的另一个方面,还提供了一种用于对计算机程序进行调试的方法。优选地,该方法包括以下步骤:使用前述用于自动生成可再现运行时问题的单元测试用例的方法在验证测试环境中自动生成该计算机程序的单元测试用例;以及通过在开发环境中运行所述单元测试用例来进行调试。由于所述单元测试用例是在验证测试期间针对开发者预先确定的目标类和可能发生的运行时问题自动生成的,所以在开发环境中运行所述单元测试用例将再现在测试环境中所遇到的运行时问题,从而便利了程序的调试和问题的解决。
根据本发明的又一个方面,还提供了一种用于对计算机程序进行回归测试的方法。优选地,该方法包括以下步骤:使用前述用于自动生成单元测试用例的方法生成该计算机程序的单元测试用例;以及在该计算机程序被修改后,通过在所述修改的计算机程序上运行所述单元测试用例来对该计算机程序进行回归测试。使用这种方法,可以自动生成可用于回归测试的单元测试用例,避免了开发者进行繁琐的手工开发。所自动生成的单元测试用例既可由开发者在对程序进行修改或升级后用于检查旧的已被解决的问题是否依然是被解决的,也可由测试者用于进行相同的检查,或由开发者和测试者双方使用。
根据本发明的再一个方面,还提供了一种计算机程序测试方法。优选地,该方法包括以下步骤:在所述程序中加入捕获代码和问题检测代码,其中所述捕获代码被配置为用于记录该程序中所关注的目标程序单元的执行路径及执行上下文,而所述问题检测代码被配置为用于检测并记录该程序中所述所关注的程序单元的执行所可能抛出的所关注的非期望异常以及所可能产生的所关注的预定行为规则的违反;以及测试执行经过所述加入的该程序,以检测并记录所述所关注的非期望异常以及预定行为规则的违反。优选地,该方法还包括定义规则的步骤,以便定义所述所关注的预定行为规则。一种定义规则的方法是通过为每一条规则确定规则模板、目标方法和开发检验代码。通过这种方法,有可能在测试过程中发现尚未表现出的潜在的缺陷,以有助于程序测试。
以上描述了根据本发明的实施例的用于自动生成可再现运行时问题的单元测试用例的方法、以及基于该方法的用于对计算机程序进行调试的方法、用于对计算机程序进行回归测试的方法、以及计算机程序的测试方法。相应地,本发明还提供了一种用于自动生成可再现运行时问题的计算机程序单元测试用例的***。
图7示出了根据本发明的实施例的用于自动生成可再现运行时问题的计算机程序单元测试用例的***700的框图。如图所示,该***700包括:修改模块703,该修改模块用于根据计算机程序中所关注的一个或多个目标程序单元和运行时问题修改该程序;测试执行模块704,该测试执行用于测试执行所述被修改后的程序;以及单元测试用例生成模块705,该单元测试用例生成模块用于根据在所述所关注的程序单元的执行中出现的所述所述所关注的运行时问题自动生成单元测试用例。
优选地,所述运行时问题包括非期望的异常和预定行为规则的违反。
优选地,所述修改模块703被配置为用于向该程序加入捕获代码,所述捕获代码被配置为用于记录该程序中所述所关注的程序单元的执行路径和执行上下文;以及向该程序加入问题检测代码,所述问题检测代码被配置为用于检测所述程序单元的执行所可能抛出的所关注的非期望异常以及所可能产生的所关注的预定行为规则的违反。
优选地,所述问题检测代码还被配置为用于每当检测到所述非期望异常或预定行为规则的违反时,就触发所述单元测试用例生成模块705根据所述捕获代码所记录的执行路径及执行上下文生成单元测试用例。
作为另一种选择,所述问题检测代码还被配置为用于每当检测到所述非期望异常或预定行为规则的违反时,将所述非期望异常或预定行为规则的违反记入问题列表,并且所述单元测试用例生成模块705被配置为用于当所述测试执行模块进行的测试执行过程结束后,根据所述问题列表以及所述捕获代码所记录的执行路径及执行上下文生成单元测试用例。
优选地,所述计算机程序为面向对象的程序,更具体地例如为Java字节码程序,所述程序单元为类,所述执行路径为所述目标类的各实例对象的每一次外部方法调用,并且所述执行上下文为所述目标类的各实例对象的每一次外部方法调用的参数的值。但应指出,本发明也适用于非面向对象的程序。比如,在非面向对象的程序中,可以以单个函数作为进行单元测试的程序单元。这样,根据本发明的捕获代码和问题检测代码将用于记录确定函数的执行路径和执行上下文,以及检测在其执行过程中所可能发生的所确定的非期望异常或预定规则的违反,并据此生成单元测试用例。
优选地,所述捕获代码进一步被配置为用于记录所述目标类的各实例对象的调用参数中不可被复制的对象的被调用方法、调用参数及其返回值,并且所述单元测试用例自动生成模块705被配置为用于:根据所述捕获代码所记录的所述目标类的各实例对象的调用参数中不可被复制的对象的被调用方法、调用参数及其返回值生成所述不可被复制的对象的模拟对象;以及根据所述捕获代码所记录的执行路径及执行上下文以及所述生成的模拟对象生成单元测试用例。
修改模块703的输入为要对其生成测试用例的目标程序以及用户所确定的所关注的目标类和运行时问题,其输出为经过修改的包含所述捕获代码和问题检测代码的目标程序。该经过修改的目标程序将被提供给测试执行模块704进行测试执行。
在本发明的一优选实施例中,所述修改模块703是字节码***工具例如普通的字节码***工具,其通过修改目标程序的类文件来加入所述捕获代码和问题检测代码。但是,在本发明的其他实施例中,还提供了可以在源代码中被调用的方法。这样,修改模块703可以为用于在源代码中加入所述捕获代码和问题检测代码的工具。或者,可以人工加入所述捕获代码和问题检测代码以触发测试用例的生成,并且在这种情况下,修改模块703可被理解为进行人工加入时的编辑工具。
在本发明的一优选实施例中,所述测试执行模块704为普通的测试***或其部分。在本发明的其他实施例中,该测试执行模块704为专用于本发明的测试模块。此外,测试执行模块704与所述单元测试用例生成模块705既可以本领域的技术人员可知的多种方式,例如以插件的方式或者以包含这两种功能的单个模块的方式,集成在一起;也可以作为两个在物理上连接在一起的分立的模块;也可以作为两个仅仅在逻辑在连接在一起、在物理上相互分离和独立的模块,并且在这种情况下两个模块仅仅是依靠测试执行模块704所输出的、作为单元测试用例生成模块705的输入的执行路径和执行上下文记录以及运行时问题列表形成逻辑上的连接关系。
单元测试用例生成模块705的输入为测试执行模块704所输出的执行路径和执行上下文记录以及发现的问题,其输出为所生成的单元测试用例。所述单元测试用例可被提供给开发团队以便利于对在测试执行中所发现的问题进行调试,或者便利于在程序被修改后进行的回归测试。优选地,所述单元测试用例生成模块705被配置为用于将单元测试用例形成为包含JUnit的测试用例类的Java源文件。
优选地,该***700还包括确定模块702,该确定模块用于确定所述程序中所述所关注的目标程序单元以及所述所关注的非期望异常和/或预定行为规则的违反。
确定模块702的输出是包含目标类和运行时问题的配置信息。确定模块702可以是一GUI工具。该工具除了让用户确定关注的目标类以及异常之外,还会列出所有已定义的规则树,让用户勾选需要应用的规则。当然,GUI工具实际上只是提供了一个方便的手段来生成这些提供给第二个步骤的配置信息,用户完全可以手工编写这些配置,用于只有命令行可供使用的场合。此外,确定模块702的功能也可以隐含在修改模块703的操作中,即在通过工具或手工修改目标程序的过程中在确定在何处修改及如何修改目标程序时体现所关注的目标类和运行时问题,并且在这种情况下,该***700将没有确定模块702。
优选地,该***700还包括规则定义模块701,该规则定义模块用于定义可由所述确定模块702确定的预定行为规则。预定行为规则描述了所确定程序单元在运行中所应当表现出的行为,包括正确的方法调用顺序、有效的方法参数和返回值等。定义好的规则可被存储在一规则库中以便由确定模块702从中检索,也可以被直接提供给确定模块使用。可以针对每一待测试的程序或一程序的每一次测试生成一组行为规则,也可以创建由多个程序共享的行为规则库。
该规则定义模块701优选地被配置为用于通过以下步骤来定义规则:确定包含目标方法和检验代码的占位符的规则模板;确定目标方法;以及开发检验代码。规则模板是指预先定义好的一些模式,例如“Never call<X>when<CONDITION>”,“Never call<X>before<Y>of an object when<CONDITION>”等等。目标方法即是定义模板中的“<X>”、“<Y>”具体是什么类的什么方法,这决定了检验代码***的位置。检验代码即是在目标方法被调用的前后对方法的对象、参数、返回值等等实现模板中的“<CONDITION>”检验。在本发明的一个优选实施例中,检验代码通过继承一个规则抽象类来实现,如对于上述模板“Never call<X>when<CONDITION>”需要继承AbstractNeverCallXRule类,并重载其中的matchedX方法即可针对取得的上下文进行检验。规则的抽象类是模板的一部分,通过它隐藏了模板的具体实现,从而开发规则时可以只专注于检验代码的开发。
应指出,通过规则模板以及规则的抽象类来定义待确定的规则的方法只是本发明的定义和确定规则的一种实现方式,本发明也可采用其他定义和确定规则的方式,例如通过直接***规则的检验代码(定义和确定规则的步骤隐含在***检验代码的过程中)等等。
优选地,所述修改模块703、确定模块702、和规则定义模块701位于开发环境中,而所述测试执行模块704、和单元测试用例生成模块705位于测试环境中。但其他安置方式也是可能的,例如修改模块703、确定模块702、规则定义模块701以及测试执行模块704、和单元测试用例生成模块705均位于开发环境中,或均位于测试环境中,或同时位于两个环境中,或位子其他环境中。
图8示出了根据本发明的进一步的实施例的单元测试用例生成模块705的结构示意图。如图所示,单元测试用例生成模块705包括:问题列表访问模块801,用于遍历由测试执行模块704所生成的问题列表中的每一项非期望异常或预定行为规则的违反;执行路径及上下文访问模块802,用于针对所遍历的每一项非期望异常或预定行为规则的违反,访问所述捕获代码所记录的相应的执行路径和执行上下文以及所述不可被复制的对象在目标类中的被调用方法、调用参数及其返回值;模拟对象构造模块803,用于根据所访问的所述不可被复制的对象在目标类中的被调用方法、调用参数及其返回值生成调用参数中的不可被复制的对象的模拟对象;以及单元测试用例构造模块804,用于根据所访问的执行路径及执行上下文以及所生成的模拟对象构造单元测试用例。
以上描述的本发明的实施例的用于自动生成可再现运行时问题的单元测试用例的***700主要用于这样的场景,即根据在验证测试之前确定的所关注的目标类及运行时问题修改目标程序,然后通过在验证测试过程中执行该修改后的目标程序来自动生成可再现运行时问题的单元测试用例。然而,根据本发明的实施例的该用于自动生成可再现运行时问题的单元测试用例的***700还可以用于这样的场景,即不是在验证测试之前确定所关注的目标类和运行时问题并修改程序,而是首先进行正常的验证测试并产生缺陷描述;或者可以在上述在验证测试之前确定所关注的目标类及运行时问题的场景中,在测试执行步骤中除自动生成可再现所确定的运行时问题的单元测试用例之外,还生成关于其他未确定的运行时问题的缺陷描述。在这样的场景中,开发者在得到所述缺陷描述后经过简单调试确定缺陷发生的代码位置,然后通过自定义新的规则或者是直接在代码中***能够触发本发明生成测试用例的异常代码,来直接得到测试用例。这些测试用例可以被加入到自动化的单元测试过程中,避免手工开发单元测试用例,来降低验证新代码变更的代价。
当根据本发明的实施例的用于自动生成可再现运行时问题的计算机程序单元测试用例的***用于这样的场景时,所述规则模块701所定义的、和所述确定模块702所确定的规则是从在验证测试后生成的测试缺陷描述中得出的,所述确定模块702所确定的所关注的异常和目标类也是从测试缺陷描述中得出的。然后,在经修改模块703根据所述得出的目标类以及异常和/或规则修改了目标程序之后,优选地在开发环境中的测试执行模块704中进行测试运行,并由单元测试用例生成模块705根据在测试执行中所生成的执行路径和执行上下文以及运行时问题生成单元测试用例。该单元测试用例将主要用于未来对该目标程序进行的回归测试。
根据本发明的另一个方面,还提供了一种用于对计算机程序进行调试的***。优选地,该***包括:前述任何一种用于自动生成可再现运行时问题的单元测试用例的***700;以及调试装置,用于通过运行所述用于自动生成可再现运行时问题的计算机程序单元测试用例的***700所生成的单元测试用例来对计算机程序进行调试。由于所述单元测试用例是在验证测试期间针对开发者预先确定的目标类和可能发生的运行时问题自动生成的,所以在开发环境中运行所述单元测试用例将再现在测试环境中所遇到的运行时问题,从而便利了程序的调试和问题的解决。
根据本发明的又一个方面,还提供了一种用于对计算机程序进行回归测试的***。优选地,该***包括:前述任何一种用于自动生成可再现运行时问题的单元测试用例的***700;以及回归测试装置,用于在该计算机程序被修改后,通过在所述修改的计算机程序上运行所述用于自动生成可再现运行时问题的计算机程序单元测试用例的***700在该计算机程序被修改之前所生成的单元测试用例来对该计算机程序进行回归测试。使用这种方法,可以自动生成可用于回归测试的单元测试用例,避免了开发者进行繁琐的手工开发。所自动生成的单元测试用例既可由开发者在对程序进行修改或升级后用于检查旧的已被解决的问题是否依然是被解决的,也可由测试者用于进行相同的检查,或由开发者和测试者双方使用。
根据本发明的另外一个方面,还提供了一种计算机程序测试装置。优选地,该装置包括:修改模块,用于在所述程序中加入捕获代码和问题检测代码,所述捕获代码被配置为用于记录该程序中所关注的目标程序单元的执行路径及执行上下文,而所述问题检测代码被配置为用于检测并记录该程序中所述所关注的程序单元的执行所可能抛出的所关注的非期望异常以及所可能产生的所关注的预定行为规则的违反;以及测试执行模块,用于测试执行经过所述加入的该程序,以检测并记录所关注的目标程序单元的执行中出现的所述所关注的非期望异常以及预定行为规则的违反。优选地,该装置还包括规则定义模块,用于定义所述所关注的预定行为规则。优选地,该规则定义模块被配置为用于通过为每一条规则确定规则模板、目标方法以及开发检验代码来定义规则。使用这种计算机程序测试装置,有可能发现尚未表现出的潜在的缺陷,以有助于程序测试。
以上参照附图描述了根据本发明的实施例的用于自动生成可再现运行时问题的测试用例的方法和***,用于对计算机程序进行调试的方法和***,用于对计算机程序进行回归测试的方法和***,以及计算机程序的测试方法和***。
应理解,附图仅作说明之用,而不构成对本发明的限制。附图可以但不一定示出本发明的某单个实施例,而可以示出多个实施例的组合。此外,可以考虑用上文中所述的特征和元素的任意组合来实施和实践本发明,而无论它们是否涉及不同的实施例。相关领域内的技术人员可认识到,可实现本发明而没有特定实施例的一个或多个特定特征或优点。在另外的情况下,可在一些实施例内实现另外的特征和优点,而它们可能不存在于本发明的任何实施例内。涉及特征和优点的语言应被理解为意指与实施例相联系地描述的特定特征、优点和特性被包含在本发明的至少一个实施例内。因此,此整个说明书内的对特征和优点的讨论以及类似语言可以但不必须指的是相同实施例。
另外,在各实施例中,本发明提供了优于现有技术的大量优点。然而,尽管本发明的实施例可获得优于其他可能的解决方案和/或优于现有技术的优点,某一具体优点是否由给定的实施例获得并不构成对本发明的限定。因此,下面的方面、特征、实施例和优点仅作说明之用而不应被看作是所附权利要求的要素或限定,除非权利要求中明确提出。类似地,谈到“本发明”不应被解释为对此处所披露的任何发明主题的概括,也不应被看作是所附权利要求的要素或限定,除非权利要求中明确提出。
本发明的这些特征和优点可从以上说明以及所附权利要求内完全清楚地看到,或者可通过如上文所述地实践本发明来了解。
此说明书内所述的许多功能单元已被标记为模块,以便更特别地强调它们的实现独立性。例如,模块可实现为包括定制VLSI电路或门阵列、现成的半导体例如逻辑芯片、晶体管或其它离散元件的硬件电路。模块也可实现为可编程硬件设备例如现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备等。
模块还可实现为可被各种处理器执行的软件。可执行代码的被标识的模块可包括例如可被组织成对象、过程或函数的计算机指令的一个或多个物理或逻辑块。但是,被标识的模块的可执行代码不必在物理上位于一起,而是可包括存储在不同位置的不同指令,这些不同指令当在逻辑上连接在一起时构成该模块并实现模块的规定目的。
实际上,可执行代码的模块可以是单个指令或许多指令,甚至可分布在一些不同的代码段上、不同程序中以及几个存储设备上。类似地,操作数据在这里可在模块内被标识和说明,并且可体现为任何合适的形式且组织成任何合适类型的数据结构。操作数据可被聚集成单个数据集,或者可分布在不同位置上包括在不同存储设备上,并且可至少部分地仅仅作为***或网络上的电子信号存在。
此外,在上面的说明内,提供了许多特定细节例如编程、方法步骤、用户选择、***模块等的示例,以便提供对本发明的实施例的透彻理解。但是,本领域内的技术人员可认识到本发明可实现为不具有一个或多个所述特定细节,或者可实现为具有其它步骤、部件。在另外的实施例内,没有详细示出或说明公知的部件或操作以避免掩盖本发明的方面。
另外,上文中任何具体的模块、装置、***、方法、步骤的命名仅是为了方便而使用的,故而不构成对本发明的限制。
一般地给出上文的示例性流程图,作为逻辑流程图。因而,所示的顺序和标记的操作指示所给出的方法的实施例。可设想在功能、逻辑或效果上与所示方法的一个或多个操作或其部分等效的其它的操作和方法。另外,特定方法发生的顺序可能或可能不严格遵循所示的对应操作的顺序。某些步骤可以合并在一起,或进一步划分了更细的步骤,或添加一些新步骤,或去除一些步骤。
类似地,所描述的***和装置的模块之间的连接关系可以改变,它们可以合并成更大的模块,或被进一步地划分为更小的模块,也可以添加某些新的模块,或去除某些模块,只要它们能够实现根据本发明的功能,这些改变都处于本发明的精神和范围之内。
本发明可以硬件、软件、或硬件与软件的结合的方式实现。本发明可以集中的方式在一个计算机***中实现,或以分布方式实现,在这种分布方式中,不同的部件分布在若干互连的计算机***中。适于执行本文中描述的各方法的任何计算机***或其它装置都是合适的。一种典型的硬件和软件的组合可以是带有计算机程序的通用计算机***,当该计算机程序被加载和执行时,控制该计算机***而使其执行本文中描述的方式。
本发明也可体现在与计算机***一起使用的程序产品中。该程序产品包含使能实现本文中描述的方法的所有特征,并且当其被加载到计算机***中时,能够执行这些方法。该程序产品可被包含在多种信号承载介质中。典型的信号承载介质包括但不限于:(i)永久存储在不可写存储介质(例如计算机中的只读存储器装置,例如可由CD-ROM驱动器读取的CD-ROM盘)上的信息;(ii)存储在可写存储介质(例如软盘驱动器中的软盘或磁盘驱动器)上的可更改的信息;以及(iii)通过例如包括无线通信在内的计算机或电话网络等通信介质传送给计算机的信息。当这种信号承载介质携带指导本发明功能的、计算机可读的指令时,其代表本发明的实施例。
尽管已参照优选实施例具体示出和说明了本发明,但是本领域内的那些技术人员应理解,可在形式和细节上对其进行各种改变而不会背离本发明的精神和范围,本发明的范围由所附权利要求限定。
Claims (31)
1.一种用于自动生成可再现运行时问题的计算机程序单元测试用例的方法,包括以下步骤:
根据计算机程序中所关注的一个或多个目标程序单元和可能发生的运行时问题修改该程序;
测试执行该修改后的程序;以及
根据在所述所关注的目标程序单元的执行中出现的所述所关注的运行时问题自动生成单元测试用例。
2.根据权利要求1的方法,其中所述运行时问题包括非期望的异常和预定行为规则的违反。
3.根据权利要求2的方法,还包括确定所述程序中所述所关注的目标程序单元以及所述所关注的非期望异常和/或预定行为规则的违反的步骤。
4.根据权利要求3的方法,还包括定义行为规则的步骤。
5.根据权利要求4的方法,其中所述定义行为规则的步骤包括:
确定包含目标方法和检验代码的占位符的规则模板;
确定目标方法;以及
开发检验代码。
6.根据权利要求1-5中任何一个的方法,其中所述修改步骤包括:
在所述程序中加入捕获代码,所述捕获代码被配置为用于记录该程序中所述所关注的目标程序单元的执行路径及执行上下文;以及
在该程序中加入问题检测代码,所述问题检测代码被配置为用于检测该程序中所述所关注的目标程序单元的的执行所可能抛出的所述所关注的非期望异常以及所可能产生的所述所关注的预定行为规则的违反。
7.根据权利要求6的方法,其中所述计算机程序为面向对象的程序,所述程序单元为类,所述执行路径为所述目标类的各实例对象的每一次外部方法调用的序列,并且所述执行上下文为所述目标类的各实例对象的每一次外部方法调用的参数的值和返回值。
8.根据权利要求7的方法,其中所述捕获代码进一步被配置为用于记录所述目标类的各实例对象的调用参数中不可被复制的对象在目标类中的被调用方法、调用参数及其返回值,并且所述自动生成单元测试用例的步骤包括:
根据所述捕获代码所记录的所述目标类的各实例对象的调用参数中不可被复制的对象在目标类中的被调用方法、调用参数及其返回值生成所述不可被复制的对象的模拟对象;以及
根据所述捕获代码所记录的相关的执行路径及执行上下文以及所述生成的模拟对象生成单元测试用例。
9.根据权利要求7的方法,其中,所述问题检测代码还被配置为用于每当检测到所述所关注的非期望异常或预定行为规则的违反时,就触发所述自动生成单元测试用例的步骤根据所述捕获代码所记录的相关的执行路径及执行上下文生成单元测试用例。
10.根据权利要求7的方法,其中,所述问题检测代码还被配置为用于每当检测到所述非期望异常或预定行为规则的违反时,将所述所关注的非期望异常或预定行为规则的违反记入问题列表,并且所述自动生成单元测试用例的步骤包括当所述测试执行过程结束后,根据所述问题列表以及所述捕获代码所记录的相关的执行路径及执行上下文生成单元测试用例。
11.根据权利要求9或10的方法,其中所述生成的单元测试用例包括所述目标类的实例对象从被构造到被检测到所述非期望异常或预定行为规则的违反为止的外部方法调用的序列,以及每一次外部方法调用的参数的值。
12.根据权利要求10的方法,其中所述捕获代码进一步被配置为用于记录所述目标类的各实例对象的调用参数中不可被复制的对象在目标类中的被调用方法、调用参数及其返回值,并且其中所述根据所述问题列表以及所述捕获代码所记录的相关的执行路径及执行上下文生成单元测试用例的步骤包括以下子步骤:
遍历所述问题列表中的每一项非期望异常或预定行为规则的违反;
针对所遍历的每一项非期望异常或预定行为规则的违反,访问所述捕获代码所记录的相应的执行路径和执行上下文以及所述不可被复制的对象在目标类中的被调用方法、调用参数及其返回值;
根据所访问的所述不可被复制的对象在目标类中的被调用方法、调用参数及其返回值生成所述不可被复制的对象的模拟对象;以及
根据所访问的相应的执行路径和执行上下文以及所生成的模拟对象构造单元测试用例。
13.一种用于自动生成可再现运行时问题的计算机程序单元测试用例的方法,包括以下步骤:
根据该计算机程序的测试后生成的测试缺陷描述,确定缺陷的性质及发生缺陷的程序单元;
根据所确定的缺陷的性质及发生缺陷的程序单元修改该程序;
测试执行该程序;以及
根据检测到的所述缺陷以及所述捕获代码记录的相关的执行路径及上下文生成单元测试用例。
14.根据权利要求13的方法,其中所述修改步骤包括:
在该程序中加入捕获代码,所述捕获代码被配置为用于记录该程序中的所述程序单元的执行路径及执行上下文;以及
在该程序中加入问题检测代码,所述问题检测代码根据所确定的缺陷的性质被配置为用于检测该程序中所述程序单元的执行中的所述缺陷。
15.一种计算机程序测试方法,包括以下步骤:
在所述程序中加入捕获代码和问题检测代码,其中所述捕获代码被配置为用于记录该程序中所关注的目标程序单元的执行路径及执行上下文,而所述问题检测代码被配置为用于检测并记录该程序中所述所关注的程序单元的执行所可能抛出的所关注的非期望异常以及所可能产生的所关注的预定行为规则的违反;以及
测试执行经过所述加入的该程序,以检测并记录所述所关注的非期望异常以及预定行为规则的违反。
16.根据权利要求15的方法,还包括定义所述预定行为规则的步骤。
17.一种用于自动生成可再现运行时问题的计算机程序单元测试用例的***,包括:
修改模块,用于根据计算机程序中所关注的一个或多个目标程序单元和可能发生的运行时问题修改该程序;
测试执行模块,用于测试执行所述被修改后的程序;以及
单元测试用例生成模块,用于根据在所述所关注的程序单元的执行中出现的所述所关注的运行时问题自动生成单元测试用例。
18.根据权利要求17的***,其中所述运行时问题包括非期望的异常和预定行为规则的违反。
19.根据权利要求18的***,还包括确定模块,用于确定所述程序中所述所关注的目标程序单元以及所述所关注的非期望异常和/或预定行为规则的违反。
20.根据权利要求19的***,还包括规则定义模块,用于定义可由所述确定模块确定的规则。
21.根据权利要求20的***,其中所述规则定义模块被配置为用于通过以下步骤来定义规则:
确定包含目标方法和检验代码的占位符的规则模板;
确定目标方法;以及
开发检验代码。
22.根据权利要求17-20中任何一个的***,其中所述修改模块被配置为用于:
在该程序中加入捕获代码,所述捕获代码被配置为用于记录该程序中所述所关注的程序单元的执行路径和执行上下文;以及
在该程序中加入问题检测代码,所述问题检测代码被配置为用于检测所述程序单元的执行所可能抛出的所关注的非期望异常以及所可能产生的所关注的预定行为规则的违反。
23.根据权利要求22的***,其中所述计算机程序为面向对象的程序,所述程序单元为类,所述执行路径为所述目标类的各实例对象的每一次外部方法调用的序列,并且所述执行上下文为所述目标类的各实例对象的每一次外部方法调用的参数的值和返回值。
24.根据权利要求23的***,其中所述捕获代码进一步被配置为用于记录所述目标类的各实例对象的调用参数中不可被复制的对象在目标类中的被调用方法、调用参数及其返回值,并且所述单元测试用例自动生成模块被配置为用于:
根据所述捕获代码所记录的所述目标类的各实例对象的调用参数中不可被复制的对象在目标类中的被调用方法、调用参数及其返回值生成所述不可被复制的对象的模拟对象;以及
根据所述捕获代码所记录的相关的执行路径及执行上下文以及所述生成的模拟对象生成单元测试用例。
25.根据权利要求23的***,其中,所述问题检测代码还被配置为用于每当检测到所述非期望异常或预定行为规则的违反时,就触发所述单元测试用例生成模块根据所述捕获代码所记录的相关的执行路径及执行上下文生成单元测试用例。
26.根据权利要求23的***,其中,所述问题检测代码还被配置为用于每当检测到所述非期望异常或预定行为规则的违反时,将所述非期望异常或预定行为规则的违反记入问题列表,并且所述单元测试用例生成模块被配置为用于当所述测试执行模块进行的测试执行过程结束后,根据所述问题列表以及所述捕获代码所记录的相关的执行路径及执行上下文生成单元测试用例。
27.根据权利要求25或26的***,其中所述生成的单元测试用例包括目标类的实例对象从被构造到被检测到所述非期望异常或预定行为规则的违反为止的外部方法调用的序列,以及每一次外部方法调用的参数的值。
28.根据权利要求26的***,其中所述捕获代码进一步被配置为用于记录所述目标类的各实例对象的调用参数中不可被复制的对象在目标类中的被调用方法、调用参数及其返回值,并且其中所述单元测试用例生成模块还包括:
问题列表访问模块,用于遍历所述问题列表中的每一项非期望异常或预定行为规则的违反;
执行路径及上下文访问模块,用于针对所遍历的每一项非期望异常或预定行为规则的违反,访问所述捕获代码所记录的相应的执行路径和执行上下文以及所述不可被复制的对象在目标类中的被调用方法、调用参数及其返回值;
模拟对象构造模块,用于根据所访问的所述不可被复制的对象在目标类中的被调用方法、调用参数及其返回值生成所述不可被复制的对象的模拟对象;以及
单元测试用例构造模块,用于根据所访问的相应的执行路径和执行上下文以及所生成的模拟对象构造单元测试用例。
29.一种计算机程序测试装置,包括:
修改模块,用于在所述程序中加入捕获代码和问题检测代码,所述捕获代码被配置为用于记录该程序中所关注的目标程序单元的执行路径及执行上下文,而所述问题检测代码被配置为用于检测并记录该程序中所述所关注的程序单元的执行所可能抛出的所关注的非期望异常以及所可能产生的所关注的预定行为规则的违反;以及
测试执行模块,用于测试执行经过所述加入的该程序,以检测并记录所关注的目标程序单元的执行中出现的所述所关注的非期望异常以及预定行为规则的违反。
30.根据权利要求29的装置,还包括用于定义所述预定行为规则的规则定义模板。
31.一种包含计算机可读介质的计算机程序产品,该计算机可读介质具有包含在其中的用于使得具有数据处理能力的***执行根据前述方法权利要求中任何一个的方法的步骤的程序指令。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101355340A CN100547562C (zh) | 2006-10-18 | 2006-10-18 | 自动生成可再现运行时问题的单元测试用例的方法和*** |
US11/873,572 US8245194B2 (en) | 2006-10-18 | 2007-10-17 | Automatically generating unit test cases which can reproduce runtime problems |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101355340A CN100547562C (zh) | 2006-10-18 | 2006-10-18 | 自动生成可再现运行时问题的单元测试用例的方法和*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101165658A true CN101165658A (zh) | 2008-04-23 |
CN100547562C CN100547562C (zh) | 2009-10-07 |
Family
ID=39334365
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006101355340A Expired - Fee Related CN100547562C (zh) | 2006-10-18 | 2006-10-18 | 自动生成可再现运行时问题的单元测试用例的方法和*** |
Country Status (2)
Country | Link |
---|---|
US (1) | US8245194B2 (zh) |
CN (1) | CN100547562C (zh) |
Cited By (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101833508A (zh) * | 2010-05-07 | 2010-09-15 | 北京大学 | 基于执行序列的JUnit测试用例化简方法 |
CN102253671A (zh) * | 2010-05-20 | 2011-11-23 | 上海宝信软件股份有限公司 | 冶金过程控制计算机***测试数据生成装置 |
CN103207828A (zh) * | 2012-01-12 | 2013-07-17 | 上海盛霄云计算技术有限公司 | 一种代码测试方法及*** |
CN105393226A (zh) * | 2013-07-23 | 2016-03-09 | 兰德马克绘图国际公司 | 脚本测试案例和手动测试案例的自动生成 |
CN105528287A (zh) * | 2014-10-15 | 2016-04-27 | 三星Sds株式会社 | 用于代码的单元测试的装置及方法 |
US9367313B2 (en) | 2012-03-16 | 2016-06-14 | International Business Machines Corporation | Run-time instrumentation directed sampling |
US9367316B2 (en) | 2012-03-16 | 2016-06-14 | International Business Machines Corporation | Run-time instrumentation indirect sampling by instruction operation code |
US9372693B2 (en) | 2012-03-16 | 2016-06-21 | International Business Machines Corporation | Run-time instrumentation sampling in transactional-execution mode |
US9395989B2 (en) | 2012-03-16 | 2016-07-19 | International Business Machines Corporation | Run-time-instrumentation controls emit instruction |
US9400736B2 (en) | 2012-03-16 | 2016-07-26 | International Business Machines Corporation | Transformation of a program-event-recording event into a run-time instrumentation event |
US9405543B2 (en) | 2012-03-16 | 2016-08-02 | International Business Machines Corporation | Run-time instrumentation indirect sampling by address |
US9454462B2 (en) | 2012-03-16 | 2016-09-27 | International Business Machines Corporation | Run-time instrumentation monitoring for processor characteristic changes |
US9471315B2 (en) | 2012-03-16 | 2016-10-18 | International Business Machines Corporation | Run-time instrumentation reporting |
US9483268B2 (en) | 2012-03-16 | 2016-11-01 | International Business Machines Corporation | Hardware based run-time instrumentation facility for managed run-times |
US9489285B2 (en) | 2012-03-16 | 2016-11-08 | International Business Machines Corporation | Modifying run-time-instrumentation controls from a lesser-privileged state |
CN106681903A (zh) * | 2015-11-11 | 2017-05-17 | 阿里巴巴集团控股有限公司 | 生成测试用例的方法及装置 |
CN108874672A (zh) * | 2018-06-19 | 2018-11-23 | 腾讯科技(深圳)有限公司 | 应用程序异常定位方法、装置、设备及存储介质 |
CN109240908A (zh) * | 2018-08-01 | 2019-01-18 | 口碑(上海)信息技术有限公司 | 异常测试用例模板创建方法及装置 |
CN109710539A (zh) * | 2019-01-17 | 2019-05-03 | 南京大学 | 一种基于字节码操作的安卓软件增强测试方法 |
CN110502224A (zh) * | 2019-08-22 | 2019-11-26 | 深圳前海环融联易信息科技服务有限公司 | 基于http请求的接口模拟方法、装置和计算机设备 |
CN111176972A (zh) * | 2018-11-12 | 2020-05-19 | 阿里巴巴集团控股有限公司 | 测试方法与*** |
CN111338951A (zh) * | 2020-02-25 | 2020-06-26 | 珠海荣邦智能科技有限公司 | 无线智能家电检测方法及*** |
CN112015666A (zh) * | 2020-10-27 | 2020-12-01 | 深圳开源互联网安全技术有限公司 | 基于contextPath的Web测试方法及装置 |
CN112015653A (zh) * | 2020-08-31 | 2020-12-01 | 中移(杭州)信息技术有限公司 | 问题定位方法、服务器及存储介质 |
CN112363948A (zh) * | 2020-11-30 | 2021-02-12 | 深圳市六度人和科技有限公司 | 接口测试方法、装置、电子设备及存储介质 |
CN113971019A (zh) * | 2021-10-19 | 2022-01-25 | 深圳市元征科技股份有限公司 | 数据类型创建方法、装置、服务器及介质 |
CN114996152A (zh) * | 2022-06-17 | 2022-09-02 | 抖音视界(北京)有限公司 | 一种单元测试方法、装置、设备及介质 |
Families Citing this family (90)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8484618B2 (en) * | 2005-01-12 | 2013-07-09 | Advanced Testing Technologies, Inc. | Test program set obsolescence mitigation through software and automatic test equipment processes |
US7761836B1 (en) * | 2006-10-11 | 2010-07-20 | Cadence Design Systems, Inc. | Circuit autorouter with object oriented constraints |
US8381170B2 (en) * | 2006-12-01 | 2013-02-19 | Siemens Corporation | Test driven architecture enabled process for open collaboration in global |
US8127275B1 (en) * | 2007-04-18 | 2012-02-28 | Parasoft Corporation | System and method for recording the state of variables and objects when running unit tests |
US8732676B1 (en) * | 2007-08-29 | 2014-05-20 | Parasoft Corporation | System and method for generating unit test based on recorded execution paths |
US20090288066A1 (en) * | 2008-02-12 | 2009-11-19 | Electronics And Telecommunications Research Institute | Editing apparatus and method for test driven development |
US20100138820A1 (en) * | 2008-12-01 | 2010-06-03 | Joshi Shrinivas B | Framework for Control Flow-Aware Processes |
US8589739B2 (en) * | 2009-03-16 | 2013-11-19 | International Business Machines Corporation | Product limitations advisory system |
US20100299654A1 (en) * | 2009-05-21 | 2010-11-25 | Microsoft Corporation | Approach for root causing regression bugs |
CN102025705A (zh) * | 2009-09-18 | 2011-04-20 | ***通信集团公司 | 用于ims***的漏洞挖掘方法和*** |
US8423962B2 (en) * | 2009-10-08 | 2013-04-16 | International Business Machines Corporation | Automated test execution plan generation |
US8954929B2 (en) * | 2010-03-29 | 2015-02-10 | Microsoft Corporation | Automatically redirecting method calls for unit testing |
US9189367B2 (en) * | 2010-04-20 | 2015-11-17 | Salesforce.Com, Inc. | Methods and systems for debugging bytecode in an on-demand service environment |
US9009668B2 (en) | 2010-05-27 | 2015-04-14 | Red Hat Israel, Ltd. | Software testing using test entity |
US8850396B2 (en) * | 2010-05-27 | 2014-09-30 | Red Hat Israel, Ltd. | Performing software testing based on grouping of tests using test list entity |
KR101132560B1 (ko) * | 2010-06-09 | 2012-04-03 | 강원대학교산학협력단 | 로봇 소프트웨어 컴포넌트를 위한 시뮬레이션 기반 인터페이스 테스팅 자동화 시스템 및 그 방법 |
US8627296B1 (en) * | 2010-09-15 | 2014-01-07 | Google Inc. | Unified unit and integration test with automatic mock creation |
US8489929B2 (en) * | 2010-09-30 | 2013-07-16 | Salesforce.Com, Inc. | Facilitating large-scale testing using virtualization technology in a multi-tenant database environment |
US8826243B2 (en) | 2010-12-14 | 2014-09-02 | International Business Machines Corporation | System, method, and computer program product for error code injection |
US9830599B1 (en) * | 2010-12-21 | 2017-11-28 | EMC IP Holding Company LLC | Human interaction detection |
US8819631B2 (en) * | 2011-01-13 | 2014-08-26 | Hewlett-Packard Development Company, L.P. | System and method for self dependent web automation |
US8869113B2 (en) * | 2011-01-20 | 2014-10-21 | Fujitsu Limited | Software architecture for validating C++ programs using symbolic execution |
US8949991B2 (en) * | 2011-01-28 | 2015-02-03 | International Business Machines Corporation | Testing web services that are accessible via service oriented architecture (SOA) interceptors |
EP2482192B1 (en) * | 2011-01-31 | 2018-10-24 | Tata Consultancy Services Limited | Testing lifecycle |
CN102736905B (zh) * | 2011-04-12 | 2015-04-15 | 深圳市金蝶中间件有限公司 | 一种动态替换类中字段的方法 |
US8627147B2 (en) | 2011-05-17 | 2014-01-07 | International Business Machines Corporation | Method and computer program product for system tuning based on performance measurements and historical problem data and system thereof |
US8806437B2 (en) * | 2011-06-29 | 2014-08-12 | International Business Machines Corporation | Automated testing process |
CN102855177B (zh) * | 2011-06-30 | 2015-08-26 | 阿里巴巴集团控股有限公司 | 一种单元测试的方法和装置 |
US9152630B1 (en) * | 2011-10-26 | 2015-10-06 | Intuit Inc. | Modified database transaction scopes during software testing |
US9015677B2 (en) * | 2011-12-06 | 2015-04-21 | Nice Systems Ltd. | System and method for developing and testing logic in a mock-up environment |
US9141356B2 (en) | 2011-12-14 | 2015-09-22 | Microsoft Technology Licensing, Llc | Process for generating dynamic type |
US8930022B1 (en) * | 2012-02-07 | 2015-01-06 | Google Inc. | Systems and methods for determining a status of a component of a robotic device |
US8850406B1 (en) * | 2012-04-05 | 2014-09-30 | Google Inc. | Detecting anomalous application access to contact information |
US20130283238A1 (en) * | 2012-04-19 | 2013-10-24 | Doron Levi | Testing system for an integrated software system |
WO2013158112A1 (en) * | 2012-04-20 | 2013-10-24 | Hewlett-Packard Development Company, L.P. | Testing system for an integrated software system |
CN102799523B (zh) * | 2012-07-03 | 2015-06-17 | 华为技术有限公司 | 动态探测程序执行路径的方法、装置和计算机*** |
CN102831056B (zh) * | 2012-07-31 | 2015-04-08 | 东南大学 | 一种基于修改影响分析的回归测试用例生成方法 |
CN102855187B (zh) * | 2012-07-31 | 2015-10-28 | 许继电气股份有限公司 | 一种继电保护装置软件缺陷跟踪管理***及方法 |
US9122805B2 (en) * | 2012-10-02 | 2015-09-01 | International Business Machines Corporation | Resilient mock object creation for unit testing |
CN103870384B (zh) * | 2012-12-11 | 2017-02-08 | 航天信息股份有限公司 | 测试用例推定方法及*** |
US20150234731A1 (en) * | 2013-03-15 | 2015-08-20 | Ca, Inc. | Virtualized software interaction contract |
US9298911B2 (en) * | 2013-03-15 | 2016-03-29 | Intel Corporation | Method, apparatus, system, and computer readable medium for providing apparatus security |
CN104142883B (zh) * | 2013-05-08 | 2017-04-12 | 阿里巴巴集团控股有限公司 | 一种测试方法和一种录制工具 |
CN103593291B (zh) * | 2013-11-18 | 2016-03-09 | 北京邮电大学 | 用于包括多个函数测试模块的单元测试方法及装置 |
US10042742B2 (en) * | 2013-11-21 | 2018-08-07 | International Business Machines Corporation | Selective object testing in a client-server environment |
CN104679648B (zh) * | 2013-12-02 | 2018-01-23 | ***股份有限公司 | 跨应用的自动化测试方法 |
US9170921B2 (en) * | 2014-01-24 | 2015-10-27 | Bank Of America Corporation | Application testing automation |
US9900324B1 (en) * | 2014-01-29 | 2018-02-20 | SecondWrite LLC | System to discover and analyze evasive malware |
CN104133767A (zh) * | 2014-07-23 | 2014-11-05 | 天脉聚源(北京)科技有限公司 | 一种软件开发进程监管方法及装置 |
CN105335281B (zh) * | 2014-07-30 | 2018-03-20 | 阿里巴巴集团控股有限公司 | 一种自动mock外部依赖的方法及装置 |
CN105446711B (zh) * | 2014-08-08 | 2018-10-02 | 国际商业机器公司 | 获取用于软件开发任务的上下文信息的方法及装置 |
US9870311B2 (en) * | 2014-09-04 | 2018-01-16 | Home Box Office, Inc. | Mock object generation |
JP6723989B2 (ja) | 2014-09-08 | 2020-07-15 | アビニシオ テクノロジー エルエルシー | データ駆動型検査用フレームワーク |
CN104317722B (zh) * | 2014-11-13 | 2017-06-16 | 中国建设银行股份有限公司 | 一种基于Junit的单元测试方法及装置 |
CN105760288B (zh) * | 2014-12-15 | 2019-02-01 | 阿里巴巴集团控股有限公司 | 测试改写后的应用程序的方法及装置 |
US9703690B2 (en) * | 2015-01-22 | 2017-07-11 | International Business Machines Corporation | Determining test case efficiency |
US9471463B1 (en) * | 2015-04-16 | 2016-10-18 | International Business Machines Corporation | Debug management using dynamic analysis based on state information |
WO2017023300A1 (en) * | 2015-08-04 | 2017-02-09 | Hewlett Packard Enterprise Development Lp | Selective application testing |
US10235417B1 (en) * | 2015-09-02 | 2019-03-19 | Amazon Technologies, Inc. | Partitioned search of log events |
US9792102B2 (en) * | 2015-09-04 | 2017-10-17 | Quest Software Inc. | Identifying issues prior to deploying software |
US10853359B1 (en) | 2015-12-21 | 2020-12-01 | Amazon Technologies, Inc. | Data log stream processing using probabilistic data structures |
CN105528296B (zh) * | 2016-01-13 | 2018-10-23 | 东北大学 | 一种面向对象软件的类簇测试方法 |
US10037263B1 (en) * | 2016-07-27 | 2018-07-31 | Intuit Inc. | Methods, systems, and articles of manufacture for implementing end-to-end automation of software services |
CN108376061B (zh) * | 2016-10-13 | 2019-12-10 | 北京百度网讯科技有限公司 | 用于开发无人驾驶车辆应用的方法和装置 |
US10437714B2 (en) * | 2017-01-25 | 2019-10-08 | Wipro Limited | System and method for performing script-less unit testing |
US20180217921A1 (en) * | 2017-02-02 | 2018-08-02 | Cognizant Technology Solutions India Pvt. Ltd. | System and method for generating and executing automated test cases |
CN108733554A (zh) * | 2017-04-21 | 2018-11-02 | 北京京东尚科信息技术有限公司 | Mock方法和装置 |
US10521335B2 (en) * | 2018-01-29 | 2019-12-31 | T-Mobile Usa, Inc. | Context-based device testing |
CN108446225A (zh) * | 2018-03-06 | 2018-08-24 | 平安科技(深圳)有限公司 | 模拟接口的创建装置、方法及计算机可读存储介质 |
US20190310933A1 (en) * | 2018-04-10 | 2019-10-10 | Ca, Inc. | Externalized definition and reuse of mocked transactions |
US10289538B1 (en) * | 2018-07-02 | 2019-05-14 | Capital One Services, Llc | Systems and methods for failure detection with orchestration layer |
CN109361531B (zh) * | 2018-09-04 | 2021-11-19 | 瑞斯康达科技发展股份有限公司 | 一种通信设备不易复现问题的复现方法、***和设备 |
CN109344063A (zh) * | 2018-09-26 | 2019-02-15 | 深圳竹云科技有限公司 | 一种api接口的自动化测试方法 |
US10740222B2 (en) * | 2018-10-23 | 2020-08-11 | Sap Se | Intelligent unitizer test plug-in |
CN110008113B (zh) * | 2019-02-20 | 2023-08-29 | 北京三快在线科技有限公司 | 一种测试方法、装置、电子设备 |
US10901877B2 (en) | 2019-05-30 | 2021-01-26 | International Business Machines Corporation | Test regression creating bucket by using package of code to be tested |
CN110502436A (zh) * | 2019-07-30 | 2019-11-26 | 广东分利宝金服科技有限公司 | 提高自动化测试执行效率的方法 |
CN112346963B (zh) * | 2019-08-09 | 2024-03-22 | 腾讯科技(深圳)有限公司 | 一种基于aop的插桩测试方法、装置和电子设备 |
US11360880B1 (en) | 2020-05-18 | 2022-06-14 | Amazon Technologies, Inc. | Consistent replay of stateful requests during software testing |
US11210206B1 (en) | 2020-05-18 | 2021-12-28 | Amazon Technologies, Inc. | Spoofing stateful dependencies during software testing |
US11567857B1 (en) | 2020-05-18 | 2023-01-31 | Amazon Technologies, Inc. | Bypassing generation of non-repeatable parameters during software testing |
US11775417B1 (en) | 2020-05-18 | 2023-10-03 | Amazon Technologies, Inc. | Sharing execution states among storage nodes during testing of stateful software |
US11288153B2 (en) | 2020-06-18 | 2022-03-29 | Bank Of America Corporation | Self-healing computing device |
CN114636571A (zh) * | 2020-12-16 | 2022-06-17 | 北京配天技术有限公司 | 白盒测试方法、装置、电子设备以及存储介质 |
US11520689B2 (en) * | 2020-12-28 | 2022-12-06 | Palo Alto Research Center Incorporated | System and method for automatic program repair using fast-result test cases |
CN112667511A (zh) * | 2020-12-30 | 2021-04-16 | 广州凡科互联网科技股份有限公司 | 一种通过***代码来追踪java程序内部调用链的方法 |
CN112699042B (zh) * | 2021-01-05 | 2024-03-01 | 中国工商银行股份有限公司 | 一种单元测试案例的生成方法及装置 |
CN113342692B (zh) * | 2021-07-05 | 2024-05-03 | 卫宁健康科技集团股份有限公司 | 测试用例自动生成方法、装置、电子设备及存储介质 |
CN114265776B (zh) * | 2021-12-22 | 2023-03-14 | 浙江时空道宇科技有限公司 | 单元测试代码生成方法、装置、设备、介质 |
CN116841506B (zh) * | 2023-06-30 | 2024-05-03 | 北京百度网讯科技有限公司 | 程序代码生成方法及装置、模型训练方法及装置 |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4819233A (en) * | 1987-04-08 | 1989-04-04 | Westinghouse Electric Corp. | Verification of computer software |
US5130988A (en) * | 1990-09-17 | 1992-07-14 | Northern Telecom Limited | Software verification by fault insertion |
US5604895A (en) * | 1994-02-22 | 1997-02-18 | Motorola Inc. | Method and apparatus for inserting computer code into a high level language (HLL) software model of an electrical circuit to monitor test coverage of the software model when exposed to test inputs |
US6067639A (en) * | 1995-11-09 | 2000-05-23 | Microsoft Corporation | Method for integrating automated software testing with software development |
US6738778B1 (en) * | 1998-12-11 | 2004-05-18 | International Business Machines Corporation | Method and apparatus for monitoring the execution of a program |
WO2001001256A1 (en) | 1999-06-30 | 2001-01-04 | Sun Microsystems, Inc. | Method and apparatus for static analysis of software code |
US7134113B2 (en) * | 2002-11-04 | 2006-11-07 | International Business Machines Corporation | Method and system for generating an optimized suite of test cases |
US7237231B2 (en) * | 2003-03-10 | 2007-06-26 | Microsoft Corporation | Automatic identification of input values that expose output failures in a software object |
US7596778B2 (en) * | 2003-07-03 | 2009-09-29 | Parasoft Corporation | Method and system for automatic error prevention for computer software |
US7490319B2 (en) * | 2003-11-04 | 2009-02-10 | Kimberly-Clark Worldwide, Inc. | Testing tool comprising an automated multidimensional traceability matrix for implementing and validating complex software systems |
US7478365B2 (en) * | 2004-01-13 | 2009-01-13 | Symphony Services Corp. | Method and system for rule-based generation of automation test scripts from abstract test case representation |
US20050223361A1 (en) * | 2004-04-01 | 2005-10-06 | Belbute John L | Software testing based on changes in execution paths |
US7627843B2 (en) * | 2005-03-23 | 2009-12-01 | International Business Machines Corporation | Dynamically interleaving randomly generated test-cases for functional verification |
US20060230320A1 (en) * | 2005-04-07 | 2006-10-12 | Salvador Roman S | System and method for unit test generation |
US20070168975A1 (en) * | 2005-12-13 | 2007-07-19 | Thomas Kessler | Debugger and test tool |
US7908590B1 (en) * | 2006-03-02 | 2011-03-15 | Parasoft Corporation | System and method for automatically creating test cases through a remote client |
US7747984B2 (en) * | 2006-05-30 | 2010-06-29 | Microsoft Corporation | Automatic test case for graphics design application |
GB0611960D0 (en) * | 2006-06-16 | 2006-07-26 | Ibm | Software testing method and system |
US8006233B2 (en) * | 2007-02-21 | 2011-08-23 | International Business Machines Corporation | System and method for the automatic verification of privilege-asserting and subject-executed code |
US8087001B2 (en) * | 2007-06-29 | 2011-12-27 | Sas Institute Inc. | Computer-implemented systems and methods for software application testing |
-
2006
- 2006-10-18 CN CNB2006101355340A patent/CN100547562C/zh not_active Expired - Fee Related
-
2007
- 2007-10-17 US US11/873,572 patent/US8245194B2/en not_active Expired - Fee Related
Cited By (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101833508A (zh) * | 2010-05-07 | 2010-09-15 | 北京大学 | 基于执行序列的JUnit测试用例化简方法 |
CN101833508B (zh) * | 2010-05-07 | 2012-06-13 | 北京大学 | 基于执行序列的JUnit测试用例化简方法 |
CN102253671A (zh) * | 2010-05-20 | 2011-11-23 | 上海宝信软件股份有限公司 | 冶金过程控制计算机***测试数据生成装置 |
CN102253671B (zh) * | 2010-05-20 | 2014-10-15 | 上海宝信软件股份有限公司 | 冶金过程控制计算机***测试数据生成装置 |
CN103207828A (zh) * | 2012-01-12 | 2013-07-17 | 上海盛霄云计算技术有限公司 | 一种代码测试方法及*** |
US9465716B2 (en) | 2012-03-16 | 2016-10-11 | International Business Machines Corporation | Run-time instrumentation directed sampling |
US9489285B2 (en) | 2012-03-16 | 2016-11-08 | International Business Machines Corporation | Modifying run-time-instrumentation controls from a lesser-privileged state |
US9367313B2 (en) | 2012-03-16 | 2016-06-14 | International Business Machines Corporation | Run-time instrumentation directed sampling |
US9367316B2 (en) | 2012-03-16 | 2016-06-14 | International Business Machines Corporation | Run-time instrumentation indirect sampling by instruction operation code |
US9372693B2 (en) | 2012-03-16 | 2016-06-21 | International Business Machines Corporation | Run-time instrumentation sampling in transactional-execution mode |
US9395989B2 (en) | 2012-03-16 | 2016-07-19 | International Business Machines Corporation | Run-time-instrumentation controls emit instruction |
US9400736B2 (en) | 2012-03-16 | 2016-07-26 | International Business Machines Corporation | Transformation of a program-event-recording event into a run-time instrumentation event |
US9405543B2 (en) | 2012-03-16 | 2016-08-02 | International Business Machines Corporation | Run-time instrumentation indirect sampling by address |
US9405541B2 (en) | 2012-03-16 | 2016-08-02 | International Business Machines Corporation | Run-time instrumentation indirect sampling by address |
US9411591B2 (en) | 2012-03-16 | 2016-08-09 | International Business Machines Corporation | Run-time instrumentation sampling in transactional-execution mode |
US9430238B2 (en) | 2012-03-16 | 2016-08-30 | International Business Machines Corporation | Run-time-instrumentation controls emit instruction |
US9442728B2 (en) | 2012-03-16 | 2016-09-13 | International Business Machines Corporation | Run-time instrumentation indirect sampling by instruction operation code |
US9442824B2 (en) | 2012-03-16 | 2016-09-13 | International Business Machines Corporation | Transformation of a program-event-recording event into a run-time instrumentation event |
US9454462B2 (en) | 2012-03-16 | 2016-09-27 | International Business Machines Corporation | Run-time instrumentation monitoring for processor characteristic changes |
US9459873B2 (en) | 2012-03-16 | 2016-10-04 | International Business Machines Corporation | Run-time instrumentation monitoring of processor characteristics |
CN104380265B (zh) * | 2012-03-16 | 2017-01-25 | 国际商业机器公司 | 运行时间检测控制发出指令 |
US9471315B2 (en) | 2012-03-16 | 2016-10-18 | International Business Machines Corporation | Run-time instrumentation reporting |
US9483268B2 (en) | 2012-03-16 | 2016-11-01 | International Business Machines Corporation | Hardware based run-time instrumentation facility for managed run-times |
US9483269B2 (en) | 2012-03-16 | 2016-11-01 | International Business Machines Corporation | Hardware based run-time instrumentation facility for managed run-times |
CN105393226A (zh) * | 2013-07-23 | 2016-03-09 | 兰德马克绘图国际公司 | 脚本测试案例和手动测试案例的自动生成 |
CN105528287A (zh) * | 2014-10-15 | 2016-04-27 | 三星Sds株式会社 | 用于代码的单元测试的装置及方法 |
CN106681903B (zh) * | 2015-11-11 | 2020-05-12 | 阿里巴巴集团控股有限公司 | 生成测试用例的方法及装置 |
CN106681903A (zh) * | 2015-11-11 | 2017-05-17 | 阿里巴巴集团控股有限公司 | 生成测试用例的方法及装置 |
CN108874672A (zh) * | 2018-06-19 | 2018-11-23 | 腾讯科技(深圳)有限公司 | 应用程序异常定位方法、装置、设备及存储介质 |
CN108874672B (zh) * | 2018-06-19 | 2022-04-22 | 腾讯科技(深圳)有限公司 | 应用程序异常定位方法、装置、设备及存储介质 |
CN109240908A (zh) * | 2018-08-01 | 2019-01-18 | 口碑(上海)信息技术有限公司 | 异常测试用例模板创建方法及装置 |
CN109240908B (zh) * | 2018-08-01 | 2020-04-03 | 口碑(上海)信息技术有限公司 | 异常测试用例模板创建方法及装置 |
CN111176972A (zh) * | 2018-11-12 | 2020-05-19 | 阿里巴巴集团控股有限公司 | 测试方法与*** |
CN109710539A (zh) * | 2019-01-17 | 2019-05-03 | 南京大学 | 一种基于字节码操作的安卓软件增强测试方法 |
CN110502224A (zh) * | 2019-08-22 | 2019-11-26 | 深圳前海环融联易信息科技服务有限公司 | 基于http请求的接口模拟方法、装置和计算机设备 |
CN111338951A (zh) * | 2020-02-25 | 2020-06-26 | 珠海荣邦智能科技有限公司 | 无线智能家电检测方法及*** |
CN112015653A (zh) * | 2020-08-31 | 2020-12-01 | 中移(杭州)信息技术有限公司 | 问题定位方法、服务器及存储介质 |
CN112015666A (zh) * | 2020-10-27 | 2020-12-01 | 深圳开源互联网安全技术有限公司 | 基于contextPath的Web测试方法及装置 |
CN112363948A (zh) * | 2020-11-30 | 2021-02-12 | 深圳市六度人和科技有限公司 | 接口测试方法、装置、电子设备及存储介质 |
CN112363948B (zh) * | 2020-11-30 | 2024-04-09 | 深圳市六度人和科技有限公司 | 接口测试方法、装置、电子设备及存储介质 |
CN113971019A (zh) * | 2021-10-19 | 2022-01-25 | 深圳市元征科技股份有限公司 | 数据类型创建方法、装置、服务器及介质 |
CN114996152A (zh) * | 2022-06-17 | 2022-09-02 | 抖音视界(北京)有限公司 | 一种单元测试方法、装置、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN100547562C (zh) | 2009-10-07 |
US20080256517A1 (en) | 2008-10-16 |
US8245194B2 (en) | 2012-08-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100547562C (zh) | 自动生成可再现运行时问题的单元测试用例的方法和*** | |
Jin et al. | Automated behavioral regression testing | |
US6986125B2 (en) | Method and apparatus for testing and evaluating a software component using an abstraction matrix | |
US9535823B2 (en) | Method and apparatus for detecting software bugs | |
US6895578B1 (en) | Modularizing a computer program for testing and debugging | |
US8121824B2 (en) | Predicate checking for distributed systems | |
US20030046029A1 (en) | Method for merging white box and black box testing | |
Polo et al. | Integrating techniques and tools for testing automation | |
Derakhshanfar et al. | Search‐based crash reproduction using behavioural model seeding | |
US8533679B2 (en) | Method and apparatus for inserting faults to test code paths | |
Delamare et al. | A test-driven approach to developing pointcut descriptors in AspectJ | |
An et al. | Comparing line and AST granularity level for program repair using PyGGI | |
US8949103B2 (en) | Program code simulator | |
US7624381B1 (en) | Portable detection of start and completion of object construction | |
Hamann et al. | OCL-based runtime monitoring of JVM hosted applications | |
Massicotte et al. | Towards a Tool Supporting Integration Testing of Aspect-Oriented Programs. | |
Singhal et al. | A critical review of various testing techniques in aspect-oriented software systems | |
Sharma et al. | Model-based testing: the new revolution in software testing | |
Micskei et al. | Robustness testing techniques for high availability middleware solutions | |
Cornu et al. | Casper: Automatic tracking of null dereferences to inception with causality traces | |
Chavez et al. | An approach to testing java implementation against its uml class model | |
Pasternak et al. | Genutest: a unit test and mock aspect generation tool | |
Pan et al. | An aspect-oriented testability framework | |
Memon | A process and role-based taxonomy of techniques to make testable COTS components | |
Kim et al. | SCTE: Software component testing environments |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20091007 |
|
CF01 | Termination of patent right due to non-payment of annual fee |