测试用例的生成方法及装置制造方法及图纸

技术编号:37304490 阅读:23 留言:0更新日期:2023-04-21 22:49
本说明书实施例提供一种测试用例的生成方法及装置,在测试用例的生成方法中,在针对被测试的业务代码编写测试用例的过程中,对于针对业务代码中的第一赋值对象创建的第一实例,获取第一实例在测试用例中的当前上下文信息。基于当前上下文信息查询对象信息集。其中,该对象信息集中存储有业务代码中对应取值包括空值的各赋值对象各自的上下文信息。根据查询结果,判断第一实例的取值是否包括空值。至少根据判断结果和第一实例,生成用于测试业务代码的测试用例。代码的测试用例。代码的测试用例。

【技术实现步骤摘要】
测试用例的生成方法及装置


[0001]本说明书一个或多个实施例涉及测试
,尤其涉及一种测试用例的生成方法及装置。

技术介绍

[0002]为了确保业务代码的正确性和可靠性,需要编写测试用例对其测试。
[0003]在业务代码中,通常包含大量空值(Nu l l)判断逻辑,如果要针对该类逻辑进行测试,需要将该类逻辑涉及的判断对象赋为空值。
[0004]传统技术中,为了能够对空值判断逻辑进行测试,在编写测试用例时,针对每个创建的对象均以一定概率赋为空值,之后通过不断迭代来决定是否保留该空值。然而,该种随机赋空值的方法,会存在将对应取值不包括空值的对象赋为空值,由此会增加一些无效的测试,进而降低了测试效率。

技术实现思路

[0005]本说明书一个或多个实施例描述了一种测试用例的生成方法及装置,可以大大提升测试用例的准确性。
[0006]第一方面,提供了一种测试用例的生成方法,包括:
[0007]在针对被测试的业务代码编写测试用例的过程中,对于针对所述业务代码中的第一赋值对象创建的第一实例,获取所述第一实例在所述测试用例中的当前上下文信息;
[0008]基于所述当前上下文信息查询对象信息集;其中,所述对象信息集中存储有所述业务代码中对应取值包括空值的各赋值对象各自的上下文信息;
[0009]根据查询结果,判断所述第一实例的取值是否包括空值;
[0010]至少根据判断结果和所述第一实例,生成用于测试所述业务代码的测试用例。
[0011]第二方面,提供了一种测试用例的生成装置,包括:
[0012]获取单元,用于在针对被测试的业务代码编写测试用例的过程中,对于针对所述业务代码中的第一赋值对象创建的第一实例,获取所述第一实例在所述测试用例中的当前上下文信息;
[0013]查询单元,用于基于所述当前上下文信息查询对象信息集;其中,所述对象信息集中存储有所述业务代码中对应取值包括空值的各赋值对象各自的上下文信息;
[0014]判断单元,用于根据查询结果,判断所述第一实例的取值是否包括空值;
[0015]生成单元,用于至少根据判断结果和所述第一实例,生成用于测试所述业务代码的测试用例。
[0016]第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面的方法。
[0017]第四方面,提供了一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,该处理器执行所述可执行代码时,实现第一方面的方法。
[0018]本说明书一个或多个实施例提供的测试用例的生成方法及装置,在编写测试用例的过程中,对于新创建的实例,可以将该实例的上下文信息与预先存储的可赋为空值的赋值对象的上下文信息进行匹配,并且根据匹配结果,来判断是否可以将该实例赋为空值,进而根据判断结果来编写测试用例,由此可以大大提升测试用例的准确性。
附图说明
[0019]为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
[0020]图1示出在一个例子中的状态机示意图;
[0021]图2示出根据一个实施例的赋值对象识别方法流程图;
[0022]图3示出利用图1示出的状态机识别赋值对象的方法示意图;
[0023]图4示出根据一个实施例的测试用例的生成方法流程图;
[0024]图5示出在一个例子中测试用例的生成方法示意图;
[0025]图6示出根据一个实施例的测试用例生成装置示意图。
具体实施方式
[0026]下面结合附图,对本说明书提供的方案进行描述。
[0027]如前所述,传统方法中,通常采用随机赋值的方法,对测试用例中新创建的对象进行赋值,这会影响测试效率。
[0028]本申请的专利技术人经研究发现,对应于空值判断逻辑的字节码指令序列中,各条指令的转移具有规律性,从而可以基于该规律性,来从业务代码中识别出为可赋为空值的各赋值对象,并存储识别出的各赋值对象。之后,在编写测试用例的过程中,对于新创建的实例,可以通过将该实例与存储的各赋值对象进行匹配,来判断是否可以将该实例赋为空值,进而生成业务代码对应的测试用例。
[0029]以下对上文提及的各条指令的转移规律性进行说明。
[0030]首先,假设存在如下的被测类:
[0031][0032]在上述被测类中,ObjectA和ObjectB为两个类,objectA为类ObjectA的对象,该对象还是类Nu l l Test的成员变量。objectB为类ObjectB的对象,该对象还是函数testNu l l()的输入参数(简称函数入参或参数变量)。
[0033]针对如上的被测类,可能存在如下五种类型的用于实现空值判断逻辑的语句代码:
[0034]第一种:
[0035]if(objectB==nu l l){}
[0036]其中,该语句代码用于判断参数变量是否为空。
[0037]对应于该语句代码的字节码指令序列如下:Var l asn

