代码测试方法和装置制造方法及图纸

技术编号:20448565 阅读:21 留言:0更新日期:2019-02-27 02:49
本申请实施例公开了代码测试方法和装置。该方法的一具体实施方式包括:通过确定所有标记对象中的目标标记对象;基于确定出的目标标记对象和原始版本的代码的测试用例,确定出更新版本的代码的测试用例;利用更新版本的代码的测试用例对更新版本的代码进行测试。实现了仅需预先确定原始版本的测试用例可以测试的标记对象,在后续对任意版本的更新版本的代码测试中,自动分析出代码发生变化需要再次测试的标记对象,从原始版本的测试用例中确定出相应的测试用例作为更新版本的代码的测试用例,降低了测试过程的开销。可以精确地确定代码发生变化需要再次测试的任意层级的代码分支,选取出相应的测试用例进行精确地测试。

Code testing methods and devices

The embodiment of this application discloses a code testing method and device. One specific implementation of the method includes: determining the target tag objects in all tag objects; determining the test cases of the updated version of the code based on the identified target tag objects and the original version of the code; and testing the updated version of the code using the test cases of the updated version of the code. In the subsequent code testing of any version of the updated version, the tag objects that need to be tested again when the code changes are automatically analyzed. The corresponding test cases are determined from the original version of the test cases as the test cases of the updated version of the code, which reduces the opening of the testing process. Pin. It can accurately determine any level of code branches that need to be tested again when the code changes, and select the corresponding test cases to test accurately.

【技术实现步骤摘要】
代码测试方法和装置
本申请涉及计算机领域,具体涉及测试领域,尤其涉及代码测试方法和装置。
技术介绍
在代码上线之前需要利用测试用例进行对代码进行测试。目前,通常通过利用测试用例对代码测试之后输出的函数的相关信息,以人工方式分析各个测试用例可以测试到的函数,根据分析结果调整测试用例。然而,代码随着业务的扩展需要不断更新,每进行一次更新得到一个新的版本的代码,均需重新进行测试,测试过程的开销巨大。
技术实现思路
本申请实施例提供了代码测试方法和装置。第一方面,本申请实施例提供了代码测试方法,该方法包括:确定所有标记对象中的目标标记对象,其中,标记对象的标识信息基于标记对象的至少部分代码生成,在更新版本的代码中的目标标记对象的标识信息与在原始版本的代码中的目标标记对象的标识信息不同;基于确定出的目标标记对象和原始版本的代码的测试用例,确定出更新版本的代码的测试用例;利用更新版本的代码的测试用例对更新版本的代码进行测试。第二方面,本申请实施例提供了代码测试装置,该装置包括:对象确定单元,被配置为确定所有标记对象中的目标标记对象,其中,标记对象的标识信息基于标记对象的至少部分代码生成,在更新版本的代码中的目标标记对象的标识信息与在原始版本的代码中的目标标记对象的标识信息不同;用例确定单元,被配置为基于确定出的目标标记对象和原始版本的代码的测试用例,确定出更新版本的代码的测试用例;代码测试单元,被配置为利用更新版本的代码的测试用例对更新版本的代码进行测试。本申请实施例提供的代码测试方法和装置,通过确定所有标记对象中的目标标记对象,其中,标记对象的标识信息基于标记对象的至少部分代码生成,在更新版本的代码中的目标标记对象的标识信息与在原始版本的代码中的目标标记对象的标识信息不同;基于确定出的目标标记对象和原始版本的代码的测试用例,确定出更新版本的代码的测试用例;利用更新版本的代码的测试用例对更新版本的代码进行测试。实现了仅需预先确定原始版本的测试用例可以测试的标记对象,在后续对任意版本的更新版本的代码测试中,自动分析出代码发生变化需要再次测试的标记对象,从原始版本的测试用例中确定出相应的测试用例作为更新版本的代码的测试用例,降低了测试过程的开销。可以精确地确定代码发生变化需要再次测试的任意层级的代码分支,选取出相应的测试用例进行精确地测试。附图说明通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:图1示出了根据本申请的代码测试方法的一个实施例的流程图;图2示出了标识信息在两个版本的代码中的对比效果示意图;图3示出了根据本申请的代码测试装置的一个实施例的结构示意图;图4是适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。具体实施方式下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关专利技术,而非对该专利技术的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关专利技术相关的部分。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。请参考图1,其示出了根据本申请的代码测试方法的一个实施例的流程。该方法包括以下步骤:步骤101,确定所有标记对象中的目标标记对象。在本实施例中,原始版本、更新版本均并不特指某一个版本。在一个版本的代码中的部分代码进行修改之后,该版本可以作为原始版本,该版本的代码可以作为原始版本的代码,修改后得到的代码可以作为更新版本的代码。例如,一个项目的代码从第1版本开始已经更新到第5版本,第5版本的代码是在对第4版本的部分代码进行修改后得到的,当对第5版本的代码进行测试时,第4版本可以作为原始版本,第5版本可以作为更新版本。在本实施例中,一个版本的代码中包含多个标记对象。标记对象的标识信息基于标记对象的至少部分代码生成。在对一个更新版本的代码进行测试时,可以首先确定所有标记对象中的目标标记对象,在更新版本的代码中的目标标记对象的标识信息与在原始版本的代码中的目标标记对象的标识信息不同。例如,一个标记对象为一个函数,可以将该函数的所有参数进行组合后作为该函数的标识信息,原始版本的代码和更新版本的代码中均预先加入了该函数的标识信息。当在原始版本的代码中的该函数的标识信息与在更新版本的代码中的该函数标识信息不同时,则该函数可以作为目标标记对象。在本实施例中,可以预先记录原始版本的代码中的每一个标记对象的标识信息。当对更新版本的代码进行测试时,可以遍历更新版本的代码,例如,通过语法树遍历更新版本的代码,得到更新版本的代码中每一个标记对象的标识信息。以所有标识对象均为函数为例,可以预先记录原始版本的代码中的每一个函数的标识信息,在遍历更新版本的代码之后,可以得到更新版本的代码中的每一个函数的标识信息。原始版本的代码中的所有函数的标识信息可以构成原始标识信息集合。更新版本的代码中的所有函数的标识信息可以构成更新标识信息集合。当更新标识信息集合中的一个标识信息未出现在原始标识信息集合中时,则可以确定在原始版本的代码中的该标识信息所属的函数的标识信息与在更新版本的代码中的该标识信息所属的函数的标识信息不同,该函数可以作为目标标记对象。在本实施例的一些可选的实现方式中,标记对象包括:函数、函数中的代码分支。代码分支可以包括但不限于:判断类型的代码分支、循环类型的代码分支。例如判断类型的ifelse语句作为一个代码分支,ifelse语句中的代码为代码分支的代码。for循环语句可以作为一个代码分支,for循环语句中的代码为代码分支的代码。一个函数中可以包含多个代码分支,函数在一次调用过程中从被调用的起始时刻到本次函数调用结束,函数中的至少一个代码分支会被调用。代码分支之间也可以具有从属关系。换言之,一个代码分支中可以包含多个其他的代码分支。例如,一个ifelse语句作为一个代码分支,该代码分支中还包括一个作为代码分支的其他的ifelse语句和一个作为代码分支for循环语句。对于一个作为标记对象的代码分支,当对原始版本的代码中的该代码分支的代码进行更改时,在原始版本的代码中的该代码分支的代码与更新版本的代码中的该代码分支的代码不同,相应的,在原始版本的代码中的该代码分支的标识信息与在更新版本的代码中的该代码分支标识信息不同,从而可以确定该代码分支为目标标记对象。请参考图2,其示出了标识信息在两个版本的代码中的对比效果示意图。名称为func2的函数的首个语句为日志语句即Log语句,Log语句中的引号中的内容为该名称为func2的函数的标识信息a43ef43c493edb3f。名称为func2的函数包括两个for循环语句。每一个for循环语句均为一个代码分支,每一个for循环语句均为作为一个标记对象。由上至下,第2个for循环语句位于第1个for循环语句中。第2个for循环语句中的首个语句为Log语句,该Log语句中的引号中的内容为该名称为func2的函数的标识信息+第2个for循环语句的标识信息,第2个for循环语句的标识信息基于第2个for循环语句中的代码生成。第2个for循环语句的代码中包含System.out.println语句。原始版本的本文档来自技高网...

