CN112905443A - 一种测试用例生成方法、设备及存储介质 - Google Patents
一种测试用例生成方法、设备及存储介质 Download PDFInfo
- Publication number
- CN112905443A CN112905443A CN201911229940.7A CN201911229940A CN112905443A CN 112905443 A CN112905443 A CN 112905443A CN 201911229940 A CN201911229940 A CN 201911229940A CN 112905443 A CN112905443 A CN 112905443A
- Authority
- CN
- China
- Prior art keywords
- task
- sample
- program
- tested
- code
- 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 122
- 238000000034 method Methods 0.000 title claims abstract description 95
- 239000000523 sample Substances 0.000 claims description 381
- 230000008569 process Effects 0.000 claims description 29
- 230000006870 function Effects 0.000 claims description 18
- 238000010586 diagram Methods 0.000 description 16
- 238000004590 computer program Methods 0.000 description 15
- 238000004891 communication Methods 0.000 description 12
- 238000005516 engineering process Methods 0.000 description 9
- 238000003780 insertion Methods 0.000 description 8
- 230000037431 insertion Effects 0.000 description 8
- 238000012545 processing Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000004519 manufacturing process Methods 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/3684—Test management for test design, e.g. generating new test cases
-
- 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
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
技术领域
本申请涉及软件工程技术领域,尤其涉及一种测试用例生成方法、设备及存储介质。
背景技术
软件工程中的测试用例是一组条件或变量,测试者根据它来确定应用软件或软件系统是否正确工作。
目前,测试用例通常由编程人员进行编写,这需要耗费大量的时间和精力,效率比较低;而且,受编程人员的经验的影响,人工编写的测试用例的代码覆盖率可能无法满足测试要求。
发明内容
本申请的多个方面提供一种测试用例生成方法、设备及存储介质,用以提高测试用例的生成效率、代码覆盖率和/或应用场景覆盖率。
本申请实施例提供一种测试用例的生成方法,包括:
收集待测程序在执行至少一个样本任务时的代码运行路径和任务执行数据;
根据所述至少一个样本任务对应的代码运行路径,将所述至少一个样本任务划分为至少一个任务组,不同任务组对应不同类代码运行路径;
基于所述至少一个任务组中样本任务对应的任务执行数据,生成可覆盖所述至少一类代码运行路径的测试用例。
本申请实施例还提供一种程序测试方法,包括:
确定待测程序的同类程序产生的任务,或是收集待测程序产生的历史任务,作为样本任务;
获取至少一个样本任务各自对应的代码运行路径和任务执行数据;
根据所述至少一个样本任务对应的代码运行路径,将所述至少一个样本任务划分为至少一个任务组,不同任务组对应不同类代码运行路径;
基于所述至少一个任务组中样本任务对应的任务执行数据,生成可覆盖所述至少一类代码运行路径的测试用例;
根据生成的所述测试用例测试所述待测程序。
本申请实施例还提供一种确定代码运行路径的方法,包括:
确定待测程序的同类程序产生的任务,或是收集所述待测程序产生的历史任务,作为样本任务;
收集待测程序在执行各样本任务的过程中分别运行的目标探针,所述程序中预置有若干探针;
根据各样本任务各自对应的目标探针,确定所述待测程序中包含的代码运行路径。
本申请实施例还提供一种计算设备,用于存储器和处理器;
所述存储器用于存储一条或多条计算机指令;
所述处理器与所述存储器耦合,用于执行所述一条或多条计算机指令,以用于:
收集待测程序在执行至少一个样本任务时的代码运行路径和任务执行数据;
根据所述至少一个样本任务对应的代码运行路径,将所述至少一个样本任务划分为至少一个任务组不同任务组对应不同类代码运行路径;
基于所述至少一个任务组中样本任务对应的任务执行数据,生成可覆盖所述至少一类代码运行路径的测试用例。
本申请实施例还提供一种计算设备,包括存储器和处理器;
所述存储器用于存储一条或多条计算机指令;
所述处理器与所述存储器耦合,用于执行所述一条或多条计算机指令,以用于:
确定待测程序的同类程序产生的任务,或是收集待测程序产生的历史任务,作为样本任务;
获取至少一个样本任务各自对应的代码运行路径和任务执行数据;
根据所述至少一个样本任务对应的代码运行路径,将所述至少一个样本任务划分为至少一个任务组,不同任务组对应不同类代码运行路径;
基于所述至少一个任务组中样本任务对应的任务执行数据,生成可覆盖所述至少一类代码运行路径的测试用例;
根据生成的所述测试用例测试所述待测程序。
本申请实施例还提供一种计算设备,包括存储器和处理器;
所述存储器用于存储一条或多条计算机指令;
所述处理器与所述存储器耦合,用于执行所述一条或多条计算机指令,以用于:
确定待测程序的同类程序产生的任务,或是收集所述待测程序产生的历史任务,作为样本任务;
收集待测程序在执行各样本任务的过程中分别运行的目标探针,所述程序中预置有若干探针;
根据各样本任务各自对应的目标探针,确定所述待测程序中包含的代码运行路径。
本申请实施例还提供一种存储计算机指令的计算机可读存储介质,当所述计算机指令被一个或多个处理器执行时,致使所述一个或多个处理器执行前述的测试用例生成方法、程序测试方法或确定代码运行路径的方法。
在本申请实施例中,可收集待测程序的样本任务,并对样本任务对应的代码运行路径进行分类,以获得待测程序对应的至少一类代码运行路径;在此基础上,可在每一类代码路径下生成测试用例,据此产生的测试用例可覆盖待测程序对应的至少一类代码运行路径;不同类代码运行路径可以对应不同的应用场景。因此,本申请实施例中,可有效提高测试用例的生成效率、代码覆盖率以及应用场景覆盖率。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请一实施例提供的一种测试用例生成方法的流程示意图;
图2为本申请一实施例提供的一种测试用例生成方法的逻辑示意图;
图3为本申请另一实施例提供的一种程序测试方法的流程示意图;
图4为本申请又一实施例提供的一种确定代码运行路径的方法的流程示意图;
图5为本申请又一实施例提供的一种计算设备的结构示意图;
图6为本申请又一实施例提供的另一种计算设备的结构示意图;
图7为本申请又一实施例提供的又一种计算设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
目前,测试用例通常由编程人员进行编写,效率比较低且代码覆盖率不稳定。为解决现有技术存在的问题,本申请的一些实施例中:可收集待测程序的样本任务,并对样本任务对应的代码运行路径进行分类,以获得待测程序对应的至少一类代码运行路径;在此基础上,可在每一类代码路径下生成测试用例,据此产生的测试用例可覆盖待测程序对应的至少一类代码运行路径;不同类代码运行路径可以对应不同的应用场景。因此,本申请实施例中,可有效提高测试用例的生成效率、代码覆盖率以及应用场景覆盖率。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图1为本申请一实施例提供的一种测试用例生成方法的流程示意图。图2为本申请一实施例提供的一种测试用例生成方法的逻辑示意图。本实施例提供的测试用例生成方法可以由一测试用例生成装置来执行,该测试用例生成装置可以实现为软件或实现为软件和硬件的组合,该测试用例生成装置可集成设置在计算设备中。参考图1和图2,该方法包括:
100、收集待测程序在执行至少一个样本任务时的代码运行路径和任务执行数据;
101、根据至少一个样本任务对应的代码运行路径,将至少一个样本任务划分为至少一个任务组,每个任务组对应一类代码运行路径;
102、基于至少一个任务组中样本任务对应的任务执行数据,生成可覆盖至少一类代码运行路径的测试用例。
本实施例提供的测试用例生成方法可适用于各种软件测试场景中,本实施例对应用场景不作限定。另外,本实施例中对待测程序的类型、规格或领域等均不作限定。
本实施例中,样本任务可以是用户在使用待测程序过程实际产生的任务,当然,也可以是任务数据库中与待测程序同类的程序产生的历史任务。本实施例对样本任务的来源不作限定。
待测程序可执行至少一个样本任务。至少一个样本任务各自对应有输入参数,待测程序可基于至少一个样本任务各自对应的输入参数,执行至少一个样本任务,在执行完至少一个样本任务的情况下,待测程序可能会针对至少一个样本任务输出任务执行结果。
本实施例中,可收集至少一个样本任务各自对应的输入参数和任务执行结果,作为至少一个样本任务各自对应的任务执行数据。
其中,输入参数可以是用户输入的条件参数。例如,在一次商品查询任务中,用户输入查询条件参数“上衣+女+夏季”,该查询条件参数即可作为该商品查询任务的输入参数。输入参数还可以是其它任务产生的结果参数。例如,在一次订单支付任务中,其在前的订单生成任务产生的商品数量、商品单价等可作为输入参数。
当然,这仅是示例性的,在不同的应用场景中,输入参数的来源、类型等可能不同,本实施例并不限于此。
另外,承接上例,对于商品查询任务来说,任务执行结果可能是符合查询条件参数的若干条商品记录,而对于订单支付任务来说,任务执行结果可能是订单支付总额。当然,这也均是示例性的,本实施例中的任务执行结果并不限于此。
本实施例中,还可对待测程序执行至少一个样本任务的过程进行录制,以收集单个样本任务对应的代码运行路径。
其中,代码运行路径是指待测程序在执行单次样本任务过程中的代码运行过程。该代码运行过程可从代码行号、所使用到的函数或所加载到的类CLASS等维度来进行反映。
一示例性待测程序的代码如下:
一次代码运行过程是执行第0、1和2行代码,这其中加载了类Demo,使用了函数isodd,这即为一条代码运行路径。
不同样本任务对应的代码运行路径可能一致,也可能不一致。本实施例中,可根据至少一个样本任务对应的代码运行路径,将至少一个样本任务划分为至少一个任务组,每个任务组对应一类代码运行路径。
据此,代码运行路径一致的样本任务将被划分至同一任务组。
参考图1和2,本实施例中,可通过对代码运行路径进行分类,确定出至少一类代码运行路径,从而确定出至少一类代码运行路径各自对应的任务组。如图2所示,可分出N类代码运行路径以及N个任务组,一类代码运行路径和一个任务组对应。
为了更加方便地确定出至少一个任务组,本实施例中,可为样本任务设定唯一任务标识,以区分不同样本任务。另外,可为样本任务对应的代码运行路径和任务执行数据绑定该唯一任务标识,以表征样本任务与代码运行路径和任务执行数据之间的关联关系。这样,可基于同一类代码运行路径中各代码运行路径所绑定的唯一任务标识,确定各代码运行路径对应的样本任务,从而确定出每类代码运行路径对应的任务组。
在此基础上,本实施例中,可根据各组任务组中的样本任务对应的任务执行数据,生成可覆盖至少一类代码运行路径的测试用例。应当理解的是,这里生成的可覆盖至少一类代码运行路径的测试用例的数量将是多个,据此,每一类代码运行路径都可获得测试用例。不同类代码运行路径可能对应不同的业务场景,因此,本实施例所生成的测试用例,可更好地覆盖到待测程序可能应用到的业务场景。
实际应用中,可在至少一个任务组下分别选择至少一个目标样本任务,并根据从至少一个任务组分别选择出的目标样本任务各自对应的任务执行数据,生成可覆盖至少一类代码运行路径的测试用例。其中,每个任务组下选出的目标样本任务的数量可以是一个或多个,该数量可根据实际需求进行设定。
本实施例中,可从每个任务组中选择至少一个目标样本任务,作为代表任务,因此,可在同一任务组中进行样本任务的精简去重,从而可在保证对代码运行路径的覆盖率的情况下,精简每类代码运行路径下的测试用例。
其中,为了更加方便地选择出代表任务,可根据前文中为样本任务设定唯一任务标识,确定代表任务对应的任务执行数据,从而根据这些任务执行数据,生成测试用例。
本实施例中,可以任务执行数据中包含的输入参数作为测试用例中的条件或变量,以任务执行数据中包含的任务执行结果作为测试用例中的校验依据。当然,这仅是示例性的,本实施例并不限于此。
本实施例中,生成的测试用例可用于对待测程序进行测试。
例如,可根据本实施例提供的方案,收集待测程序的上一程序版本下所发生的真实任务对应的代码运行路径和任务执行数据,并生成测试用例。并利用这些测试用例对待测程序的当前程序版本进行测试。
同样,可根据本实施例提供的方案,在当前程序版本使用过程中,收集当前程序版本下所发生的真实任务对应的代码运行路径和任务执行数据,生成测试用例。而这些测试用例,则可用于对待测程序的下一程序版本进行测试。
本实施例中,可收集待测程序的样本任务,并对样本任务对应的代码运行路径进行分类,以获得待测程序对应的至少一类代码运行路径;在此基础上,可在每一类代码路径下生成测试用例,据此产生的测试用例可覆盖待测程序对应的至少一类代码运行路径。因此,本申请实施例中,可筛选合适的自然流量,对待测程序的样本任务进行精简去重,从而可基于更少的测试用例保证待测程序的代码覆盖率。还可有效提高测试用例的生成效率、代码覆盖率和/或应用场景覆盖率。
在上述或下述实施例中,可在保证待测程序原有逻辑完整的基础上,在待测程序中预置若干探针,探针不会对待测程序的原有逻辑有任何干扰。
以待测程序为JAVA程序为例,可在JAVA虚拟机启动时,动态的增强待测程序中的类CLASS,增强的CLASS中将带入一系列探针,这些探针不会对待测程序的原有逻辑产生任何干扰。
本实施例中,可首先确定探针的插入位置。
本实施例中,可确定待测程序中包含的特定节点,并在待测程序中的特定节点上插入探针。其中,特定节点是指存在逻辑判断的代码运行位置。可以理解的是,特定节点即是确定出的探针的插入位置。
为了确定出待测程序中包含的特定节点,本实施例中可将待测程序的源代码编译为字节码;运行字节码,以构建待测程序对应的逻辑树,逻辑树中包含若干树节点;从逻辑树中查找存在逻辑判断的树节点,作为特定节点。
还是以JAVA程序为例,本实施例中,可将JAVA程序的源代码编译成字节码,这些字节码可被JAVA虚拟机运行。通过对字节码的运行过程进行分析,可确定JAVA程序的运行逻辑,从而构建JAVA程序的逻辑树。进而可基于逻辑树确定出JAVA程序中的特定节点。
在实际应用中,可利用汇编ASM框架,构建待测程序对应的逻辑树。
其中,ASM框架是一个致力于字节码操作和分析的框架,它可以用来修改一个已存在的类CLASS或者动态产生一个新的类CLASS。
基于ASM框架,为待测程序构建逻辑树的过程可以是:
通过JAVA虚拟机运行字节码;
从JAVA虚拟机中获取已经加载的类CLASS;
利用ASM框架,对已经加载的类CLASS对应的CLASS字节流进行分析,以构建ASM树,作为待测程序对应的逻辑树。
ASM树中将包含若干ASM树节点,本实施例中,可遍历ASM树,从中查找分支节点、跳转(goto)节点或函数调用节点等存在逻辑判断的ASM树节点,作为待测程序中的特定节点。当然,这里列举的特定节点仅是示例性的,本实施例中,特定节点并不限于此。
以上阐述了在待测程序中确定探针的插入位置的实现方案。在确定出探针的插入位置后,可在探针的插入位置上插入探针。
本实施例中,可采用切面编程的方式在待测程序中插入探针,以保证插入的探针不会对待测程序的原有逻辑造成影响。
还是以JAVA程序为例,本实施例中,可利用ASM框架进行探针的插入。基于前述的ASM树,ASM框架可在ASM树中的分支节点、跳转(goto)节点或函数调用节点等ASM树节点插入探针。ASM框架可基于插入探针后的ASM树生成新的类CLASS字节流,并用对应的CLASSLOADER装载新的类CLASS,从而还原出待测程序的源代码。还原出的源代码中已经插入了探针。
至此,完成了待测程序中探针的插入。
在此基础上,本实施例中,可收集待测程序执行单个样本任务过程中所运行到的目标探针;根据目标探针,确定单个样本任务对应的代码运行路径。
考虑到为各样本任务确定代码运行路径的方案类似,以下将以第一样本任务为例进行技术方案的说明,其中,第一样本任务可以是至少一个样本任务中的任意一个。
本实施例中,针对第一样本任务,可获取第一样本任务的任务线程对应的探针运行数据,探针运行数据中包含所运行到的探针及探针顺序;确定运行到的探针所在的特定节点,并根据探针顺序确定特定节点的顺序;根据特定节点及其顺序,确定第一样本任务对应的代码运行路径。
本实施例中,可基于待测任务中预置的若干探针,从任务线程的维度对待测程序执行单个样本任务的过程进行监测。
对大部分的web容器,例如Tomcat,任务与任务线程都是一一对应的。其中,任务线程包括任务主线程和由任务主线程派生出的子线程。本实施例中,可以任务主线程为根节点,根据单个样本任务对应的任务主线程及子线程,构建该样本任务的线程树。
在实际应用中,可在待测程序执行单个样本任务的过程中,生成探针运行数据并存储至该样本任务的任务线程专有的内存空间中。不同任务线程的内存空间相互独立,因此,不同样本任务对应的探针运行数据相互隔离。其中,探针运行数据中包含任务线程所运行到的探针以及探针顺序。探针顺序用于表征探针在线程树中的位置。当然,探针运行数据中还可包含其它内容,本实施例并不限于此。
基于此,本实施例中,可收集到单个样本任务的任务线程对应的探针运行数据,从而确定线程树中运行到哪些探针以及这些探针在线程树中的位置。
正如前文所述,探针的插入位置为待测程序中的特定节点,也即是,在完成探针插入过程后,每个探针所在的特定节点将是已知的。
本实施例中,可根据单个样本任务对应的探针运行数据中包含的探针及探针顺序,对前述的逻辑树进行再次遍历,以确定该样本任务所运行到的探针所在的特定节点,以及这些特定节点之间的顺序。从而,可根据这些特定节点以及特定节点之间的顺序,从逻辑树中分析出代码运行路径。分析出的代码运行路径即为该样本任务对应的代码运行路径。
据此,本实施例中,可从任务线程的维度切入,针对单个样本任务确定代码运行路径。从而,可收集到待测程序在执行各个样本任务时的代码运行路径。
在上述或下述实施例中,可根据至少一个样本任务对应的代码运行路径,对若干样本任务进行聚类,以确定至少一个任务组。
本实施例中,实质是对至少一个样本任务对应的代码运行路径进行聚类,以确定至少一类代码运行路径。
正如前文所述,本实施例中可为样本任务设定唯一任务标识,以区分不同样本任务。而且,代码运行路径也可绑定其对应的样本任务的唯一任务标识,已表征代码运行路径与样本任务的关联关系。
基于此,一类代码运行路径将对应一个任务组。
本实施例中,可采用多种实现方式进行代码运行路径的聚类。
在一种示例性实现方式中,可按照相同的特征描述格式,分别构建若干样本任务各自对应的代码运行路径的特征描述信息;对特征描述信息进行聚类,以获得至少一类特征描述信息;对应同一类特征描述信息的代码运行路径,组成一类代码运行路径。
在实际应用中,可用一个JSON字符串作为特征描述信息。其中,JSON字符串的数据结构可作为上述的特征描述格式。本实施例中,可按照相同的数据结构,分别为各样本任务各自对应的代码运行路径构建JSON字符串。
其中,JSON字符串中可包括类名、函数名或代码执行行号中的一项或多项内容。
上述的JSON字符串的数据结构不仅限定了JSON字符串所包含的内容项,还限定了这些内容项之间的顺序。这可保证按照相同的特征描述格式,分别构建若干样本任务各自对应的代码运行路径的特征描述信息。
以前文中提及的一种示例性待测程序的代码为例。若样本任务的输入参数分别为number赋值1-10,则可产生10条代码运行路径,并可分别抽象为JSON字符串:
例如,{“Demo”:{“isoddnumber”:[0,1,2]}}、{“Demo”:{“isoddnumber”:[0,1,5]}}。本实施例中,可分别计算若干样本任务各自对应的特征描述信息的摘要值,将摘要值一致的特征描述信息归为同一类特征描述信息。
其中,摘要值可以是消息摘要MD5值或者哈希值等,当然,本实施例并不限于此。
例如,可分别计算各代码运行路径的特征描述信息的MD5值,将同一MD5值一致的代码运行路径归为同一类代码运行路径。
承接上例,可基于JSON字符串对10条代码运行路径进行聚类,获得两类代码运行路径:第1类代码运行路径为{“Demo”:{“isoddnumber”:[0,1,2]}};第2类代码运行路径为{“Demo”:{“isoddnumber”:[0,1,5]}}。
本实施例中,可从代码运行路径抽象出特征描述信息,并通过判断各代码运行路径的特征描述信息之间的相似性,来进行代码运行路径的聚类。据此获得的聚类结果更加准确,因此,可更加全面地发掘待测程序中可能发生的代码运行路径,从而保证依此生成的测试用例可更加全面地覆盖待测程序的业务场景。
需要说明的是,上述实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤101至步骤102的执行主体可以为设备A;又比如,步骤101和102的执行主体可以为设备A,步骤100的执行主体可以为设备B;等等。
另外,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如101、102等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的任务、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
图3为本申请另一实施例提供的一种程序测试方法的流程示意图。如图3所示,该方法包括:
300、确定待测程序的同类程序产生的任务,或是收集待测程序产生的历史任务,作为样本任务;
301、获取至少一个样本任务各自对应的代码运行路径和任务执行数据;
302、根据至少一个样本任务对应的代码运行路径,将至少一个样本任务划分为至少一个任务组,不同任务组对应不同类代码运行路径;
303、基于至少一个任务组中样本任务对应的任务执行数据,生成可覆盖至少一类代码运行路径的测试用例;
304、根据生成的测试用例测试待测程序。
其中,步骤301-303可参考前述测试用例生成方法的各实施例中的相关描述,在此不再赘述。
本实施例中,可确定待测程序的同类程序产生的任务,或是收集待测程序产生的历史任务,作为样本任务。本实施例中,测试用例是基于真实的任务数据而生成的,这保证了测试用例的真实性。
本实施例中,生成的测试用例可用于对待测程序进行测试。
例如,可根据本实施例提供的方案,收集待测程序的上一程序版本下所发生的真实任务对应的代码运行路径和任务执行数据,并生成测试用例。并利用这些测试用例对待测程序的当前程序版本进行测试。
同样,可根据本实施例提供的方案,在当前程序版本使用过程中,收集当前程序版本下所发生的真实任务对应的代码运行路径和任务执行数据,生成测试用例。而这些测试用例,则可用于对待测程序的下一程序版本进行测试。
本实施例中,可为待测程序收集样本任务,并对样本任务对应的代码运行路径进行分类,以获得待测程序对应的至少一类代码运行路径;在此基础上,可在每一类代码路径下生成测试用例,据此产生的测试用例可覆盖待测程序对应的至少一类代码运行路径。因此,可有效提高测试用例的生成效率、代码覆盖率以及应用场景覆盖率。另外,本实施例依据真实的任务数据生成测试用例,可保证测试用例的真实性,从而使程序测试的过程更接近实际使用场景,提高程序测试的实用性和准确性。
值得说明的是,本实施例中涉及到的技术细节,尤其是生成测试用例的技术细节,可参考前述关于测试用例生成方法的各个实施例中的相关描述,为节省篇幅,在此不再赘述,但这不应造成对本申请保护范围的损失。
图4为本申请又一实施例提供的一种确定代码运行路径的方法的流程示意图。如图4所示,该方法包括:
400、确定待测程序的同类程序产生的任务,或是收集待测程序产生的历史任务,作为样本任务;
401、收集待测程序在执行各样本任务的过程中分别运行的目标探针,程序中预置有若干探针;
402、根据各样本任务各自对应的目标探针,确定待测程序中包含的代码运行路径。
本实施例提供的确定代码运行路径的方法可应用于各种需要确定代码运行路径的场景中。例如,软件测试场景等等,当然,还可用在其它应用场景中,本实施例对应用场景不作限定。
本实施例中,待测程序中预置有若干探针,在待测程序执行样本任务的过程中,可收集运行的目标探针。其中,本实施例对目标探针的数量不作限定。
根据目标探针,可推演出待测程序的代码运行路径。
在一可选实施例中,在400之前,还包括:
确定待测程序中包含的特定节点,特定节点为存在逻辑判断的代码运行位置;
在待测程序的特定节点上插入探针。
在一可选实施例中,步骤确定待测程序中包含的特定节点,包括:
将待测程序的源代码编译为字节码;
运行字节码,以构建待测程序对应的逻辑树,逻辑树中包含若干树节点;
从逻辑树中查找存在逻辑判断的树节点,作为特定节点。
在一可选实施例中,若待测程序为JAVA待测程序,步骤运行字节码,以构建待测程序对应的逻辑树,包括:
基于JAVA虚拟机运行字节码;
从JAVA虚拟机中获取已经加载的类CLASS;
利用汇编ASM框架,对已经加载的类CLASS对应的CLASS字节流进行分析,以构建ASM树,作为待测程序对应的逻辑树。
在一可选实施例中,特定节点包括分支节点、跳转节点或函数调用节点中的一种或多种。
在一可选实施例中,步骤402,包括:
根据各样本任务各自对应的目标探针,分别确定各样本任务各自对应的代码运行路径;
根据各样本任务各自对应的代码运行路径,确定待测程序中包含的代码运行路径。
在一可选实施例中,步骤根据各样本任务各自对应的代码运行路径,确定待测程序中包含的代码运行路径,包括:
对各样本任务各自对应的代码运行路径进行聚类,以获得至少一类代码运行路径,作为待测程序中包含的代码运行路径。
在一可选实施例中,步骤根据各样本任务各自对应的目标探针,分别确定各样本任务各自对应的代码运行路径,包括:
针对第一样本任务,获取第一样本任务的任务线程对应的探针运行数据,探针运行数据中包含所运行到的探针及探针顺序;
确定运行到的探针所在的特定节点,并根据探针顺序确定特定节点的顺序;
根据特定节点及其顺序,确定第一样本任务对应的代码运行路径;
其中,第一样本任务为样本任务中的任意一个。
在上述各实施例中,可利用程序中预置的若干探针,确定程序中所发生的代码运行路径,尤其是在多任务并行的场景下,可准确确定出单个任务对应的代码运行路径,因此,可更加全面、更加准确地确定出程序中可能发生的代码运行路径。
值得说明的是,本实施例中涉及到的技术细节,可参考前述关于测试用例生成方法的各个实施例中的相关描述,为节省篇幅,在此不再赘述,但这不应造成对本申请保护范围的损失。
图5为本申请另一实施例提供的一种计算设备的结构示意图。如图5所示,该计算设备包括:存储器50和处理器51。
处理器51,与存储器50耦合,用于执行存储器50中的计算机程序,以用于:
收集待测程序在执行至少一个样本任务时的代码运行路径和任务执行数据;
根据至少一个样本任务对应的代码运行路径,将至少一个样本任务划分为至少一个任务组,不同任务组对应不同类代码运行路径;
基于至少一个任务组中样本任务对应的任务执行数据,生成可覆盖至少一类代码运行路径的测试用例。
在一可选实施例中,处理器51在基于至少一个任务组中样本任务对应的任务执行数据,生成可覆盖至少一类代码运行路径的测试用例时,用于:
分别从至少一个任务组中选择至少一个目标样本任务;
根据从至少一个任务组分别选择出的目标样本任务各自对应的任务执行数据生成测试用例。
在一可选实施例中,待测程序中预置有若干探针;处理器51在收集待测程序在执行至少一个样本任务时的代码运行路径时,用于:
针对第一样本任务,收集待测程序在执行第一样本任务的过程中所运行到的目标探针;
根据目标探针,确定至少一个样本任务各自对应的代码运行路径;
第一样本任务为至少一个样本任务中的任意一个。
在一可选实施例中,在使用若干探针之前,处理器51还用于:
确定待测程序中包含的特定节点,特定节点为存在逻辑判断的代码运行位置;
在待测程序的特定节点上插入探针。
在一可选实施例中,处理器51在确定待测程序中包含的特定节点时,用于:
将待测程序的源代码编译为字节码;
运行字节码,以构建待测程序对应的逻辑树,逻辑树中包含若干树节点;
从逻辑树中查找存在逻辑判断的树节点,作为特定节点。
在一可选实施例中,若待测程序为JAVA程序,处理器51在运行字节码,以构建待测程序对应的逻辑树时,用于:
基于JAVA虚拟机运行字节码;
从JAVA虚拟机中获取已经加载的类CLASS;
利用ASM框架,对已经加载的类CLASS对应的CLASS字节流进行分析,以构建ASM树,作为待测程序对应的逻辑树。
在一可选实施例中,特定节点包括分支节点、跳转节点或函数调用节点中的一种或多种。
在一可选实施例中,处理器51在根据目标探针,确定至少一个样本任务各自对应的代码运行路径时,用于:
针对第一样本任务,获取第一样本任务的任务线程对应的探针运行数据,探针运行数据中包含所运行到的探针及探针顺序;
确定运行到的探针所在的特定节点,并根据探针顺序确定特定节点的顺序;
根据特定节点及其顺序,确定第一样本任务对应的代码运行路径。
在一可选实施例中,处理器51在根据至少一个样本任务对应的代码运行路径,将至少一个样本任务划分为至少一个任务组时,用于:
根据至少一个样本任务对应的代码运行路径,对若干样本任务进行聚类,以确定至少一个任务组。
在一可选实施例中,处理器51在根据至少一个样本任务对应的代码运行路径,对若干样本任务进行聚类,以确定至少一个任务组时,用于:
按照相同的特征描述格式,分别构建若干样本任务各自对应的代码运行路径的特征描述信息;
对特征描述信息进行聚类,以获得至少一类特征描述信息;
将对应同一类特征描述信息的样本任务,组成一个任务组。
在一可选实施例中,特征描述信息采用JSON字符串。
在一可选实施例中,JSON字符串包括类名、函数名或代码执行行号中的一项或多项内容。
在一可选实施例中,处理器51在对特征描述信息进行聚类,以获得至少一类特征描述信息时,用于:
分别计算若干样本任务各自对应的特征描述信息的摘要值,将摘要值一致的特征描述信息归为同一类特征描述信息。
在一可选实施例中,任务执行数据包括输入参数和/或任务执行结果。
值得说明的是,上述关于计算设备的各实施例中涉及到的技术细节,可参考前述关于测试用例生成方法的各实施例中的相关描述,为节省篇幅,在此不再赘述,但这不应造成对本申请保护范围的损失。
进一步,如图5所示,该计算设备还包括:通信组件52、电源组件53等其它组件。图5中仅示意性给出部分组件,并不意味着计算设备只包括图5所示组件。
相应地,本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,计算机程序被执行时能够实现上述方法实施例中可由计算设备执行的各步骤。
图6为本申请又一实施例提供的另一种计算设备的结构示意图。如图6所示,该计算设备包括:存储器60和处理器61;
存储器60用于存储一条或多条计算机指令;
处理器61与存储器60耦合,用于执行一条或多条计算机指令,以用于:
确定待测程序的同类程序产生的任务,或是收集待测程序产生的历史任务,作为样本任务;
获取至少一个样本任务各自对应的代码运行路径和任务执行数据;
根据至少一个样本任务对应的代码运行路径,将至少一个样本任务划分为至少一个任务组,不同任务组对应不同类代码运行路径;
基于至少一个任务组中样本任务对应的任务执行数据,生成可覆盖至少一类代码运行路径的测试用例;
根据生成的测试用例测试待测程序。
值得说明的是,上述关于计算设备的各实施例中涉及到的技术细节,可参考前述关于程序测试方法的各实施例中的相关描述,为节省篇幅,在此不再赘述,但这不应造成对本申请保护范围的损失。
进一步,如图6所示,该计算设备还包括:通信组件62、电源组件63等其它组件。图6中仅示意性给出部分组件,并不意味着计算设备只包括图6所示组件。
相应地,本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,计算机程序被执行时能够实现上述方法实施例中可由计算设备执行的各步骤。
图7为本申请又一实施例提供的又一种计算设备的结构示意图。如图7所示,该计算设备包括:存储器70和处理器71;
存储器70用于存储一条或多条计算机指令;
处理器71与存储器70耦合,用于执行一条或多条计算机指令,以用于:
收集程序在执行目标任务的过程中所运行的目标探针,程序中预置有若干探针;
根据目标探针,确定目标任务对应的代码运行路径。
在一可选实施例中,处理器71在使用若干探针之前,还用于:
确定程序中包含的特定节点,特定节点为存在逻辑判断的代码运行位置;
在程序的特定节点上插入探针。
在一可选实施例中,处理器71在确定程序中包含的特定节点时,用于:
将程序的源代码编译为字节码;
运行字节码,以构建程序对应的逻辑树,逻辑树中包含若干树节点;
从逻辑树中查找存在逻辑判断的树节点,作为特定节点。
在一可选实施例中,若程序为JAVA程序,处理器71在运行字节码,以构建程序对应的逻辑树时,用于:
基于JAVA虚拟机运行字节码;
从JAVA虚拟机中获取已经加载的类CLASS;
利用汇编ASM框架,对已经加载的类CLASS对应的CLASS字节流进行分析,以构建ASM树,作为程序对应的逻辑树。
在一可选实施例中,特定节点包括分支节点、跳转节点或函数调用节点中的一种或多种。
在一可选实施例中,处理器71在根据各样本任务各自对应的目标探针,确定待测程序中包含的代码运行路径时,用于:
根据各样本任务各自对应的目标探针,分别确定各样本任务各自对应的代码运行路径;
根据各样本任务各自对应的代码运行路径,确定待测程序中包含的代码运行路径。
在一可选实施例中,处理器71在根据各样本任务各自对应的代码运行路径,确定待测程序中包含的代码运行路径时,用于:
对各样本任务各自对应的代码运行路径进行聚类,以获得至少一类代码运行路径,作为待测程序中包含的代码运行路径。
在一可选实施例中,处理器71在根据各样本任务各自对应的目标探针,分别确定各样本任务各自对应的代码运行路径时,用于:
针对第一样本任务,获取第一样本任务的任务线程对应的探针运行数据,探针运行数据中包含所运行到的探针及探针顺序;
确定运行到的探针所在的特定节点,并根据探针顺序确定特定节点的顺序;
根据特定节点及其顺序,确定第一样本任务对应的代码运行路径;
其中,第一样本任务为样本任务中的任意一个。
值得说明的是,上述关于计算设备的各实施例中涉及到的技术细节,可参考前述关于确定代码运行路径的方法的各实施例中的相关描述,为节省篇幅,在此不再赘述,但这不应造成对本申请保护范围的损失。
进一步,如图7所示,该计算设备还包括:通信组件72、电源组件73等其它组件。图7中仅示意性给出部分组件,并不意味着计算设备只包括图7所示组件。
相应地,本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,计算机程序被执行时能够实现上述方法实施例中可由计算设备执行的各步骤。
其中,图5-7中的存储器,用于存储计算机程序,并可被配置为存储其它各种数据以支持在计算设备上的操作。这些数据的示例包括用于在计算设备上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
其中,图5-7中的通信组件,被配置为便于通信组件所在设备和其他设备之间有线或无线方式的通信。通信组件所在设备可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件可基于近场通信(NFC)技术、射频识别(RFID)技术、红外数据协会(IrDA)技术、超宽带(UWB)技术、蓝牙(BT)技术或其它技术来实现,以促进短程通信。
其中,图5-7中的电源组件,为电源组件所在设备的各种组件提供电力。电源组件可以包括电源管理系统,一个或多个电源,及其他与为电源组件所在设备生成、管理和分配电力相关联的组件。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (40)
1.一种测试用例的生成方法,其特征在于,包括:
收集待测程序在执行至少一个样本任务时的代码运行路径和任务执行数据;
根据所述至少一个样本任务对应的代码运行路径,将所述至少一个样本任务划分为至少一个任务组,不同任务组对应不同类代码运行路径;
基于所述至少一个任务组中样本任务对应的任务执行数据,生成可覆盖所述至少一类代码运行路径的测试用例。
2.根据权利要求1所述的方法,其特征在于,所述基于所述至少一个任务组中样本任务对应的任务执行数据,生成可覆盖所述至少一类代码运行路径的测试用例,包括:
分别从所述至少一个任务组中选择至少一个目标样本任务;
根据从所述至少一个任务组分别选择出的目标样本任务各自对应的任务执行数据生成测试用例。
3.根据权利要求1所述的方法,其特征在于,所述待测程序中预置有若干探针;所述收集待测程序在执行至少一个样本任务时的代码运行路径,包括:
针对第一样本任务,收集所述待测程序在执行所述第一样本任务的过程中所运行的目标探针;
根据所述目标探针,确定所述至少一个样本任务各自对应的代码运行路径;
所述第一样本任务为所述至少一个样本任务中的任意一个。
4.根据权利要求3所述的方法,其特征在于,在使用所述若干探针之前,还包括:
确定所述待测程序中包含的特定节点,所述特定节点为存在逻辑判断的代码运行位置;
在所述待测程序的特定节点上插入探针。
5.根据权利要求4所述的方法,其特征在于,所述确定所述待测程序中包含的特定节点,包括:
将所述待测程序的源代码编译为字节码;
运行所述字节码,以构建所述待测程序对应的逻辑树,所述逻辑树中包含若干树节点;
从所述逻辑树中查找存在逻辑判断的树节点,作为所述特定节点。
6.根据权利要求5所述的方法,其特征在于,若所述待测程序为JAVA程序,所述运行所述字节码,以构建所述待测程序对应的逻辑树,包括:
基于JAVA虚拟机运行所述字节码;
从JAVA虚拟机中获取已经加载的类CLASS;
利用汇编ASM框架,对所述已经加载的类CLASS对应的CLASS字节流进行分析,以构建ASM树,作为所述待测程序对应的逻辑树。
7.根据权利要求4所述的方法,其特征在于,所述特定节点包括分支节点、跳转节点或函数调用节点中的一种或多种。
8.根据权利要求4所述的方法,其特征在于,所述根据所述目标探针,确定所述至少一个样本任务各自对应的代码运行路径,包括:
针对所述第一样本任务,获取所述第一样本任务的任务线程对应的探针运行数据,所述探针运行数据中包含所运行到的探针及探针顺序;
确定所述运行到的探针所在的特定节点,并根据所述探针顺序确定所述特定节点的顺序;
根据所述特定节点及其顺序,确定所述第一样本任务对应的代码运行路径。
9.根据权利要求1所述的方法,其特征在于,所述根据所述至少一个样本任务对应的代码运行路径,将所述至少一个样本任务划分为至少一个任务组,包括:
根据所述至少一个样本任务对应的代码运行路径,对所述若干样本任务进行聚类,以确定至少一个任务组。
10.根据权利要求9所述的方法,其特征在于,所述根据所述至少一个样本任务对应的代码运行路径,对所述若干样本任务进行聚类,以确定至少一个任务组,包括:
按照相同的特征描述格式,分别构建所述若干样本任务各自对应的代码运行路径的特征描述信息;
对所述特征描述信息进行聚类,以获得至少一类特征描述信息;
将对应同一类特征描述信息的样本任务,组成一个任务组。
11.根据权利要求10所述的方法,其特征在于,所述特征描述信息采用JSON字符串。
12.根据权利要求11所述的方法,其特征在于,所述JSON字符串包括类名、函数名或代码执行行号中的一项或多项内容。
13.根据权利要求10所述的方法,其特征在于,所述对所述特征描述信息进行聚类,以获得至少一类特征描述信息,包括:
分别计算所述若干样本任务各自对应的特征描述信息的摘要值,将摘要值一致的特征描述信息归为同一类特征描述信息。
14.根据权利要求1所述的方法,其特征在于,所述任务执行数据包括输入参数和/或任务执行结果。
15.一种程序测试方法,其特征在于,包括:
确定待测程序的同类程序产生的任务,或是收集待测程序产生的历史任务,作为样本任务;
获取至少一个样本任务各自对应的代码运行路径和任务执行数据;
根据所述至少一个样本任务对应的代码运行路径,将所述至少一个样本任务划分为至少一个任务组,不同任务组对应不同类代码运行路径;
基于所述至少一个任务组中样本任务对应的任务执行数据,生成可覆盖所述至少一类代码运行路径的测试用例;
根据生成的所述测试用例测试所述待测程序。
16.一种确定代码运行路径的方法,其特征在于,包括:
确定待测程序的同类程序产生的任务,或是收集所述待测程序产生的历史任务,作为样本任务;
收集待测程序在执行各样本任务的过程中分别运行的目标探针,所述程序中预置有若干探针;
根据各样本任务各自对应的目标探针,确定所述待测程序中包含的代码运行路径。
17.根据权利要求16所述的方法,其特征在于,在使用所述若干探针之前,还包括:
确定所述待测程序中包含的特定节点,所述特定节点为存在逻辑判断的代码运行位置;
在所述待测程序的特定节点上插入探针。
18.根据权利要求17所述的方法,其特征在于,所述确定所述待测程序中包含的特定节点,包括:
将所述待测程序的源代码编译为字节码;
运行所述字节码,以构建所述待测程序对应的逻辑树,所述逻辑树中包含若干树节点;
从所述逻辑树中查找存在逻辑判断的树节点,作为所述特定节点。
19.根据权利要求18所述的方法,其特征在于,若所述待测程序为JAVA待测程序,所述运行所述字节码,以构建所述待测程序对应的逻辑树,包括:
基于JAVA虚拟机运行所述字节码;
从JAVA虚拟机中获取已经加载的类CLASS;
利用汇编ASM框架,对所述已经加载的类CLASS对应的CLASS字节流进行分析,以构建ASM树,作为所述待测程序对应的逻辑树。
20.根据权利要求17所述的方法,其特征在于,所述特定节点包括分支节点、跳转节点或函数调用节点中的一种或多种。
21.根据权利要求17所述的方法,其特征在于,所述根据各样本任务各自对应的目标探针,确定所述待测程序中包含的代码运行路径,包括:
根据各样本任务各自对应的目标探针,分别确定各样本任务各自对应的代码运行路径;
根据各样本任务各自对应的代码运行路径,确定所述待测程序中包含的代码运行路径。
22.根据权利要求21所述的方法,其特征在于,所述根据各样本任务各自对应的代码运行路径,确定所述待测程序中包含的代码运行路径,包括:
对所述各样本任务各自对应的代码运行路径进行聚类,以获得至少一类代码运行路径,作为所述待测程序中包含的代码运行路径。
23.根据权利要求21所述的方法,其特征在于,所述根据各样本任务各自对应的目标探针,分别确定各样本任务各自对应的代码运行路径,包括:
针对第一样本任务,获取所述第一样本任务的任务线程对应的探针运行数据,所述探针运行数据中包含所运行到的探针及探针顺序;
确定所述运行到的探针所在的特定节点,并根据所述探针顺序确定所述特定节点的顺序;
根据所述特定节点及其顺序,确定所述第一样本任务对应的代码运行路径;
其中,所述第一样本任务为样本任务中的任意一个。
24.一种计算设备,其特征在于,包括存储器和处理器;
所述存储器用于存储一条或多条计算机指令;
所述处理器与所述存储器耦合,用于执行所述一条或多条计算机指令,以用于:
收集待测程序在执行至少一个样本任务时的代码运行路径和任务执行数据;
根据所述至少一个样本任务对应的代码运行路径,将所述至少一个样本任务划分为至少一个任务组,不同任务组对应不同类代码运行路径;
基于所述至少一个任务组中样本任务对应的任务执行数据,生成可覆盖所述至少一类代码运行路径的测试用例。
25.根据权利要求24所述的设备,其特征在于,所述处理器在基于所述至少一个任务组中样本任务对应的任务执行数据,生成可覆盖所述至少一类代码运行路径的测试用例时,用于:
分别从所述至少一个任务组中选择至少一个目标样本任务;
根据所述从所述至少一个任务组分别选择出的目标样本任务各自对应的任务执行数据生成测试用例。
26.根据权利要求24所述的设备,其特征在于,所述待测程序中预置有若干探针;所述处理器在收集待测程序在执行至少一个样本任务时的代码运行路径时,用于:
针对第一样本任务,收集所述待测程序在执行所述第一样本任务的过程中所运行的目标探针;
根据所述目标探针,确定所述至少一个样本任务各自对应的代码运行路径;
所述第一样本任务为所述至少一个样本任务中的任意一个。
27.根据权利要求26所述的设备,其特征在于,在使用所述若干探针之前,所述处理器还用于:
确定所述待测程序中包含的特定节点,所述特定节点为存在逻辑判断的代码运行位置;
在所述待测程序的特定节点上插入探针。
28.根据权利要求27所述的设备,其特征在于,所述处理器在确定所述待测程序中包含的特定节点时,用于:
将所述待测程序的源代码编译为字节码;
运行所述字节码,以构建所述待测程序对应的逻辑树,所述逻辑树中包含若干树节点;
从所述逻辑树中查找存在逻辑判断的树节点,作为所述特定节点。
29.根据权利要求28所述的设备,其特征在于,若所述待测程序为JAVA程序,所述处理器在运行所述字节码,以构建所述待测程序对应的逻辑树时,用于:
基于JAVA虚拟机运行所述字节码;
从JAVA虚拟机中获取已经加载的类CLASS;
利用ASM框架,对所述已经加载的类CLASS对应的CLASS字节流进行分析,以构建ASM树,作为所述待测程序对应的逻辑树。
30.根据权利要求27所述的设备,其特征在于,所述特定节点包括分支节点、跳转节点或函数调用节点中的一种或多种。
31.根据权利要求27所述的设备,其特征在于,所述处理器在根据所述目标探针,确定所述至少一个样本任务各自对应的代码运行路径时,用于:
针对所述第一样本任务,获取所述第一样本任务的任务线程对应的探针运行数据,所述探针运行数据中包含所运行到的探针及探针顺序;
确定所述运行到的探针所在的特定节点,并根据所述探针顺序确定所述特定节点的顺序;
根据所述特定节点及其顺序,确定所述第一样本任务对应的代码运行路径。
32.根据权利要求24所述的设备,其特征在于,所述处理器在根据所述至少一个样本任务对应的代码运行路径,将所述至少一个样本任务划分为至少一个任务组时,用于:
根据所述至少一个样本任务对应的代码运行路径,对所述若干样本任务进行聚类,以确定至少一个任务组。
33.根据权利要求32所述的设备,其特征在于,所述处理器在根据所述至少一个样本任务对应的代码运行路径,对所述若干样本任务进行聚类,以确定至少一个任务组时,用于:
按照相同的特征描述格式,分别构建所述若干样本任务各自对应的代码运行路径的特征描述信息;
对所述特征描述信息进行聚类,以获得至少一类特征描述信息;
将对应同一类特征描述信息的样本任务,组成一个任务组。
34.根据权利要求33所述的设备,其特征在于,所述特征描述信息采用JSON字符串。
35.根据权利要求34所述的设备,其特征在于,所述JSON字符串包括类名、函数名或代码执行行号中的一项或多项内容。
36.根据权利要求33所述的设备,其特征在于,所述处理器在对所述特征描述信息进行聚类,以获得至少一类特征描述信息时,用于:
分别计算所述若干样本任务各自对应的特征描述信息的摘要值,将摘要值一致的特征描述信息归为同一类特征描述信息。
37.根据权利要求24所述的设备,其特征在于,所述任务执行数据包括输入参数和/或任务执行结果。
38.一种计算设备,其特征在于,包括存储器和处理器;
所述存储器用于存储一条或多条计算机指令;
所述处理器与所述存储器耦合,用于执行所述一条或多条计算机指令,以用于:
确定待测程序的同类程序产生的任务,或是收集待测程序产生的历史任务,作为样本任务;
获取至少一个样本任务各自对应的代码运行路径和任务执行数据;
根据所述至少一个样本任务对应的代码运行路径,将所述至少一个样本任务划分为至少一个任务组,不同任务组对应不同类代码运行路径;
基于所述至少一个任务组中样本任务对应的任务执行数据,生成可覆盖所述至少一类代码运行路径的测试用例;
根据生成的所述测试用例测试所述待测程序。
39.一种计算设备,其特征在于,包括存储器和处理器;
所述存储器用于存储一条或多条计算机指令;
所述处理器与所述存储器耦合,用于执行所述一条或多条计算机指令,以用于:
确定待测程序的同类程序产生的任务,或是收集所述待测程序产生的历史任务,作为样本任务;
收集待测程序在执行各样本任务的过程中分别运行的目标探针,所述程序中预置有若干探针;
根据各样本任务各自对应的目标探针,确定所述待测程序中包含的代码运行路径。
40.一种存储计算机指令的计算机可读存储介质,其特征在于,当所述计算机指令被一个或多个处理器执行时,致使所述一个或多个处理器执行权利要求1-14任一项所述的测试用例生成方法、权利要求15所述的程序测试方法或权利要求16-23任一项所述的确定代码运行路径的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911229940.7A CN112905443B (zh) | 2019-12-04 | 2019-12-04 | 一种测试用例生成方法、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911229940.7A CN112905443B (zh) | 2019-12-04 | 2019-12-04 | 一种测试用例生成方法、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112905443A true CN112905443A (zh) | 2021-06-04 |
CN112905443B CN112905443B (zh) | 2024-06-14 |
Family
ID=76110721
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911229940.7A Active CN112905443B (zh) | 2019-12-04 | 2019-12-04 | 一种测试用例生成方法、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112905443B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113778890A (zh) * | 2021-09-16 | 2021-12-10 | 平安银行股份有限公司 | 代码测试方法、装置、电子设备及存储介质 |
CN114020648A (zh) * | 2022-01-04 | 2022-02-08 | 广东拓思软件科学园有限公司 | 应用控件的测试方法、装置、电子设备及存储介质 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101814055A (zh) * | 2010-04-06 | 2010-08-25 | 南京大学 | 一种测试用例聚类取样方法 |
CN102231109A (zh) * | 2011-07-15 | 2011-11-02 | 南京大学 | 无痕可管理的源代码自动插桩方法 |
CN102419728A (zh) * | 2011-11-01 | 2012-04-18 | 北京邮电大学 | 基于覆盖率量化指标确定软件测试过程充分性的方法 |
CN103473171A (zh) * | 2013-08-28 | 2013-12-25 | 北京信息科技大学 | 一种基于函数调用路径的覆盖率动态跟踪方法及装置 |
CN104252408A (zh) * | 2013-06-26 | 2014-12-31 | 国际商业机器公司 | 提供测试用例的方法和装置 |
CN104346148A (zh) * | 2013-07-30 | 2015-02-11 | 阿里巴巴集团控股有限公司 | 获取程序性能消耗信息的方法、装置及系统 |
CN107291622A (zh) * | 2017-07-18 | 2017-10-24 | 北京计算机技术及应用研究所 | C25汇编代码静态分析方法 |
CN107423214A (zh) * | 2017-04-18 | 2017-12-01 | 恒生电子股份有限公司 | 软件回归测试用例获取方法、装置及存储介质和电子设备 |
CN108256322A (zh) * | 2018-01-26 | 2018-07-06 | 平安科技(深圳)有限公司 | 安全测试方法、装置、计算机设备和存储介质 |
CN108804304A (zh) * | 2017-05-05 | 2018-11-13 | 北京京东尚科信息技术有限公司 | 测试用例生成方法及装置、存储介质、电子设备 |
WO2019128150A1 (zh) * | 2017-12-25 | 2019-07-04 | 北京创昱科技有限公司 | 控制流程的处理方法、装置、电子设备和存储介质 |
CN110309055A (zh) * | 2019-05-23 | 2019-10-08 | 深圳壹账通智能科技有限公司 | 基于Java虚拟机的黑盒测试方法、装置、终端及存储介质 |
-
2019
- 2019-12-04 CN CN201911229940.7A patent/CN112905443B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101814055A (zh) * | 2010-04-06 | 2010-08-25 | 南京大学 | 一种测试用例聚类取样方法 |
CN102231109A (zh) * | 2011-07-15 | 2011-11-02 | 南京大学 | 无痕可管理的源代码自动插桩方法 |
CN102419728A (zh) * | 2011-11-01 | 2012-04-18 | 北京邮电大学 | 基于覆盖率量化指标确定软件测试过程充分性的方法 |
CN104252408A (zh) * | 2013-06-26 | 2014-12-31 | 国际商业机器公司 | 提供测试用例的方法和装置 |
CN104346148A (zh) * | 2013-07-30 | 2015-02-11 | 阿里巴巴集团控股有限公司 | 获取程序性能消耗信息的方法、装置及系统 |
CN103473171A (zh) * | 2013-08-28 | 2013-12-25 | 北京信息科技大学 | 一种基于函数调用路径的覆盖率动态跟踪方法及装置 |
CN107423214A (zh) * | 2017-04-18 | 2017-12-01 | 恒生电子股份有限公司 | 软件回归测试用例获取方法、装置及存储介质和电子设备 |
CN108804304A (zh) * | 2017-05-05 | 2018-11-13 | 北京京东尚科信息技术有限公司 | 测试用例生成方法及装置、存储介质、电子设备 |
CN107291622A (zh) * | 2017-07-18 | 2017-10-24 | 北京计算机技术及应用研究所 | C25汇编代码静态分析方法 |
WO2019128150A1 (zh) * | 2017-12-25 | 2019-07-04 | 北京创昱科技有限公司 | 控制流程的处理方法、装置、电子设备和存储介质 |
CN108256322A (zh) * | 2018-01-26 | 2018-07-06 | 平安科技(深圳)有限公司 | 安全测试方法、装置、计算机设备和存储介质 |
CN110309055A (zh) * | 2019-05-23 | 2019-10-08 | 深圳壹账通智能科技有限公司 | 基于Java虚拟机的黑盒测试方法、装置、终端及存储介质 |
Non-Patent Citations (2)
Title |
---|
带心情去旅行: "【Android】函数插桩(Gradle + ASM)", Retrieved from the Internet <URL:https://www.jianshu.com/p/16ed4d233fd1> * |
谈利群, 曹文静, 刘予: "软件测试工具的问题及解决方法", 装甲兵工程学院学报, no. 02 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113778890A (zh) * | 2021-09-16 | 2021-12-10 | 平安银行股份有限公司 | 代码测试方法、装置、电子设备及存储介质 |
CN113778890B (zh) * | 2021-09-16 | 2023-06-30 | 平安银行股份有限公司 | 代码测试方法、装置、电子设备及存储介质 |
CN114020648A (zh) * | 2022-01-04 | 2022-02-08 | 广东拓思软件科学园有限公司 | 应用控件的测试方法、装置、电子设备及存储介质 |
CN114020648B (zh) * | 2022-01-04 | 2022-04-12 | 广东拓思软件科学园有限公司 | 应用控件的测试方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112905443B (zh) | 2024-06-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110231994B (zh) | 内存分析方法、装置和计算机可读存储介质 | |
CN112099800B (zh) | 代码数据的处理方法、装置和服务器 | |
US11256817B2 (en) | Tool for generating security policies for containers | |
CN109308254B (zh) | 一种测试方法、装置及测试设备 | |
CN113656245B (zh) | 数据的巡检方法、装置、存储介质及处理器 | |
CN112417461A (zh) | 设备固件的模糊测试方法及系统 | |
CN112905443B (zh) | 一种测试用例生成方法、设备及存储介质 | |
CN109582548B (zh) | 一种基于无埋点的页面元素圈选方法及装置 | |
CN111913878A (zh) | 基于程序分析结果的字节码插桩方法、装置及存储介质 | |
US8412744B2 (en) | Visualization of runtime analysis across dynamic boundaries | |
CN114490413A (zh) | 测试数据的准备方法及装置、存储介质和电子设备 | |
CN111797995B (zh) | 一种模型预测样本的解释报告的生成方法及装置 | |
CN112597023A (zh) | 基于导图的案例管理方法、装置、计算机设备及存储介质 | |
CN112148590A (zh) | 一种代码覆盖率的确定方法、装置及设备 | |
CN112749197B (zh) | 数据分片刷新方法、装置、设备及存储介质 | |
CN113296777B (zh) | 依赖分析和程序编译方法、设备及存储介质 | |
CN115048083A (zh) | 组件的可视化方法、装置、存储介质及电子设备 | |
CN114416531A (zh) | 一种测试数据生成方法、装置、设备及介质 | |
JP2007133632A (ja) | セキュリティポリシー設定方法及びプログラム | |
CN110019296B (zh) | 数据库查询脚本的生成方法、装置、存储介质及处理器 | |
Bazhenov et al. | Methodology of software code decomposition analysis | |
CN110362595A (zh) | 一种sql语句动态解析方法 | |
CN116700840B (zh) | 文件执行方法、装置、电子设备及可读存储介质 | |
CN103473319B (zh) | 一种热点数据的统计方法 | |
CN111782263B (zh) | 游戏打包的处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |