一种测试方法及装置制造方法及图纸

技术编号:18657909 阅读:30 留言:0更新日期:2018-08-11 14:23
本发明专利技术实施例提供了一种测试方法及装置,本发明专利技术实施例涉及软件测试技术领域,方法包括:对待测试代码通过符号执行方法进行分析,获取所述待测试代码的测试路径约束集合;对待测试代码的第一类测试路径,根据所述测试路径约束集合中的每个约束以及以所述每个约束为子节点的父节点的约束,生成对应的测试用例;将生成的测试用例输入到所述待测试代码中,获取对应的测试结果。由于本发明专利技术实施例的测试用例是根据各个节点对应的约束产生的,因此利用这样产生的测试用例可对待测试路径的每个节点进行充分地变异性测试,从而提高测试的代码覆盖率。

A test method and device

The embodiment of the invention provides a test method and a device, and the embodiment of the invention relates to the technical field of software testing. The method includes: analyzing the test code by means of symbol execution method, obtaining the test path constraint set of the test code to be tested, and treating the first test path of the test code according to the test. Each constraint in the set of trial path constraints and the constraint of the parent node with each constraint as a child node generate corresponding test cases; input the generated test cases into the code to be tested, and obtain the corresponding test results. Because the test cases of the embodiment of the present invention are generated according to the corresponding constraints of each node, the test cases generated by this method can be used to fully test the variability of each node of the test path, thereby improving the code coverage of the test.

【技术实现步骤摘要】
一种测试方法及装置
本专利技术实施例涉及软件测试
,尤其涉及一种测试方法及装置。
技术介绍
随着计算机科学技术和互联网技术飞速发展,软件安全问题层出不穷,软件安全一直备受关注。所述软件安全问题主要为软件漏洞,软件漏洞是软件开发者开发软件时的疏忽或者是由编程语言的局限性导致的,比如c语言家族比java效率高但漏洞也多,电脑系统几乎就是用c语言编的,所以常常要打补丁。软件漏洞有时是作者日后检查的时候发现的,然后修正;还有一些人专门找别人的漏洞以从中做些非法的事。在软件安全性测试领域,模糊测试(Fuzzing)是挖掘各种应用程序漏洞的有效方法,然而传统模糊测试方法主要是随机产生测试用例,为了达到一定测试覆盖率(代码覆盖率)需要花费时间去生成大量的测试用例,由于模糊测试是随机产生测试用例,随机产生的测试用例存在盲目性,多数无法进入软件的深处。目前已经有一些技术可以产生待测试软件的全部测试路径约束,但是往往是直接采用全部测试路径约束产生测试用例,再用这样产生的测试用例对待测试软件进行测试,这样无法保证对待测试软件的每条测试路径的每个节点进行最大程度的变异性测试,即无法保证代码覆盖率。可见,普通的模糊测试的代码覆盖率低。
技术实现思路
本专利技术实施例提供一种克服上述问题或者至少部分地解决上述问题的一种测试方法及装置。第一方面,本专利技术实施例提供一种测试方法,包括:对待测试代码通过符号执行方法进行分析,获取所述待测试代码的测试路径约束集合;对待测试代码的第一类测试路径,根据所述测试路径约束集合中的每个约束以及以所述每个约束为子节点的父节点的约束,生成对应的测试用例;将生成的测试用例输入到所述待测试代码中,获取对应的测试结果。第二方面,本专利技术还提供一种测试装置,包括:第一获取单元,用于对待测试代码通过符号执行方法进行分析,获取所述待测试代码的测试路径约束集合;第一生成单元,用于对待测试代码的第一类测试路径,根据所述测试路径约束集合中的每个约束以及以所述每个约束为子节点的父节点的约束,生成对应的测试用例;第二获取单元,用于将生成的测试用例输入到所述待测试代码中,获取对应的测试结果。由上述技术方案可知,由于本专利技术实施例的测试用例是根据各个节点对应的约束产生的,因此利用这样产生的测试用例可对待测试路径的每个节点进行充分地变异性测试,从而提高测试的代码覆盖率。附图说明为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些图获得其他的附图。图1为本公开一实施例提供的一种测试方法的流程示意图;图2是本公开一实施例提供的一种测试装置的结构示意图。具体实施方式下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。图1为本公开一实施例提供的一种测试方法的流程示意图。如图1所示,本实施例的一种测试方法,包括:S11、对待测试代码通过符号执行方法进行分析,获取所述待测试代码的测试路径约束集合;下面举例说明采用符号执行方法执行该步骤的具体过程:待测试代码X,共有三个变量;执行符号执行方法时,首先定义三个节点a、b、c,在待测试代码中,三个节点先后执行顺序为a、b、c,对待测试代码执行符号执行方法,得到:第一测试路径约束:a>0,b>0,c>0,第二测试路径约束:a>0,b>0,c<0,第三测试路径约束:a>0,b<0,c<0,三条测试路径约束形成所述测试路径约束集合。所述测试路径约束集合中的约束为符号布尔表达式。S12、对待测试代码的第一类测试路径,根据所述测试路径约束集合中的每个约束以及以所述每个约束为子节点的父节点的约束,生成对应的测试用例;作为一种具体实施,步骤S12,包括:按照所述待测试代码中父节点执行的顺序依次生成对应的父节点的约束对应的测试用例。具体地,本步骤为将所述测试路径约束集合中的每个节点作为子节点,在其前面被执行的节点为该子节点的父节点,如上述包含a、b、c三个节点的实施例,a没有父节点,因此,先执行a对应的节点,再执行b对应的节点,最后执行c对应的节点,即a为b的父节点,a、b均为c的父节点,如对于上述第一类测试路径约束,先执行a>0,生成对应的测试用例,该种情况可以对a变量对应节点进行变异性测试,再执行a>0、b>0,生成对应的测试用例,该种情况可以对b变量对应节点进行变异性测试,最后执行a>0、b>0,c>0,生成对应的测试用例,该种情况可以对c变量对应节点进行变异性测试,从而实现对测试路径中每个节点都进行变异性测试。对于第二测试路径约束和第三测试路径约束方法类似,不再详述。值得说明的是,约束越多,变异的空间就越小,从而生成的测试用例就越少。S13、将生成的测试用例输入到所述待测试代码中,获取对应的测试结果。值得说明的是,若测试结果为输出数据,则确定测试路径没有漏洞,若测试结果为没有输出数据,说明该条测试路径崩溃,出现了漏洞。由于本专利技术实施例的测试用例是根据各个节点对应的约束产生的,因此利用这样产生的测试用例可对待测试路径的每个节点进行充分地变异性测试,从而提高测试的代码覆盖率。上述方式虽然可以覆盖测试路径的所有节点,但其存在耗时久,测试速度慢的问题,因此,在一种具体实施方式中,所述步骤S11之后,所述方法还包括:对待测试代码的第二类测试路径,根据所述测试路径约束集合中的全部约束,生成对应的测试用例;将生成的测试用例输入到所述待测试代码中,获取对应的测试结果。例如,若上述具有a、b、c三个节点的具体例子中的第二类测试路径,若其对应的是第三约束路径约束,则直接根据第三约束路径约束a>0,b<0,c<0生成对应的测试用例,该种测试方式计算量小,耗时短,测试速度快。值得说明的是,本专利技术实施例中可通过污点追踪方法将待测试代码中的路径分类,形成第一类测试路径和第二类测试路径,污点追踪方法属于现有方法,本专利技术实施例在此不再详述。一般将比较重要的路径作为第一类测试路径,将不太重要的测试路径作为第二类测试路径。在一种具体实施方式中,所述方法还包括:将所述测试结果发送给用于检测所述测试结果是否异常的监视器。可以理解的是,可通过监视器检测所述测试结果是否异常,从而在所述测试结果异常时,发现出现漏洞的测试路径的节点,并对应采取补救措施,消除漏洞。图2是本公开一实施例提供的一种测试装置的结构示意图。如图2所示,一种测试装置,包括:第一获取单元21、第一生成单元22和第二获取单元23;其中,第一获取单元21用于对待测试代码通过符号执行方法进行分析,获取所述待测试代码的测试路径约束集合;第一生成单元22用于对待测试代码的第一类测试路径,根据所述测试路径约束集合中的每个约束以及以所述每个约束为子节点的父节点的约束,生成对应的测试用例;第二获取单元23用于将生成的测试用例输入到所述待测试代码中,获取对应的测试结果。本实施例第一获取单元21对待测试代码通过符号本文档来自技高网...