【技术保护点】
1.一种代码测试方法,包括:确定所有标记对象中的目标标记对象,其中,标记对象的标识信息基于标记对象的至少部分代码生成,在更新版本的代码中的目标标记对象的标识信息与在原始版本的代码中的目标标记对象的标识信息不同;基于确定出的目标标记对象和原始版本的代码的测试用例,确定出更新版本的代码的测试用例;利用更新版本的代码的测试用例对更新版本的代码进行测试。

【技术特征摘要】
1.一种代码测试方法,包括:确定所有标记对象中的目标标记对象,其中,标记对象的标识信息基于标记对象的至少部分代码生成,在更新版本的代码中的目标标记对象的标识信息与在原始版本的代码中的目标标记对象的标识信息不同;基于确定出的目标标记对象和原始版本的代码的测试用例,确定出更新版本的代码的测试用例;利用更新版本的代码的测试用例对更新版本的代码进行测试。2.根据权利要求1所述的方法,标记对象包括:函数、函数中的代码分支。3.根据权利要求2所述的方法,所述方法还包括:基于函数的属性信息,生成函数的标识信息,函数的属性信息包括以下一项或多项:函数的返回值类型、函数的函数名、函数的参数。4.根据权利要求3所述的方法,所述方法还包括:基于代码分支的属性信息,生成代码分支的标识信息,代码分支的属性信息包括以下一项或多项:代码分支的分支类型、代码分支的参数、代码分支中的语句。5.根据权利要求1-4之一所述的方法,所述方法还包括:在原始版本的代码中的标记对象的代码的首个语句之前加入日志语句,所述日志语句包括:标记对象的标识信息;利用多个测试用例对原始版本的代码进行测试;对于每一个测试用例,基于测试用例对原始版本的代码进行测试之后被输出到日志的标识信息,确定利用测试用例对原始版本的代码进行测试之后被调用的标记对象。6.根据权利要求5所述的方法,基于确定出的目标标记对象和原始版本的代码的测试用例,确定出更新版本的代码的测试用例包括:基于原始版本的测试用例对应的跳转路径信息集合包括的目标标记对象的跳转路径信息的数量,从所有原始版本的测试用例中选取出至少部分测试用例作为更新版本的代码的测试用例,其中,原始版本的测试用例对应的跳转路径信息集合包括:利用原始版本的测试用例对原始版本的代码测试之后被调用的标记对象的跳转路径信息,标记对象的跳转路径信息指示当标记对象被调用时在所述标记对象所属的函数被调用的时刻到所述标记对象被调用的时刻之间所有被调用的标记对象和调用次序。7.一种代码测试装置,包括:对象确定单元,被配置为确定所有标记对象中的目标标记对象,其中,标记对象的标识信息基于标记对象的至少部分代码生成,在更新版本的代码中的目标标记对象的标识信息与在原始版本的代码中的目标标记...

【专利技术属性】
技术研发人员:陈夏辉吴泽武袁辉
申请(专利权)人:百度在线网络技术北京有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1