>Jump l nsn。其中,Var l nsn指令为变量调用指令,Jump l nsn指令为跳转指令。
[0038]此外,在对该语句代码识别后,得到的赋值对象为函数入参或参数变量。
[0039]第二种:
[0040]if(objectB.getbIdent ity()==nu l l){}
[0041]其中,getbIdent ity()为参数变量objectB调用的函数。该语句代码用于判断函数返回值是否为空。
[0042]对应于该语句代码的字节码指令序列如下:Var l asn

>Method l nsn

>Jump l nsn,其中,Var l nsn指令和Jump l nsn指令的定义参见上文所述,Method l nsn指令为函数调用指令。
[0043]此外,在对该语句代码识别后,得到的赋值对象为函数返回值。
[0044]第三种:
[0045]if(objectA==nu l l){}
[0046]其中,该语句代码用于判断成员变量是否为空。
[0047]对应于该语句代码的字节码指令序列如下:Var l nsn

>Fie ld l nsn

>Jump l nsn。其中,Var l nsn指令和Jump l nsn指令的定义参见上文所述,Fie ld l nsn指令为成员变量调用指令。
[0048]此外,在对该语句代码识别后,得到的赋值对象为成员变量。...

【技术保护点】

【技术特征摘要】
1.一种测试用例的生成方法,包括:在针对被测试的业务代码编写测试用例的过程中,对于针对所述业务代码中的第一赋值对象创建的第一实例,获取所述第一实例在所述测试用例中的当前上下文信息;基于所述当前上下文信息查询对象信息集;其中,所述对象信息集中存储有所述业务代码中对应取值包括空值的各赋值对象各自的上下文信息;根据查询结果,判断所述第一实例的取值是否包括空值;至少根据判断结果和所述第一实例,生成用于测试所述业务代码的测试用例。2.根据权利要求1所述的方法,其中,所述对象信息集通过以下步骤获得:获取所述业务代码;利用状态机,对所述业务代码对应的字节码指令序列集进行分析,识别出所述各赋值对象;获取所述各赋值对象各自的上下文信息,并基于所述各赋值对象各自的上下文信息形成所述对象信息集。3.根据权利要求2所述的方法,其中,所述利用状态机,对所述业务代码对应的字节码指令序列集进行分析,包括:对于任意的第一指令序列,对其中的各条指令进行倒序排列;根据倒序排列的各条指令,对所述状态机的状态从第一预定状态开始向前回溯;其中包括,将当前指令与当前状态进行匹配,若匹配,则向前回溯到前一状态,并将当前指令更新为下一指令,直至达到回溯结束条件;根据回溯过程中所得到的各个状态中的至少部分状态,确定对应的赋值对象。4.根据权利要求3所述的方法,其中,所述回溯结束条件包括,当前状态为第二预定状态。5.根据权利要求4所述的方法,其中,所述字节码指令序列集中的各条指令包括以下中的至少一项:变量调用指令、成员变量调用指令、函数调用指令和跳转指令;所述第一预定状态为所述跳转指令对应的状态;所述第二预定状态包括以下中的任一项:变量调用指令对应的状态、成员变量调用指令对应的状态和函数调用指令对应的状态。6.根据权利要求2所述的方法,其中,所述状态机至少包括跳转指令对应的状态;所述对所述字节码指令序列集中的各条指令序列进行分析,包括:从所述字节码指令序列集中筛选出包含跳转指令的各候选指令序列,得到候选指令序列集;对所述候选指令序列集进行分析。7.根据权利要求1所述的方法,其中,所述判断所述第一实例的取值是否包括空值,包括:若所述查询结果指示,所述对象信息集中存在与所述当前上下文信息相匹配的目标上下文信息,则判断所述第一实例的取值包括空值;若所述查询结果指示,所述对象信息集中不存在与所述当前上下文信息相匹配的目标上下文信息,则判断所述第一实例的取值不包括空值。8.根据权利要求1所述的方法,其中,所述生成用于测试所述业务代码的测试用例,包括:
若所述判断结果指示,所述第一实例的取值包括空值,则按照预定概率将所述第一实例的取值赋为空值;至少基于赋值后的所述第一实例,生成用于测试所述业务代码的测试用例;若所述判断结果指示,所述第一实例的取值不包括空值,则将所述第一实例的取值赋为预定值;至少基于赋值后的所述第一实例,生成用于测试所述业务代码的测试用例。9.根据权利要求1所述的方法,其中,所述第一赋值对象包括以下中的任一项:成员变量、函数入参以及函数返回值。10.根据权利要求1所述的方法,其中,所述各赋值对象各自的上下文信息包括以下中的至少一项:对象类型、对象所属函数、对象调用函数、对象所属类和成员变量指示。11.根据权利要求1所述的方法,其中,所述业务代码为对应于目标类的目标函数的代码,所述测试用例用于对所述目标函数进行单元测试。12.一种测试用例的生成装置,包括:获取单元,用于在针对被测试的业务代码编写测试用例的过程中,对于针对所述业务代码中的第一赋值对象创建的第一实例,获取所述第一实例在所述测试用例中的当前上下文信息;查询单元,...

【专利技术属性】
技术研发人员:张剑飞周海莲赵红兵
申请(专利权)人:支付宝杭州信息技术有限公司
类型:发明
国别省市:

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

1