CN108388504A - 一种测试方法及装置 - Google Patents

一种测试方法及装置 Download PDF

Info

Publication number
CN108388504A
CN108388504A CN201710063627.5A CN201710063627A CN108388504A CN 108388504 A CN108388504 A CN 108388504A CN 201710063627 A CN201710063627 A CN 201710063627A CN 108388504 A CN108388504 A CN 108388504A
Authority
CN
China
Prior art keywords
test
code
tested
constraint
path
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.)
Pending
Application number
CN201710063627.5A
Other languages
English (en)
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 Didi Infinity Technology and Development Co Ltd
Original Assignee
Beijing Didi Infinity Technology and Development 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 Didi Infinity Technology and Development Co Ltd filed Critical Beijing Didi Infinity Technology and Development Co Ltd
Priority to CN201710063627.5A priority Critical patent/CN108388504A/zh
Publication of CN108388504A publication Critical patent/CN108388504A/zh
Pending legal-status Critical Current

Links

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
    • 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/3676Test management for coverage analysis
    • 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/3688Test management for test execution, e.g. scheduling of test suites

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

一种测试方法及装置
技术领域
本发明实施例涉及软件测试技术领域,尤其涉及一种测试方法及装置。
背景技术
随着计算机科学技术和互联网技术飞速发展,软件安全问题层出不穷,软件安全一直备受关注。所述软件安全问题主要为软件漏洞,软件漏洞是软件开发者开发软件时的疏忽或者是由编程语言的局限性导致的,比如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对待测试代码通过符号执行方法进行分析,获取所述待测试代码的测试路径约束集合;第一生成单元22对预先获取的待测试代码的第一类测试路径,根据所述测试路径约束集合中的每个约束为子节点的父节点的约束,生成对应的测试用例;第二获取单元23将生成的测试用例输入到所述待测试代码中,获取对应的测试结果。
由于本发明实施例的测试用例是根据各个节点对应的约束产生的,因此利用这样产生的测试用例可对待测试路径的每个节点进行充分地变异性测试,从而提高测试的代码覆盖率。
在一种具体实施方式中,所述第一生成单元22,还用于:
按照所述待测试代码中父节点执行的顺序依次生成对应的父节点的约束对应的测试用例。
在一种具体实施方式中,所述装置还包括:
第二生成单元,用于所述对待测试代码通过符号执行方法进行分析,获取所述待测试代码的测试路径约束集合之后,对待测试代码的第二类测试路径,根据所述测试路径约束集合中的全部约束,生成对应的测试用例;
第三获取单元,用于将生成的测试用例输入到所述待测试代码中,获取对应的测试结果。
在一种具体实施方式中,所述装置还包括:
发送单元,用于将所述测试结果发送给用于检测所述测试结果是否异常的监视器。
在一种具体实施方式中,所述测试路径约束集合中的约束为符号布尔表达式。
本实施例公开的测试装置可以用于执行上述方法实施例,其原理和技术效果类似,此处不再赘述。
本公开提供一种测试方法及装置,由于本发明实施例的测试用例是根据各个节点对应的约束产生的,因此利用这样产生的测试用例可对待测试路径的每个节点进行充分地变异性测试,从而提高测试的代码覆盖率。
应当注意的是,在本公开的装置的各个部件中,根据其要实现的功能而对其中的部件进行了逻辑划分,但是,本公开不受限于此,可以根据需要对各个部件进行重新划分或者组合,例如,可以将一些部件组合为单个部件,或者可以将一些部件进一步分解为更多的子部件。
本公开的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本公开实施例的装置中的一些或者全部部件的一些或者全部功能。本公开还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本公开的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本公开进行说明而不是对本公开进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。单词“包括”不排除存在未列在权利要求中的元件或步骤。本公开可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。
以上实施方式仅适于说明本公开,而并非对本公开的限制,有关技术领域的普通技术人员,在不脱离本公开的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本公开的范畴,本公开的专利保护范围应由权利要求限定。

Claims (10)

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

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710063627.5A CN108388504A (zh) 2017-02-03 2017-02-03 一种测试方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710063627.5A CN108388504A (zh) 2017-02-03 2017-02-03 一种测试方法及装置

Publications (1)

