CN108763094B - 测试用例生成方法、装置、设备及存储介质 - Google Patents

测试用例生成方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN108763094B
CN108763094B CN201810554901.3A CN201810554901A CN108763094B CN 108763094 B CN108763094 B CN 108763094B CN 201810554901 A CN201810554901 A CN 201810554901A CN 108763094 B CN108763094 B CN 108763094B
Authority
CN
China
Prior art keywords
test case
logical
method block
source code
logical operation
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
CN201810554901.3A
Other languages
English (en)
Other versions
CN108763094A (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.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN201810554901.3A priority Critical patent/CN108763094B/zh
Publication of CN108763094A publication Critical patent/CN108763094A/zh
Application granted granted Critical
Publication of CN108763094B publication Critical patent/CN108763094B/zh
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/3684Test management for test design, e.g. generating new test cases

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

测试用例生成方法、装置、设备及存储介质
技术领域
本申请涉及数据处理技术领域,特别涉及一种测试用例生成方法、装置、设备及存储介质。
背景技术
新版本软件在完成开发后,为了保证软件的稳定性和准确性等,需要对软件进行测试。新版本软件作为测试对象,在对测试对象进行测试时,需要对测试对象的待测功能点进行分析,根据待测功能点设计测试用例,再采用设计的测试用例对测试对象进行测试。
目前,在实际应用中,多是由开发人员对软件源代码内容进行解读,人工设置测试用例,这种测试用例生成方法,不仅浪费人力、成本高、效率低,且利用生成的测试用例进行测试时,代码覆盖率较低。
发明内容
本申请旨在至少在一定程度上解决相关技术中的技术问题之一。
为此,本申请一方面实施例提出一种测试用例生成方法,该方法通过对源代码中包含的方法块进行解析,以生成与方法块对应的测试用例框架,并根据测试用例框架自动生成源代码对应的测试用例,从而不仅提高了测试用例的生成效率及代码覆盖率,并且还能降低人工设置测试用例所花费的成本,改善了用户体验。
本申请的第二个目的在于提出一种测试用例生成装置。
本申请的第三个目的在于提出一种计算机设备。
本申请的第四个目的在于提出一种计算机可读存储介质。
为达上述目的,本申请第一方面实施例提出了一种测试用例生成方法,该方法包括:遍历目标源代码文件,获取目标源代码中包含的各方法块;将所述各方法块分别进行解析处理,确定所述各方法块中分别包括的各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符;根据所述各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符,生成所述各方法块对应的各测试用例框架;根据所述各测试用例框架,生成所述目标源代码对应的测试用例。
本申请实施例提供的测试用例生成方法,通过遍历目标源代码文件,获取目标源代码包含的各方法块,并将各方法块分别进行解析处理,确定各方法块中分别包括的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符,然后根据确定的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符,生成各方法块对应的各测试用例框架,然后根据各测试用例框架,生成目标源代码对应的测试用例。由此,通过对源代码中包含的方法块进行解析,以生成与方法块对应的测试用例框架,并根据测试用例框架自动生成源代码对应的测试用例,从而不仅提高了测试用例的生成效率及代码覆盖率,并且还能降低人工设置测试用例所花费的成本,改善了用户体验。
另外,本申请上述实施例提出的测试用例生成方法还可以具有如下附加的技术特征:
可选的,在本申请的一个实施例中,所述目标源代码文件的第一方法块中包括N个分支语句,其中,N为正整数;所述将所述各方法块分别进行解析处理,确定所述各方法块中分别包括的各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符,包括:将所述第一方法块进行解析处理,获取所述N个分支语句;分别将所述N个分支语句进行解析处理,确定所述N个分支语句中的各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符。
可选的,在本申请的另一个实施例中,所述目标源代码文件的第二方法块中包括的非逻辑运算式的数量小于阈值;所述根据所述各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符,生成所述各方法块对应的各测试用例框架,包括:根据所述第二方法块中的各非逻辑运算式分别对应的不同取值,生成所述第二方法块对应的各测试用例框架,其中,任意两个测试用例框架中至少一个非逻辑运算式的取值不同。
可选的,在本申请的另一个实施例中,所述目标源代码文件的第三方法块中包括的非逻辑运算式的数量大于阈值;所述根据所述各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符,生成所述各方法块对应的各测试用例框架,包括:根据所述第三方法块中各非逻辑运算式的取值及连接所述各非逻辑运算式的逻辑运算符,确定所述第三方法块的两个不同返回值分别对应的两个非逻辑运算式取值组集合;从所述两个非逻辑运算式取值组集合中,各获取一个非逻辑运算式取值组,其中,任意一个非逻辑运算式在获取的两个非逻辑运算式取值组中的取值不同;根据获取的两个非逻辑运算式取值组,确定所述第三方法块对应的测试用例框架。
可选的,在本申请的另一个实施例中,所述根据所述各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符,生成所述各方法块对应的各测试用例框架,包括:根据预设的规则,确定各非逻辑运算式分别对应的各变量;利用所述连接所述各非逻辑运算式的逻辑运算符,连接所述各变量以生成所述各方法块分别对应的各抽象语句;基于所述各抽象语句,生成所述各方法块对应的各测试用例框架。
可选的,在本申请的另一个实施例中,所述生成所述目标源代码对应的测试用例之后,还包括:获取所述目标源代码基于所述测试用例测试时生成的覆盖率信息;根据所述覆盖率信息,对所述测试用例进行修正。
可选的,在本申请的另一个实施例中,所述覆盖率信息,包括未覆盖代码对应的代码行;所述根据所述覆盖率信息,对所述测试用例进行修正,包括:根据所述未覆盖代码对应的代码行,确定所述未覆盖代码所在的目标方法块;确定所述测试用例框架中与所述目标方法块对应的目标测试用例框架;对所述目标测试用例框架中的测试用例进行修正。
可选的,在本申请的另一个实施例中,所述根据所述覆盖率信息,对所述测试用例进行修正之前,还包括:确定所述覆盖率信息未满足预设的覆盖条件。
可选的,在本申请的另一个实施例中,所述生成所述目标源代码对应的测试用例之后,还包括:在目标源代码文件更新时,获取更新后的目标源代码文件与目标源代码文件间的差异信息;对所述差异信息进行解析处理,生成所述差异信息对应的更新测试用例框架;利用所述更新测试用例框架,对所述目标源代码对应的各测试用例框架进行更新,以生成所述更新后的目标源代码文件对应的各测试用例框架。
为达上述目的,本申请第二方面实施例提出了一种测试用例生成装置,该装置包括:第一获取模块,用于遍历目标源代码文件,获取目标源代码中包含的各方法块;第一确定模块,用于将所述各方法块分别进行解析处理,确定所述各方法块中分别包括的各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符;第一生成模块,用于根据所述各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符,生成所述各方法块对应的各测试用例框架;第二生成模块,用于根据所述各测试用例框架,生成所述目标源代码对应的测试用例。
本申请实施例提供的测试用例生成装置,通过遍历目标源代码文件,获取目标源代码包含的各方法块,并将各方法块分别进行解析处理,确定各方法块中分别包括的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符,然后根据确定的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符,生成各方法块对应的各测试用例框架,然后根据各测试用例框架,生成目标源代码对应的测试用例。由此,通过对源代码中包含的方法块进行解析,以生成与方法块对应的测试用例框架,并根据测试用例框架自动生成源代码对应的测试用例,从而不仅提高了测试用例的生成效率及代码覆盖率,并且还能降低人工设置测试用例所花费的成本,改善了用户体验。
为达上述目的,本申请第三方面实施例提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时,以实现第一方面实施例所述的测试用例生成方法。
本申请实施例提供的计算机设备,通过遍历目标源代码文件,获取目标源代码包含的各方法块,并将各方法块分别进行解析处理,确定各方法块中分别包括的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符,然后根据确定的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符,生成各方法块对应的各测试用例框架,然后根据各测试用例框架,生成目标源代码对应的测试用例。由此,通过对源代码中包含的方法块进行解析,以生成与方法块对应的测试用例框架,并根据测试用例框架自动生成源代码对应的测试用例,从而不仅提高了测试用例的生成效率及代码覆盖率,并且还能降低人工设置测试用例所花费的成本,改善了用户体验。
为达上述目的,本申请的第四方面实施例提出了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时,以实现第一方面实施例所述的测试用例生成方法。
本申请附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。
附图说明
本申请上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为本申请一个实施例的测试用例生成方法的流程示意图;
图2为本申请另一个实施例的测试用例生成方法的流程示意图;
图3为本申请又一个实施例的测试用例生成方法的流程示意图;
图4为本申请再一个实施例的测试用例生成方法的流程示意图;
图5为本申请一个实施例的对各非逻辑运算式进行抽象化处理的示意图;
图6为本申请另一个实施例的对各非逻辑运算式进行抽象化处理的示意图;
图7为本申请一个实施例的生成测试用例的整体过程示意图;
图8为本申请再一个实施例的测试用例生成方法的流程示意图;
图9为本申请一个实施例的对测试用例进行修正的流程示意图;
图10为本申请一个实施例的利用测试用例对目标源代码进行测试,并根据覆盖率信息确定是否对测试用例进行修正的示意图;
图11为本申请一个实施例的测试用例生成装置的结构示意图;
图12为本申请一个实施例的测试用例生成装置的结构示意图;
图13为本申请又一个实施例的测试用例生成装置的结构示意图;
图14为本申请再一个实施例的测试用例生成装置的结构示意图;
图15为本申请再一个实施例的测试用例生成装置的结构示意图;
图16为本申请一个实施例的计算机设备的结构示意图;
图17为本申请另一个实施例的计算机设备的结构示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本申请,而不能理解为对本申请的限制。
本申请中各实施例主要针对相关技术中,对开发的软件进行测试时,大多是由开发人员对软件源代码内容进行解读,人工设置测试用例,这种测试用例生成方法,不仅浪费人力、成本高、效率低,且利用生成的测试用例对源文件进行测试时,代码覆盖率比较低的问题,提出一种测试用例生成方法。
本申请实施例,通过对目标源代码文件进行遍历,获取目标源代码中包含的各方法块,并对获取的各方法块分别进行解析处理,确定出各方法块中分别包括的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符,然后根据各非逻辑运算式及连接各非逻辑运算式的逻辑运算符,生成各方法块对应的各测试用例框架,并根据各测试用例框架,生成目标源代码对应的测试用例。由此,通过对源代码中包含的方法块进行解析,以生成与方法块对应的测试用例框架,并根据测试用例框架自动生成源代码对应的测试用例,从而不仅提高了测试用例的生成效率及代码覆盖率,并且还能降低人工设置测试用例所花费的成本,改善了用户体验。
下面参考附图描述本申请实施例的测试用例生成方法、装置、设备及存储介质。
首先结合附图1,对本申请实施例提供的测试用例生成方法进行具体说明。
图1为本申请一个实施例的测试用例生成方法的流程示意图。
如图1所示,本申请的测试用例生成方法可以包括以下步骤:
步骤101,遍历目标源代码文件,获取目标源代码中包含的各方法块。
其中,本申请实施例提供的测试用例生成方法,可以由本申请实施例提供的计算机设备执行。其中,计算机设备中设置有测试用例生成装置,以用于对目标源代码文件进行解析处理,生成测试用例。本实施例计算机设备可以是任一具有数据处理功能的硬件设备,比如智能手机、平板电脑、个人数字助理等等。
在本申请的一种可选的实现形式中,可以直接通过对目标源代码文件进行遍历操作,获取目标源代码中包含的各方法块;或者,还可以通过正则表达式获取目标源代码中包含的各方法块等等,此处对其不作具体限定。
可选的,本实施例在获取目标源代码中包括的各方法块时,还可以首先通过遍历目标源代码文件,生成抽象语法树(abstract syntax tree,简称为:AST),然后对抽象语法树进行遍历,获取目标源代码中包括的各方法块。
在实际应用时,AST树可以包括:标识符节点、类型节点、声明节点、函数节点、语句节点、表达式节点等等多个节点,其中函数节点对应方法块,因此本实施例通过对AST树进行遍历,获取目标源代码中包括的各方法块时,可以通过遍历目标源代码对应的AST树,以获取AST树中的函数节点,即可获取目标源代码中的方法块。在本实施例中,可以使用GCC(GNU Compiler Collection)编译器生成抽象语法树。
步骤102,将各方法块分别进行解析处理,确定各方法块中分别包括的各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符。
其中,方法块中包括的非逻辑运算式,可以是指除逻辑运算符之外的任一表达式,比如“a>b”,“a=b”,等等。
可选的,当获取到目标源代码中包含的各方法块之后,测试用例生成装置可以通过搜索文件获得模式(egrep),对各方法块分别进行解析处理,以确定出各方法块中分别包括的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符,或者,还可以通过其它方式,对各方法块进行解析处理,确定各方法块中分别包括的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符信息。
举例来说,若获取到方法块C为:if((a>b)&&c||(c==d)),那么测试用例生成装置通过对上述方法块C进行解析,可以确定出方法块C中包括的逻辑运算符为:&&、||;非逻辑运算式为:a>b、c、c==d。
步骤103,根据各非逻辑运算式及连接各非逻辑运算式的逻辑运算符,生成各方法块对应的各测试用例框架。
步骤104,根据各测试用例框架,生成目标源代码对应的测试用例。
可选的,当确定出各方法块分别包括的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符之后,测试用例生成装置即可根据各非逻辑运算式及连接各非逻辑运算式的逻辑运算符,确定出对应的各测试用例框架,之后即可根据各测试用例框架,生成对应的各测试用例,并对确定的各测试用例进行组合排列,生成目标源代码对应的测试用例。
例如,若方法块i包括if((a>c)||(c>3)),则可以确定方法块i中包括的非逻辑运算式为:a>c、c>3,连接各非逻辑运算式的逻辑运算符为||,那么根据各非逻辑运算式取不同的值,可以确定出方法块i对应的测试用例框架,需要包括22=4种情况。从而生成的方法块i对应的一个测试用例框架可以为:
test_func0_i(){#(a>c)F(c>3)T}
其中,上述测试框架,用于指示该测试框架与方法块i对应,且该测试框架中,(a>c)为假、c>3为真。之后根据该框架,为变量a、c分别赋值后,即可生成该测试框架对应的测试用例。
需要说明的是,本实施例为框架中各变量赋值,生成框架对应的测试用例时,可以是测试人员根据测试框架为各变量进行赋值,也可以是测试用例生成装置,自动为各变量进行赋值等等,此处不作具体限定。
可以理解的是,本实施例的测试用例生成装置通过对目标源代码进行遍历,获取目标源代码中包括的各方法块,并通过对各方法块进行解析处理,生成与目标源代码对应的测试用例,以实现测试用例的自动生成,从而节省了人力成本。
本申请实施例提供的测试用例生成方法,通过遍历目标源代码文件,获取目标源代码包含的各方法块,并将各方法块分别进行解析处理,确定各方法块中分别包括的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符,然后根据确定的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符,生成各方法块对应的各测试用例框架,然后根据各测试用例框架,生成目标源代码对应的测试用例。由此,通过对源代码中包含的方法块进行解析,以生成与方法块对应的测试用例框架,并根据测试用例框架生成源代码对应的测试用例,从而不仅提高了测试用例的生成效率及代码覆盖率,并且还能降低人工设置测试用例所花费的成本,改善了用户体验。
通过上述分析可知,本申请通过对获取的各方法块进行解析处理,生成各测试用例框框架,以根据各测试用例框架生成目标源代码对应的测试用例。
由于在实际应用时,目标源代码中包含的各方法块,可能还包括任意数量分支语句。其中当任意方法块中包括多个分支语句时(比如,N个分支语句,其中N为正整数),为了保证确定的该方法块对应的测试用例框架,可以最大程度的覆盖该方法块,本实施例可以通过对包括N个分支语句的方法块进行更细致的解析处理,以使确定的测试用例框架更完整、全面。下面结合图2,对本申请的测试用例生成方法进行进一步的说明。
图2为本申请另一个实施例的测试用例生成方法的流程示意图。
如图2所示,本申请实施例的测试用例生成方法可以包括以下步骤:
步骤201,遍历目标源代码文件,获取目标源代码中包含的各方法块。
其中,在本实施例中,获取的各方法块可以是一个或者多个,本实施例对此不作具体限定。
可选的,若获取的各方法块为多个,则为了区分各分方块,本实施例可以对各方法块进行标记。其中,可以采用数字对各方法块进行标记,或者,还可以采用英文字母对各方法块进行标记等等,此处对此不作具体限定。
例如,若从目标源代码中,获取到5个方法块,则测试用例生成装置可以利用数字对上述5个方法块进行标记,分别为:第一方法块,第二方法块,第三方法块,第四方法块,第五方法块。
进一步的,获取到目标源代码中包含的各方法块之后,测试用例生成装置可分别对各方法块进行解析处理,确定各方法块中分别包括的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符。
其中,若确定出第一方法块中包括N个分支语句时,则本实施例通过对N个分支语句分别进行解析处理,以使最终确定的非逻辑运算式及连接各非逻辑运算式的逻辑运算符更全面。下面通过步骤202-步骤203对上述情况进行具体描述。
需要说明的是,在本实施例中,第一方法块可以是获取的各方法块中的任意一个包括N个分支语句的方法块,本实施例对此不作具体限定。
步骤202,将第一方法块进行解析处理,获取N个分支语句。
由于在实际应用中,代码中包括的分支结构,通常是指代码中包括的if语句,或者switch语句。因此,本实施例在确定第一方法块中包含的N个分支语句时,可以通过正则表达式,对第一方法块进行解析处理,来获取第一方法块中包含的N个分支语句;或者,还可以通过对目标源代码对应的AST树进行遍历,获取AST树中与第一方法块对应的函数节点及该函数节点下方的各语句节点,来获取第一方法块中包含的N个分支语句等等,此处对其不作具体限定。
步骤203,分别将N个分支语句进行解析处理,确定N个分支语句中的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符。
可选的,当获取到第一方法块包含的N个分支语句之后,本实施例中的测试用例生成装置可以通过搜索文件获得模式(egrep),对N个分支语句分别进行解析处理,以确定出N个分支语句中分别包括的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符。
步骤204,根据各非逻辑运算式及连接各非逻辑运算式的逻辑运算符,生成第一方法块对应的测试用例框架及其他各方法块对应的测试用例框架。
步骤205,根据第一方块对应的测试用例框架及其它各方法块对应的测试用例框架,生成目标源代码对应的测试用例。
本实施例的测试用例生成方法,通过对包括N个分支语句的方法块中的N个分支语句分别进行解析处理,使得最终生成的测试用例覆盖率更高。
通过上述分析可知,本申请通过对包括N个分支语句的第一方法块中的N个分支语句分别进行解析处理,以确定出覆盖率极高的测试用例。
在具体实现时,由于各方法块中包括的非逻辑运算式数量,可能会影响后续测试用例框架生成的测试用例个数,本申请实施例可以根据各方法块中包括的非逻辑运算式的数量,或者对目标源代码的测试目的,设置一个阈值,以通过该阈值确定生成各测试用例框架的方式,从而根据上述方式生成各方块对应的测试用例框架。下面结合图3,对本申请的测试用例生成方法进行进一步的说明。
图3为本申请又一个实施例的测试用例生成方法的流程示意图。
如图3所示,本申请实施例的测试用例生成方法可以包括以下步骤:
步骤301,遍历目标源代码文件,获取目标源代码中包含的各方法块。
步骤302,将各方法块分别进行解析处理,确定各方法块中分别包括的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符。
步骤303,确定各方法块中分别包括的各非逻辑运算式的数量是否小于阈值,若小于,则执行步骤304,否则,执行步骤305。
其中,阈值可以根据目标源代码中各方块包括的分支语句数量进行适应性设置,本实施例对此不作具体限定。
可选的,在本实施例中,在确定出各方法块中分别包括的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符之后,测试用例生成装置可将各方法块分别包括的各非逻辑运算式的数量分别与阈值进行作差,以确定出包括非逻辑运算式的数量小于阈值的各方法块,以及包括非逻辑运算式的数量大于阈值的各方法块。
举例来说,若阈值为3,从目标源代码中获取的各方法块,分别为方法块A、方法块B,方法块C、方法块D,那么通过将方法块A中包括的各非逻辑运算式的数量2、方法块B中包括的各非逻辑运算式的数量3、方法块C中包括的各非逻辑运算式的数量5,以及方法块D中包括的各非逻辑运算式的数量4,分别与阈值3作差,得到差值分别为-1、0、2、1,那么根据上述差值就可以确定出方法块A包括的各非逻辑运算式的数量小于阈值,方法块B、方法块C及方法块D分别包括的各非逻辑运算式的数量大于或者等于阈值。
步骤304,根据第二方法块中的各非逻辑运算式分别对应的不同取值,生成第二方法块对应的各测试用例框架。
其中,任意两个测试用例框架中至少一个非逻辑运算式的取值不同。例如,测试用例框架1中的非逻辑运算式A为真,测试用例框架2中的非逻辑运算式A为假。
需要说明的是,在本实施例中,第二方法块可以是各方法块中任意包括的非逻辑运算式的数量小于阈值的方法块,本实施例对此不作具体限定。
可选的,当确定出第二方法块中的各非逻辑运算式的数量小于阈值时,则说明本实施例测试用例生成装置可以利用二进制数的方式,对第二方法块中各非逻辑运算式进行处理,以生成第二方法块对应的测试用例框架。
也就是说,当任意方法块中包括的非逻辑运算式的数量小于阈值时,测试用例生成装置通过使用二进制数的方式,可以生成该方法块在满足理想情况下条件全覆盖对应的测试用例。
例如,若方法块n包括if((a>b)&&c||(c==d)),则说明该方法块中包括3个非逻辑运算式,分别为:a>b,c,c==d,并且每个非逻辑运算式分别对应的取值可以包括真和假两种情况,那么由于第二方法块中包括3个非逻辑运算式,则可以确定第二方法块对应的测试用例框架中,需要包括23=8种情况。从而生成的第二方法块n对应的一个测试用例框架可以为:
test_func1_n(){#(a>b)T(c)T(c==d)F}
其中,上述测试框架,用于指示该测试框架与方法块n对应,且该测试框架中,(a>b)为真、c为真,(c==d)为假。之后根据该框架,为变量a、b、c、d分别赋值后,即可生成该测试框架对应的测试用例。
步骤305,根据第三方法块中各非逻辑运算式的取值及连接各非逻辑运算式的逻辑运算符,确定第三方法块的两个不同返回值分别对应的两个非逻辑运算式取值组集合。
其中,在本实施例中,第三方法块可以是各方法块中任意包括的非逻辑运算式的数量大于或等于阈值的方法块,本实施例对此不作具体限定。
在实际应用中,当确定第三方法块中包括的非逻辑运算式的数量大于阈值式,若仍采用二进制数的方式,确定第三方法块对应的各测试用例框架时,会花费较多时间,影响生成测试用例框架的效率。对此,为了简化操作,节省生成测试用例框架的时间,本实施例在确定出第三方法块中包括的非逻辑运算式的数量大于阈值时,可利用二分图算法,对第三方块中包括的非逻辑运算式进行处理,以生成第三方法块对应的测试用例框架。
可选的,通过对第三方法块中各非逻辑运算式的取值及连接各非逻辑运算式的逻辑运算符进行分析,确定出第三方法块的两个不同返回值分别对应的两个非逻辑运算式取值组集合。
需要说明的是,在本实施例中,确定第三方法块的两个不同返回值分别对应的非逻辑运算式取值组集合,即第三方法块取值为真时对应的各非逻辑运算式取值组集合,及第三方法块取值为假时对应的各非逻辑运算式取值组集合。
例如,若第三方法块M包括语句:if((a>b)&&c||(c==d)),则可以确定出第三方法块M中非逻辑运算式为:a>b、c、c==d,及连接各非逻辑运算式的逻辑运算符为:&&、||。从而即可确定该语句取值为真(Ture,简称为T)时,对应的各非逻辑运算取值组集合中,包括:a>b为T,c为T,c==d为假(False,简称为:F);及a>b为T、c为T、c==d为T等。
又例如,若第三方法块M包括语句:if((a>b)&&c||(c==d)),则可以确定出第三方法块M中非逻辑运算式为:a>b、c、c==d,及连接各非逻辑运算式的逻辑运算符为:&&、||。从而即可确定该语句取值为F时,对应的各非逻辑运算取值组集合中,包括:a>b取值为F,c取值为T,c==d取值为F时及a>b为T、c为F、c==d为F;及a>b为F、c为F、c==d为F等等。
步骤306,从两个非逻辑运算式取值组集合中,各获取一个非逻辑运算式取值组。
其中,任意一个非逻辑运算式在获取的两个非逻辑运算式取值组中的取值不同。
例如,从方法块M取值为真时对应的各非逻辑运算式取值组集合中,获取非逻辑运算式取值组为:a>b取值为T,c取值为T,c==d取值为T,那么从方法块M取值组为假时对应的各非逻辑运算式取值组集合中,获取非逻辑运算式取值组应该为:a>b取值为F,c取值为F,c==d取值为F。
步骤307,根据获取的两个非逻辑运算式取值组,生成第三方法块对应的测试用例框架。
可选的,当获取到两个不同取值的非逻辑运算式组之后,测试用例生成装置即可根据上述两个不同取值的非逻辑运算式组,确定出第三方法块对应的测试用例框架。
步骤308,根据各测试用例框架,生成目标源代码对应的测试用例。
本实施例的测试用例生成方法,通过将获取的各方法块中包括的非逻辑运算式的数量与阈值进行比较,确定出适合各方法块生成对应的各测试用例框架的方式,以使生成各测试用例框架更高效快捷。
通过上述分析可知,本申请通过将各方法块中包括的非逻辑运算式的数量与阈值进行比较,确定采用二进制数或者二分图算法等方式,生成各方法块对应的格式用例框架。在具体实现时,为了计算简便,本实施例可以将各方法块中包括的各非逻辑运算式进行抽象处理,以利用标号对各非逻辑运算式进行替换。例如,通过c1替换非逻辑运算式a>b。下面结合图4,对本申请的测试用例生成方法进行进一步的说明。
图4为本申请再一个实施例的测试用例生成方法的流程示意图。
如图4所示,本申请实施例的测试用例生成方法可以包括以下步骤:
步骤401,遍历目标源代码文件,获取目标源代码中包含的各方法块。
步骤402,将各方法块分别进行解析处理,确定各方法块中分别包括的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符。
例如,第一方法块中包括if((a>b)&&c||(c==d)),那么可以确定出第一方法块中包括的非逻辑运算式为:a>b、c、c==d,逻辑运算符为:&&、||。
步骤403,根据预设的规则,确定各非逻辑运算式分别对应的各变量。
其中,预设的规则,具体是指能够整体替换各非逻辑运算式的任意符号。比如c1、c2、c3,或者,s1、s2、s3等等,此处对其不作具体限定。
可选的,在使用计算机设备之前,预设的规则是利用c1、c2、c3、…、cn替换各方法块中各非逻辑运算式时,则当测试用例生成装置确定出各方法块中分别包括的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符之后,即可根据预设的规则确定出各非逻辑运算式分别对应的各变量c1、c2、c3、…、cn。
举例来说,若预设的规则是利用c1、c2、c3、…、cn,将各方法块中包括的各非逻辑运算式进行替换,且各方法块中包括的各非逻辑运算式为:a>b、c、c==d,那么利用c1、c2、c3、…、cn,替换后的各非逻辑运算式则为:c1、c2、c3。
步骤404,利用连接各非逻辑运算式的逻辑运算符,连接各变量以生成各方法块分别对应的各抽象语句。
继续利用上述步骤中的示例进行说明,当第一方法块中的逻辑运算符为&&、||时,则可以将第一方法中的if((a>b)&&c||(c==d))抽象成((c1)&&c2||(c3))。
具体参见图5和图6,对本实施例利用变量替换各非逻辑运算式的过程进行详细描述。
其中图5表示的是当各方法块中包括的各非逻辑运算式的数量小于阈值时,采用二进制数的方式对各非逻辑运算式进行抽象化处理的流程示意图;图6表示的是当各方法块中包括的各非逻辑运算式的数量大于阈值时,采用二分图算法对各非逻辑运算式进行抽象化处理的流程示意图。
步骤405,基于各抽象语句,生成各方法块对应的各测试用例框架。
也就是说,当生成各方法块对应的各抽象语句之后,测试用例生成装置即可根据各抽象语句对应的取值,生成各方法块对应的各测试用例框架。
步骤406,根据各测试用例框架,生成目标源代码对应的测试用例。
综上,该实施例的整体执行过程可参见图7所示。
本实施例提供的测试用例生成方法,通过对各方法块中包括的非逻辑运算式进行抽象处理,以使在生成各方法块对应的各测试用例框架时可以仅关注每个变量的取值即可,从而有效简化了生成各方法块对应的各测试用例框架的操作,提高了处理效率,满足了用户需求。
通过上述分析可知,本申请通过利用变量替换各方法块中包括的各非逻辑运算式,以实现对各方法块中包括的各非逻辑运算式进行抽象处理,使得后续生成各方法块对应的各测试用例框架及目标源代码对应的测试用例效率更高。
在本申请的一种可选的实现形式中,当生成目标源代码对应的测试用例之后,测试用例生成装置即可根据测试用例对目标源代码进行测试,以确定目标源代码的覆盖率信息,并根据覆盖率信息,对测试用例进行修正,以对测试用例进行完善。下面结合图8,对本申请的测试用例生成方法进行进一步的说明。
图8为本申请再一个实施例的测试用例生成方法的流程示意图。
如图8所示,本申请实施例的测试用例生成方法可以包括以下步骤:
步骤801,获取目标源代码基于测试用例测试时生成的覆盖率信息。
其中,覆盖率信息,可以包括未覆盖代码对应的代码行、未覆盖代码对应的代码、覆盖率、完成时间等等。
可选的,本实施例在利用测试用例对目标源代码进行覆盖率测试之后,可将覆盖率信息以覆盖率信息报告的形式反馈至计算机设备的显示界面,以使用户可以更直观的确定目标源代码中未覆盖代码对应的代码行、整体覆盖率等信息。
其中,为了方便用户确定未覆盖代码对应的代码及代码行,本实施例可以将覆盖率信息中未覆盖代码对应的代码行及代码进行高亮显示。
步骤802,根据覆盖率信息,对测试用例进行修正。
可选的,当获取到目标源代码的覆盖率信息之后,本实施例的测试用例生成装置即可根据覆盖率信息对测试用例进行修正,以提高测试用例对目标源代码的测试覆盖率。
作为一种可选的实现方式,本实施例在根据覆盖率信息,对测试用例进行修改之前,还可以确定覆盖率信息未满足预设的覆盖条件。
其中,预设的覆盖条件,可以是语句覆盖、条件覆盖、函数覆盖是否满足阈值。其中,阈值可以是计算机设备默认设置的,也可以是用户人为自定义设置的,本实施例对此不作具体限定。
也就是说,通过确定获取的覆盖率信息,确定语句覆盖、条件覆盖、函数覆盖是否达到阈值,若达到则说明当前的测试用例符合要求,则对该测试用例不作修正,若未达到则说明当前的测试用例不符合要求,则需要对该测试用例进行修正,以完善测试用例存在的不足。
进一步的,当根据覆盖率信息确定出当前测试用例未达到阈值时,则对该测试用例进行修正,具体实现过程,参见图9所示。
图9为本申请一个实施例的对测试用例进行修正的流程示意图。
如图9所示,本申请实施例对测试用例进行修正可以包括以下步骤:
步骤901,根据未覆盖代码对应的代码行,确定未覆盖代码所在的目标方法块。
步骤902,确定测试用例框架中与目标方法块对应的目标测试用例框架。
步骤903,对目标测试用例框架中的测试用例进行修正。
也就是说,本实施例通过对未覆盖代码所在的目标方法块进行确定,进而再根据测试用例框架中与目标方法块对应的目标测试用例框架,对目标测试用例框架中的测试用例进行修正,从而实现了利用反推的方式,对测试用例进行准确有效的修正,从而使得修正后的测试用例对目标源代码的测试质量更好。
该实施例的上述实现过程,具体可参见图10所示。
在本申请的一种可选的实现方式中,本实施例在生成目标源代码对应的测试用例之后,本申请的测试用例生成方法,还可以在目标源代码文件更新时,对测试用例进行相应的更新操作。
具体实现时,可以包括:
在目标源代码文件更新时,获取更新后的目标源代码文件与目标源代码文件间的差异信息;
对差异信息进行解析处理,生成差异信息对应的更新测试用例框架;
利用更新测试用例框架,对目标源代码对应的各测试用例框架进行更新,以生成更新后的目标源代码文件对应的各测试用例框架。
其中,差异信息可以是差异代码,或者差异代码的结构信息。上述差异代码的结构信息用于指示差异代码的具体结构,比如差异代码为顺序结构、或分支结构等,此处不作具体限定。
需要说明的是,本实施例在目标源代码更新时,对测试用例进行更新时,可以包括两种情况。
第一种情况,当确定更新后的目标源代码文件与目标源代码文件间的差异信息,与目标源代码文件没有关联,则可根据差异代码生成测试用例框架,然后将测试用例框架合并至测试用例框架中,以生成更新后的源代码的各测试用例框架。
第二情况,当确定更新后的目标源代码文件与目标源代码文件间的差异信息,与目标源代码文件有关联,例如在目标源代码中的a>b,改成a<b,此时测试用例生成装置不能仅根据差异代码生成对应的测试用例框架,而应当重新对更新后的目标源代码文件进行遍历,获取更新后的目标源代码中包含的各方法块,并将各方法块分别进行解析,确定各方法块中分别包括的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符,然后根据各非逻辑运算式及连接各非逻辑运算式的逻辑运算符,生成各方法块对应的各测试用例框架。
本实施例提供的测试用例生成方法,通过获取目标源代码基于测试用例测试时生成的覆盖率信息,并根据覆盖率信息,对测试用例进行修正,以提高对目标源代码的测试覆盖率。并且,当确定目标源代码有更新时,根据更新的内容,采取不同的方式对测试用例进行更新,从而实现了在目标源代码快速迭代时同步更新测试用例,不仅能够减少用户的重复工作,且不会因为代码快速迭代浪费用户时间,并且还能保持高覆盖率。
下面参照附图描述本申请实施例提出的测试用例生成装置。
图11为本申请一个实施例的测试用例生成装置的结构示意图。
如图11所示,该测试用例生成装置包括:第一获取模块11、第一确定模块12、第一生成模块13及第二生成模块14。
其中,第一获取模块11用于遍历目标源代码文件,获取目标源代码中包含的各方法块;
第一确定模块12用于将所述各方法块分别进行解析处理,确定所述各方法块中分别包括的各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符;
第一生成模块13用于根据所述各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符,生成所述各方法块对应的各测试用例框架;
第二生成模块14用于根据所述各测试用例框架,生成所述目标源代码对应的测试用例。
需要说明的是,本实施例的测试用例生成装置的实施过程和技术原理参见前述对第一方面实施例的测试用例生成方法的解释说明,此处不再赘述。
本申请实施例提供的测试用例生成装置,通过遍历目标源代码文件,获取目标源代码包含的各方法块,并将各方法块分别进行解析处理,确定各方法块中分别包括的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符,然后根据确定的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符,生成各方法块对应的各测试用例框架,然后根据各测试用例框架,生成目标源代码对应的测试用例。由此,通过对源代码中包含的方法块进行解析,以生成与方法块对应的测试用例框架,并根据测试用例框架生成源代码对应的测试用例,从而不仅提高了测试用例的生成效率及代码覆盖率,并且还能降低人工设置测试用例所花费的成本,改善了用户体验。
在示例性实施例中,还提供了一种测试用例生成装置。
图12为本申请另一个实施例的测试用例生成装置的结构示意图。
参照图12所示,本申请的测试用例生成装置包括:第一获取模块11、第一确定模块12、第一生成模块13及第二生成模块14。
其中,第一获取模块11用于遍历目标源代码文件,获取目标源代码中包含的各方法块;
所述目标源代码文件的第一方法块中包括N个分支语句,其中,N为正整数。
第一确定模块12用于将所述各方法块分别进行解析处理,确定所述各方法块中分别包括的各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符;
作为一种可选的实现形式,第一确定模块12还包括:第一获取子单元121和第一确定子单元122。
其中,第一获取子单元121用于将所述第一方法块进行解析处理,获取所述N个分支语句;
第一确定子单元122用于分别将所述N个分支语句进行解析处理,确定所述N个分支语句中的各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符。
第一生成模块13用于根据所述各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符,生成所述各方法块对应的各测试用例框架;
第二生成模块14用于根据所述各测试用例框架,生成所述目标源代码对应的测试用例。
需要说明的是,本实施例的测试用例生成装置的实施过程和技术原理参见前述对第一方面实施例的测试用例生成方法的解释说明,此处不再赘述。
本申请实施例提供的测试用例生成装置,通过对包括N个分支语句的方法块中的N个分支语句分别进行解析处理,使得最终生成覆盖率极高的测试用例。
在示例性实施例中,还提供了一种测试用例生成装置。
图13为本申请又一个实施例的测试用例生成装置的结构示意图。
如图13所示,本申请的测试用例生成装置包括:第一获取模块11、第一确定模块12、第一生成模块13及第二生成模块14。
其中,第一获取模块11用于遍历目标源代码文件,获取目标源代码中包含的各方法块;
第一确定模块12用于将所述各方法块分别进行解析处理,确定所述各方法块中分别包括的各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符;
第一生成模块13用于根据所述各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符,生成所述各方法块对应的各测试用例框架;
作为一种可选的实现方式,第一生成模块13还包括:第一生成子单元131。
其中,所述目标源代码文件的第二方法块中包括的非逻辑运算式的数量小于阈值;
第一生成子单元131用于根据所述第二方法块中的各非逻辑运算式分别对应的不同取值,生成所述第二方法块对应的各测试用例框架,其中,任意两个测试用例框架中至少一个非逻辑运算式的取值不同。
作为另一种可选的实现方式,第一生成模块13还包括:第二确定子单元、第二获取子单元、第三确定子单元。
其中,所述目标源代码文件的第三方法块中包括的非逻辑运算式的数量大于阈值;
第二确定子单元用于根据所述第三方法块中各非逻辑运算式的取值及连接所述各非逻辑运算式的逻辑运算符,确定所述第三方法块的两个不同返回值分别对应的两个非逻辑运算式取值组集合;
第二获取子单元用于从所述两个非逻辑运算式取值组集合中,各获取一个非逻辑运算式取值组,其中,任意一个非逻辑运算式在获取的两个非逻辑运算式取值组中的取值不同;
第三确定子单元用于根据获取的两个非逻辑运算式取值组,确定所述第三方法块对应的测试用例框架。
第二生成模块14用于根据所述各测试用例框架,生成所述目标源代码对应的测试用例。
需要说明的是,前述对测试用例生成方法实施例的解释说明也适用于该实施例的测试用例生成装置,其实现原理类似,此处不再赘述。
本实施例的测试用例生成装置,通过将获取的各方法块中包括的非逻辑运算式的数量与阈值进行比较,确定出适合各方法块生成对应的各测试用例框架的方式,以使生成各测试用例框架更高效快捷。
在示例性实施例中,还提供了一种测试用例生成装置。
图14为本申请再一个实施例的测试用例生成装置的结构示意图。
如图14所示,本申请的测试用例生成装置包括:第一获取模块11、第一确定模块12、第一生成模块13及第二生成模块14。
其中,第一获取模块11用于遍历目标源代码文件,获取目标源代码中包含的各方法块;
第一确定模块12用于将所述各方法块分别进行解析处理,确定所述各方法块中分别包括的各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符;
第一生成模块13用于根据所述各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符,生成所述各方法块对应的各测试用例框架;
作为一种可选的实现方式,第一生成模块13还包括:第四确定子单元132、第一控制子单元133、第二生成子单元134。
其中,第四确定子单元132用于根据预设的规则,确定各非逻辑运算式分别对应的各变量;
第一控制子单元133用于利用所述连接所述各非逻辑运算式的逻辑运算符,连接所述各变量以生成所述各方法块分别对应的各抽象语句;
第二生成子单元134用于基于所述各抽象语句,生成所述各方法块对应的各测试用例框架。
第二生成模块14用于根据所述各测试用例框架,生成所述目标源代码对应的测试用例。
需要说明的是,前述对测试用例生成方法实施例的解释说明也适用于该实施例的测试用例生成装置,其实现原理类似,此处不再赘述。
本实施例提供的测试用例生成装置,通过对各方法块中包括的非逻辑运算式进行抽象处理,以使在生成各方法块对应的各测试用例框架时可以仅关注每个变量的取值即可,从而有效简化了生成各方法块对应的各测试用例框架的操作,提高了处理效率,满足了用户需求。
在示例性实施例中,还提供了一种测试用例生成装置。
图15为本申请再一个实施例的测试用例生成装置的结构示意图。
如图15所示,本申请的测试用例生成装置还包括:第二获取模块15、修正模块16。
其中,第二获取模块15用于获取所述目标源代码基于所述测试用例测试时生成的覆盖率信息;
所述覆盖率信息,包括未覆盖代码对应的代码行;
修正模块16用于根据所述覆盖率信息,对所述测试用例进行修正。
作为一种可选的实现方式,修正模块16具体用于:根据所述未覆盖代码对应的代码行,确定所述未覆盖代码所在的目标方法块;
确定所述测试用例框架中与所述目标方法块对应的目标测试用例框架;
对所述目标测试用例框架中的测试用例进行修正。
作为一种可选的实现方式,本申请测试用例生成装置还包括第二确定模块。
其中第二确定模块用于确定所述覆盖率信息未满足预设的覆盖条件。
作为另一种可选的实现方式,本申请测试用例生成装置,还包括:第三获取模块,第四生成模块,第五生成模块。
其中,第三生成模块用于在目标源代码文件更新时,获取更新后的目标源代码文件与目标源代码文件间的差异信息;
第四生成模块用于对所述差异信息进行解析处理,生成所述差异信息对应的更新测试用例框架;
第五生成模块用于利用所述更新测试用例框架,对所述目标源代码对应的各测试用例框架进行更新,以生成所述更新后的目标源代码文件对应的各测试用例框架。
需要说明的是,前述对测试用例生成方法实施例的解释说明也适用于该实施例的测试用例生成装置,其实现原理类似,此处不再赘述。
本实施例提供的测试用例生成装置,通过获取目标源代码基于测试用例测试时生成的覆盖率信息,并根据覆盖率信息,对测试用例进行修正,以提高对目标源代码的测试覆盖率。并且,当确定目标源代码有更新时,根据更新的内容,采取不同的方式对测试用例进行更新,从而实现了在目标源代码快速迭代时同步更新测试用例,不仅能够减少用户的重复工作,且不会因为代码快速迭代浪费用户时间,并且还能保持高覆盖率。
为了实现上述实施例,本申请还提出一种计算机设备。
图16为本申请一个实施例的计算机设备的结构示意图。图16显示的计算机设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图16所示,上述计算机设备200包括:存储器210、处理器220及存储在存储器210上并可在处理器220上运行的计算机程序,所述处理器220执行所述程序时,实现第一方面实施例所述的测试用例生成方法。
在一种可选的实现形式中,如图17所示,该计算机设备200还可以包括:存储器210及处理器220,连接不同组件(包括存储器210和处理器220)的总线230,存储器210存储有计算机程序,当处理器220执行所述程序时实现本申请实施例所述的测试用例生成方法。
总线230表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机设备200典型地包括多种计算机设备可读介质。这些介质可以是任何能够被计算机设备200访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
存储器210还可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)240和/或高速缓存存储器250。计算机设备200可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统260可以用于读写不可移动的、非易失性磁介质(图17未显示,通常称为“硬盘驱动器”)。尽管图17中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线230相连。存储器210可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本申请各实施例的功能。
具有一组(至少一个)程序模块270的程序/实用工具280,可以存储在例如存储器210中,这样的程序模块270包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块270通常执行本申请所描述的实施例中的功能和/或方法。
计算机设备200也可以与一个或多个外部设备290(例如键盘、指向设备、显示器291等)通信,还可与一个或者多个使得用户能与该计算机设备200交互的设备通信,和/或与使得该计算机设备200能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口292进行。并且,计算机设备200还可以通过网络适配器293与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器293通过总线230与计算机设备200的其它模块通信。应当明白,尽管图中未示出,可以结合计算机设备200使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
需要说明的是,本实施例的计算机设备的实施过程和技术原理参见前述对第一方面实施例的测试用例生成方法的解释说明,此处不再赘述。
本申请实施例提供的计算机设备,通过遍历目标源代码文件,获取目标源代码包含的各方法块,并将各方法块分别进行解析处理,确定各方法块中分别包括的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符,然后根据确定的各非逻辑运算式及连接各非逻辑运算式的逻辑运算符,生成各方法块对应的各测试用例框架,然后根据各测试用例框架,生成目标源代码对应的测试用例。由此,通过对源代码中包含的方法块进行解析,以生成与方法块对应的测试用例框架,并根据测试用例框架生成源代码对应的测试用例,从而不仅提高了测试用例的生成效率及代码覆盖率,并且还能降低人工设置测试用例所花费的成本,改善了用户体验。
为实现上述目的,本申请还提出一种计算机可读存储介质。
其中该计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时,以实现第一方面实施例所述的测试用例生成方法。
一种可选实现形式中,本实施例可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本申请操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。
应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。

Claims (11)

1.一种测试用例生成方法,其特征在于,包括:
遍历目标源代码文件,获取目标源代码中包含的各方法块;
将所述各方法块分别进行解析处理,确定所述各方法块中分别包括的各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符;
根据所述各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符,生成所述各方法块对应的各测试用例框架;
根据所述各测试用例框架,生成所述目标源代码对应的测试用例;
其中,所述目标源代码文件的第二方法块中包括的非逻辑运算式的数量小于阈值;
所述根据所述各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符,生成所述各方法块对应的各测试用例框架,包括:
根据所述第二方法块中的各非逻辑运算式分别对应的不同取值,生成所述第二方法块对应的各测试用例框架,其中,任意两个测试用例框架中至少一个非逻辑运算式的取值不同。
2.如权利要求1所述的方法,其特征在于,所述目标源代码文件的第一方法块中包括N个分支语句,其中,N为正整数;
所述将所述各方法块分别进行解析处理,确定所述各方法块中分别包括的各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符,包括:
将所述第一方法块进行解析处理,获取所述N个分支语句;
分别将所述N个分支语句进行解析处理,确定所述N个分支语句中的各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符。
3.如权利要求1所述的方法,其特征在于,所述目标源代码文件的第三方法块中包括的非逻辑运算式的数量大于阈值;
所述根据所述各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符,生成所述各方法块对应的各测试用例框架,包括:
根据所述第三方法块中各非逻辑运算式的取值及连接所述各非逻辑运算式的逻辑运算符,确定所述第三方法块的两个不同返回值分别对应的两个非逻辑运算式取值组集合;
从所述两个非逻辑运算式取值组集合中,各获取一个非逻辑运算式取值组,其中,任意一个非逻辑运算式在获取的两个非逻辑运算式取值组中的取值不同;
根据获取的两个非逻辑运算式取值组,确定所述第三方法块对应的测试用例框架。
4.如权利要求1-3任一所述的方法,其特征在于,所述根据所述各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符,生成所述各方法块对应的各测试用例框架,包括:
根据预设的规则,确定各非逻辑运算式分别对应的各变量;
利用所述连接所述各非逻辑运算式的逻辑运算符,连接所述各变量以生成所述各方法块分别对应的各抽象语句;
基于所述各抽象语句,生成所述各方法块对应的各测试用例框架。
5.如权利要求4所述的方法,其特征在于,所述生成所述目标源代码对应的测试用例之后,还包括:
获取所述目标源代码基于所述测试用例测试时生成的覆盖率信息;
根据所述覆盖率信息,对所述测试用例进行修正。
6.如权利要求5所述的方法,其特征在于,所述覆盖率信息,包括未覆盖代码对应的代码行;
所述根据所述覆盖率信息,对所述测试用例进行修正,包括:
根据所述未覆盖代码对应的代码行,确定所述未覆盖代码所在的目标方法块;
确定所述测试用例框架中与所述目标方法块对应的目标测试用例框架;
对所述目标测试用例框架中的测试用例进行修正。
7.如权利要求5所述的方法,其特征在于,所述根据所述覆盖率信息,对所述测试用例进行修正之前,还包括:
确定所述覆盖率信息未满足预设的覆盖条件。
8.如权利要求4所述的方法,其特征在于,所述生成所述目标源代码对应的测试用例之后,还包括:
在目标源代码文件更新时,获取更新后的目标源代码文件与目标源代码文件间的差异信息;
对所述差异信息进行解析处理,生成所述差异信息对应的更新测试用例框架;
利用所述更新测试用例框架,对所述目标源代码对应的各测试用例框架进行更新,以生成所述更新后的目标源代码文件对应的各测试用例框架。
9.一种测试用例生成装置,其特征在于,包括:
第一获取模块,用于遍历目标源代码文件,获取目标源代码中包含的各方法块;
第一确定模块,用于将所述各方法块分别进行解析处理,确定所述各方法块中分别包括的各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符;
第一生成模块,用于根据所述各非逻辑运算式及连接所述各非逻辑运算式的逻辑运算符,生成所述各方法块对应的各测试用例框架;
第二生成模块,用于根据所述各测试用例框架,生成所述目标源代码对应的测试用例。
10.一种计算机设备,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时,以实现如权利要求1-8任一所述的测试用例生成方法。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时,实现如权利要求1-8任一所述的测试用例生成方法。
CN201810554901.3A 2018-06-01 2018-06-01 测试用例生成方法、装置、设备及存储介质 Active CN108763094B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810554901.3A CN108763094B (zh) 2018-06-01 2018-06-01 测试用例生成方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810554901.3A CN108763094B (zh) 2018-06-01 2018-06-01 测试用例生成方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN108763094A CN108763094A (zh) 2018-11-06
CN108763094B true CN108763094B (zh) 2021-08-10

Family

ID=64001953

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810554901.3A Active CN108763094B (zh) 2018-06-01 2018-06-01 测试用例生成方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN108763094B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109491917A (zh) * 2018-11-13 2019-03-19 北京车和家信息技术有限公司 一种测试用例处理方法及其装置
CN110532185B (zh) * 2019-08-29 2023-09-19 中国工商银行股份有限公司 测试方法、装置、电子设备和计算机可读存储介质
CN110727597B (zh) * 2019-10-15 2023-03-10 杭州安恒信息技术股份有限公司 一种基于日志排查无效代码补全用例的方法
CN113010431B (zh) * 2021-03-31 2024-02-20 中国工商银行股份有限公司 Java单元测试用例生成方法及装置
CN113934643A (zh) * 2021-11-29 2022-01-14 上海航天计算机技术研究所 基于影响域路径分析的测试用例确定方法和系统
CN114880242B (zh) * 2022-06-08 2023-01-13 北京百度网讯科技有限公司 测试用例的提取方法、装置、设备和介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1908892A (zh) * 2005-08-01 2007-02-07 王彤 测试用例设计方法和系统
CN103530223A (zh) * 2012-07-06 2014-01-22 百度在线网络技术(北京)有限公司 一种自动生成单元测试用例的方法及装置
CN103559122A (zh) * 2013-10-14 2014-02-05 西安交通大学 基于程序行为切片的测试案例约减方法
CN104156313A (zh) * 2014-08-12 2014-11-19 南京大学 一种Web服务测试用例自动生成方法
CN107678973A (zh) * 2017-10-31 2018-02-09 北京润科通用技术有限公司 一种测试脚本的自动生成方法及系统
CN107844417A (zh) * 2017-10-20 2018-03-27 东软集团股份有限公司 测试用例生成方法和装置
CN107885663A (zh) * 2017-11-29 2018-04-06 中国电子产品可靠性与环境试验研究所 测试用例自动生成的方法、装置、计算机设备及存储介质
CN108073519A (zh) * 2018-01-31 2018-05-25 百度在线网络技术(北京)有限公司 测试用例生成方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9367435B2 (en) * 2013-12-12 2016-06-14 Vertafore, Inc. Integration testing method and system for web services

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1908892A (zh) * 2005-08-01 2007-02-07 王彤 测试用例设计方法和系统
CN103530223A (zh) * 2012-07-06 2014-01-22 百度在线网络技术(北京)有限公司 一种自动生成单元测试用例的方法及装置
CN103559122A (zh) * 2013-10-14 2014-02-05 西安交通大学 基于程序行为切片的测试案例约减方法
CN104156313A (zh) * 2014-08-12 2014-11-19 南京大学 一种Web服务测试用例自动生成方法
CN107844417A (zh) * 2017-10-20 2018-03-27 东软集团股份有限公司 测试用例生成方法和装置
CN107678973A (zh) * 2017-10-31 2018-02-09 北京润科通用技术有限公司 一种测试脚本的自动生成方法及系统
CN107885663A (zh) * 2017-11-29 2018-04-06 中国电子产品可靠性与环境试验研究所 测试用例自动生成的方法、装置、计算机设备及存储介质
CN108073519A (zh) * 2018-01-31 2018-05-25 百度在线网络技术(北京)有限公司 测试用例生成方法和装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Automatic test case generation for programmable logic controller using function block diagram;P Mani;《 2016 International Conference on Information Communication and Embedded Systems》;20160725;全文 *
基于EFSM的测试用例自动化生成关键技术研究;杨瑞;《中国博士学位论文全文数据库 信息科技辑》;20151115;61-84 *

Also Published As

Publication number Publication date
CN108763094A (zh) 2018-11-06

Similar Documents

Publication Publication Date Title
CN108763094B (zh) 测试用例生成方法、装置、设备及存储介质
US11151018B2 (en) Method and apparatus for testing a code file
CN108829580B (zh) 多版本测试数据处理方法、装置、设备及存储介质
CN107506300B (zh) 一种用户界面测试方法、装置、服务器和存储介质
US9176848B2 (en) Program debugger and program debugging
CN105335137A (zh) 用于处理源文件的方法和装置
CN112100072B (zh) 应用程序代码的静态检测方法、装置、设备及介质
CN111736840A (zh) 小程序应用的编译方法、运行方法、存储介质及电子设备
US10990510B2 (en) Associating attribute seeds of regression test cases with breakpoint value-based fingerprints
CN109947431B (zh) 一种代码生成方法、装置、设备及存储介质
CN110659210A (zh) 一种信息获取方法、装置、电子设备及存储介质
US11663113B2 (en) Real time fault localization using combinatorial test design techniques and test case priority selection
CN102722438A (zh) 一种内核调试的方法和设备
CN115705250A (zh) 监测堆栈使用量以优化程序
CN112988578A (zh) 一种自动化测试方法和装置
US20160239407A1 (en) Small scale integration test generation
CN113821486B (zh) pod库之间依赖关系的确定方法及其装置、电子设备
CN113377648B (zh) 软件系统诊断方法、装置、电子设备及计算机可读介质
CN115080113A (zh) 项目代码检测方法和装置、可读存储介质、电子设备
US11392371B2 (en) Identification of a partial code to be refactored within a source code
CN109783133B (zh) 代码打包方法、装置、计算机设备及存储介质
CN110795338B (zh) 一种基于前后端交互的自动化测试方法、装置及电子设备
CN113760291A (zh) 日志输出的方法和装置
CN108228239B (zh) 基于快速模拟器qemu的分支指令抓取方法和装置
CN113434386B (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