【技术保护点】
1.一种测试方法,其特征在于,包括:对待测试代码通过符号执行方法进行分析,获取所述待测试代码的测试路径约束集合;对待测试代码的第一类测试路径,根据所述测试路径约束集合中的每个约束以及以所述每个约束为子节点的父节点的约束,生成对应的测试用例;将生成的测试用例输入到所述待测试代码中,获取对应的测试结果。

【技术特征摘要】
1.一种测试方法,其特征在于,包括:对待测试代码通过符号执行方法进行分析,获取所述待测试代码的测试路径约束集合;对待测试代码的第一类测试路径,根据所述测试路径约束集合中的每个约束以及以所述每个约束为子节点的父节点的约束,生成对应的测试用例;将生成的测试用例输入到所述待测试代码中,获取对应的测试结果。2.根据权利要求1所述的方法,其特征在于,所述根据所述测试路径约束集合中的每个约束以及以所述每个约束为子节点的父节点的约束,生成对应的测试用例,包括:按照所述待测试代码中父节点执行的顺序依次生成对应的父节点的约束对应的测试用例。3.根据权利要求1所述的方法,其特征在于,所述对待测试代码通过符号执行方法进行分析,获取所述待测试代码的测试路径约束集合之后,所述方法还包括:对待测试代码的第二类测试路径,根据所述测试路径约束集合中的全部约束,生成对应的测试用例;将生成的测试用例输入到所述待测试代码中,获取对应的测试结果。4.根据权利要求1或3所述的方法,其特征在于,所述方法还包括:将所述测试结果发送给用于检测所述测试结果是否异常的监视器。5.根据权利要求1-3中任一项所述的方法,其特征在于,所述测试路径约束集合中的约束为符号布尔表达式。6.一种测试...

【专利技术属性】
技术研发人员:原玉娇
申请(专利权)人:北京嘀嘀无限科技发展有限公司
类型:发明
国别省市:北京,11

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

1