Publication Number Publication Date
CN108388504A true CN108388504A (zh) 2018-08-10

Family

ID=63075917

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710063627.5A Pending CN108388504A (zh) 2017-02-03 2017-02-03 一种测试方法及装置

Country Status (1)

Country Link
CN (1) CN108388504A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10915683B2 (en) 2018-03-08 2021-02-09 Synopsys, Inc. Methodology to create constraints and leverage formal coverage analyzer to achieve faster code coverage closure for an electronic structure

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104834595A (zh) * 2015-02-15 2015-08-12 网易(杭州)网络有限公司 一种可视化自动测试方法及系统
JP2015204065A (ja) * 2014-04-16 2015-11-16 株式会社日立製作所 テストケース生成装置及びテストケース生成方法
CN105095060A (zh) * 2014-04-15 2015-11-25 富士通株式会社 利用规则集网络生成测试用例的装置和方法
CN105930268A (zh) * 2016-04-19 2016-09-07 努比亚技术有限公司 一种基于树型的黑盒测试用例生成方法及其系统
CN106598870A (zh) * 2016-12-26 2017-04-26 中国建设银行股份有限公司 一种跨组件交易一致性测试方法及系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105095060A (zh) * 2014-04-15 2015-11-25 富士通株式会社 利用规则集网络生成测试用例的装置和方法
JP2015204065A (ja) * 2014-04-16 2015-11-16 株式会社日立製作所 テストケース生成装置及びテストケース生成方法
CN104834595A (zh) * 2015-02-15 2015-08-12 网易(杭州)网络有限公司 一种可视化自动测试方法及系统
CN105930268A (zh) * 2016-04-19 2016-09-07 努比亚技术有限公司 一种基于树型的黑盒测试用例生成方法及其系统
CN106598870A (zh) * 2016-12-26 2017-04-26 中国建设银行股份有限公司 一种跨组件交易一致性测试方法及系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
武晋南等: "基于用户会话的web测试集简化方法", 《计算机工程与设计》 *
郑人杰: "《计算机软件测试技术》", 31 December 1992, 清华大学出版社 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10915683B2 (en) 2018-03-08 2021-02-09 Synopsys, Inc. Methodology to create constraints and leverage formal coverage analyzer to achieve faster code coverage closure for an electronic structure

Similar Documents

Publication Publication Date Title
Manès et al. The art, science, and engineering of fuzzing: A survey
Pauck et al. Do android taint analysis tools keep their promises?
Danglot et al. A snowballing literature study on test amplification
Chen et al. Deep differential testing of JVM implementations
Ma et al. Grt: Program-analysis-guided random testing (t)
EP4062288A1 (en) Software diagnosis using transparent decompilation
US11983094B2 (en) Software diagnostic context selection and use
Dallmeier et al. Automatically generating test cases for specification mining
Zuo et al. Smartgen: Exposing server urls of mobile apps with selective symbolic execution
Beaman et al. Fuzzing vulnerability discovery techniques: Survey, challenges and future directions
US11888885B1 (en) Automated security analysis of software libraries
Bozic et al. Security testing based on attack patterns
Tychalas et al. {ICSFuzz}: Manipulating {I/Os} and repurposing binary code to enable instrumented fuzzing in {ICS} control applications
de Poel et al. Automated security review of PHP web applications with static code analysis
Person et al. Test analysis: Searching for faults in tests (n)
Jimenez et al. Software vulnerabilities, prevention and detection methods: A review1
Elkhail et al. On relating code smells to security vulnerabilities
Iannone et al. Toward automated exploit generation for known vulnerabilities in open-source libraries
Luo et al. Tchecker: Precise static inter-procedural analysis for detecting taint-style vulnerabilities in php applications
CN106021113A (zh) 一种精准测试的实现方法
Ferrara et al. : Backward Context-Sensitive Flow Reconstruction of Taint Analysis Results
CN108388504A (zh) 一种测试方法及装置
Marcote et al. Automatic repair of infinite loops
US8365281B2 (en) Determining whether method of computer program is a validator
US11822673B2 (en) Guided micro-fuzzing through hybrid program analysis

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
RJ01 Rejection of invention patent application after publication

Application publication date: 20180810

RJ01 Rejection of invention patent application after publication