CN109992507B - 基于模拟执行的程序模糊测试方法及装置 - Google Patents

基于模拟执行的程序模糊测试方法及装置 Download PDF

Info

Publication number
CN109992507B
CN109992507B CN201910220776.7A CN201910220776A CN109992507B CN 109992507 B CN109992507 B CN 109992507B CN 201910220776 A CN201910220776 A CN 201910220776A CN 109992507 B CN109992507 B CN 109992507B
Authority
CN
China
Prior art keywords
test
program
test case
result
state information
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
CN201910220776.7A
Other languages
English (en)
Other versions
CN109992507A (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.)
Institute of Information Engineering of CAS
Beijing Information Science and Technology University
Original Assignee
Institute of Information Engineering of CAS
Beijing Information Science and Technology University
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 Institute of Information Engineering of CAS, Beijing Information Science and Technology University filed Critical Institute of Information Engineering of CAS
Priority to CN201910220776.7A priority Critical patent/CN109992507B/zh
Publication of CN109992507A publication Critical patent/CN109992507A/zh
Application granted granted Critical
Publication of CN109992507B publication Critical patent/CN109992507B/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
    • 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)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明实施例提供的基于模拟执行的程序模糊测试方法及装置,所述方法包括:获取当前测试用例,利用所述当前测试用例对待测试程序进行模糊测试,获得测试结果,判断所述测试结果是否满足测试结束条件,获得第一判断结果;若所述第一判断结果为否,则对当前测试用例进行测试用例更改操作,获得新测试用例,根据所述新测试用例和预存的约束条件集进行程序模拟,获得模拟结果,判断所述模拟结果是否满足约束条件,获得第二判断结果;若所述第二判断结果为是,则利用所述新测试用例对待测试程序进行模糊测试,获得新测试结果,并在所述新测试结果满足测试结束条件时,输出测试报告。实现减少反复执行程序次数,降低花销提高运行效率的目的。

Description

基于模拟执行的程序模糊测试方法及装置
技术领域
本发明实施例涉及信息处理技术领域,尤其涉及一种基于模拟执行的程序模糊测试方法及装置。
背景技术
传统的黑盒模糊测试并不关注程序内部信息,通过提供随机输入进行漏洞挖掘,这种盲目的生成测试用例的方法使得生成的大部分测试用例都是无效的,尤其是面对现今越来越复杂的代码程序。所以衍生出了一些灰盒模糊测试工具和白盒模糊测试工具,比如灰盒模糊测试器AFL、基于污点分析的灰盒模糊测试器Angora和基于符号执行的白盒模糊测试器Badger,但是都还存在许多的不足。AFL没有利用程序中的数据流从而盲目地改变输入,生成的测试用例很难满足复杂的约束条件(即它们很难覆盖新的路径),效率和覆盖率都很低。Angora则是通过污点分析建立输入变量与约束条件之间的映射关系,模糊器然后只对这些能够影响约束条件的字节进行变异,从而实现快速覆盖新的路径分支。虽然Angora在一定程度上提升了AFL的覆盖效率,但是生成的测试用例很难满足复杂的约束条件,所以还是存在盲目变异的缺点。Badger则是基于符号执行收集约束条件,并利用约束求解器求解指导AFL生成新测试用例,虽然符号执行能够获取全部的程序内部信息,比Angora获取的信息多,但是符号执行存在路径***问题,无法用于测试大规模的程序。程序中的执行路径数量会随着程序中分支语句的数量成指数增长,当程序的规模增长到一定程序时,执行路径的数量会远远超过计算机的处理能力。综上所述,灰盒模糊测试存在没有针对约束条件生成测试用例,所以还存在盲目变异的缺点。而白盒模糊测试需要收集全部的程序信息,虽然这样做能够针对约束条件生成测试用例,但是存在路径***等不足之处。两者最终均体现在运行效率不高。
发明内容
针对现有技术存在的问题,本发明实施例提供一种基于模拟执行的程序模糊测试方法及装置。
本发明实施例提供一种基于模拟执行的程序模糊测试方法,包括:
获取当前测试用例,利用所述当前测试用例对待测试程序进行模糊测试,获得测试结果,判断所述测试结果是否满足测试结束条件,获得第一判断结果;
若所述第一判断结果为否,则对当前测试用例进行测试用例更改操作,获得新测试用例,根据所述新测试用例和预存的约束条件集进行程序模拟,获得模拟结果,判断所述模拟结果是否满足约束条件,获得第二判断结果;
若所述第二判断结果为是,则利用所述新测试用例对待测试程序进行模糊测试,获得新测试结果,并在所述新测试结果满足测试结束条件时,输出测试报告。
本发明实施例提供一种基于模拟执行的程序模糊测试装置,包括:
第一判断模块,用于获取当前测试用例,利用所述当前测试用例对待测试程序进行模糊测试,获得测试结果,判断所述测试结果是否满足测试结束条件,获得第一判断结果;
第二判断模块,用于在所述第一判断结果为否,对当前测试用例进行测试用例更改操作,获得新测试用例,根据所述新测试用例和预存的约束条件集进行程序模拟,获得模拟结果,判断所述模拟结果是否满足约束条件,获得第二判断结果;
处理模块,用于在所述第二判断结果为是,利用所述新测试用例对待测试程序进行模糊测试,获得新测试结果,并在所述新测试结果满足测试结束条件时,输出测试报告。
本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述基于模拟执行的程序模糊测试方法的步骤。
本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述基于模拟执行的程序模糊测试方法的步骤。
本发明实施例提供的基于模拟执行的程序模糊测试方法及装置,通过利用当前测试用例对待测试程序进行模糊测试,获得测试结果,在测试结果不满足测试结束条件时对当前测试用例进行测试用例更改操作,获得新测试用例,并根据新测试用例和预存的约束条件集进行程序模拟,以判断模拟结果是否满足约束条件,减少反复执行程序次数,在满足条件时利用新测试用例对待测试程序进行模糊测试,获得新测试结果,直到输出测试报告,实现降低花销提高运行效率的目的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明基于模拟执行的程序测试方法实施例流程图;
图2为本发明基于模拟执行的程序测试方法实施例流程图;
图3为本发明基于模拟执行的程序测试方法的测试流程示意图;
图4为本发明基于模拟执行的程序测试方法实施例流程图;
图5为本发明基于符号执行获取路径约束条件集的流程示意图;
图6为本发明基于模拟执行的程序测试装置实施例结构图;
图7为本发明基于模拟执行的程序测试装置实施例结构图;
图8为本发明电子设备实施例结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1示出了本发明一实施例提供的一种基于模拟执行的程序模糊测试方法,包括:
S11、获取当前测试用例,利用所述当前测试用例对待测试程序进行模糊测试,获得测试结果,判断所述测试结果是否满足测试结束条件,获得第一判断结果。
针对步骤S11,需要说明的是,在本发明实施例中,应用程序指为完成某项或多项特定工作的计算机程序,它运行在用户模式,可以和用户进行交互,具有可视的用户界面。但应用程序在运行之前,测试者根据测试用例来确定应用程序是否正确工作。应用程序由大量程序语句构成。在程序执行过程中,由不同程序语句的顺序执行会形成不同路径。测试时,一个测试用例覆盖一条路径。测试用例覆盖一条路径,会建立测试用例集,用于存储测试用例所对应的覆盖路径,每条路径只与第一个覆盖该路径的测试用例建立映射关系。
在本实施例中,将当前测试用例对待测试程序进行模糊测试,获得测试结果。该测试结果用于判断是否满足测试结束条件,获得第一判断结果。所述测试结束条件是是否覆盖全部路径。即:是否对全部路径完成测试。
S12、若所述第一判断结果为否,则对当前测试用例进行测试用例更改操作,获得新测试用例,根据所述新测试用例和预存的约束条件集进行程序模拟,获得模拟结果,判断所述模拟结果是否满足约束条件,获得第二判断结果。
针对步骤S12,需要说明的是,在本发明实施例中,若第一判断结果为否,则全部路径未被覆盖。此时,需要对当前测试用例进行测试用例更改操作,即形成新测试用例,以用来对未覆盖的路径进行有效测试。但获取到的新测试用例要满足约束条件,才会用来对待测试程序进行测试。故需根据新测试用例和预存的约束条件集中的约束条件进行程序模拟,获得模拟结果,判断所述模拟结果是否满足约束条件,获得第二判断结果。
S13、若所述第二判断结果为是,则利用所述新测试用例对待测试程序进行模糊测试,获得新测试结果,并在所述新测试结果满足测试结束条件时,输出测试报告。
针对步骤S13,需要说明的是,当第二判断结果为是,则新测试用例满足约束条件。此时,将新测试用例作为当前测试用例,对待测试程序进行模糊测试,获得新的测试结果。然后继续判断新的测试结果是否满足测试结束条件,若不满足,则对新测试用例重复执行测试用例更改操作,即执行步骤S12,若满足,则输出测试报告。在这里,输出的测试报告为测试用例对程序执行所得到的所有测试结果。
本发明实施例提供的一种基于模拟执行的程序模糊测试方法,通过利用当前测试用例对待测试程序进行模糊测试,获得测试结果,在测试结果不满足测试结束条件时对当前测试用例进行测试用例更改操作,获得新测试用例,并根据新测试用例和预存的约束条件集进行程序模拟,以判断模拟结果是否满足约束条件,减少反复执行程序次数,在满足条件时利用新测试用例对待测试程序进行模糊测试,获得新测试结果,直到输出测试报告,实现降低花销提高运行效率的目的。
图2示出了本发明一实施例提供的一种基于模拟执行的程序模糊测试方法,包括:
S21、获取当前测试用例,利用所述当前测试用例对待测试程序进行模糊测试,获得测试结果,判断所述测试结果是否满足测试结束条件,获得第一判断结果。
针对步骤S21,需要说明的是,在本发明实施例中,应用程序指为完成某项或多项特定工作的计算机程序,它运行在用户模式,可以和用户进行交互,具有可视的用户界面。但应用程序在运行之前,测试者根据测试用例来确定应用程序是否正确工作。应用程序由大量程序语句构成。在程序执行过程中,由不同程序语句的顺序执行会形成不同路径。测试时,一个测试用例覆盖一条路径。测试用例覆盖一条路径,会建立测试用例集,用于存储测试用例所对应的覆盖路径,每条路径只与第一个覆盖该路径的测试用例建立映射关系。
在本实施例中,将当前测试用例对待测试程序进行模糊测试,获得测试结果。该测试结果用于判断是否满足测试结束条件,获得第一判断结果。所述测试结束条件是是否覆盖全部路径。即:是否对全部路径完成测试。
S22、当所述第一判断结果为否,根据测试用例对应的覆盖路径集生成未覆盖路径对应的约束条件,所述约束条件为所述约束条件集中的一个约束条件;
S23、采用梯度下降算法对所述当前测试用例进行更改处理,获得新测试用例;
S24、根据所述新测试用例和生成的未覆盖路径对应的约束条件进行程序模拟,获得模拟结果,判断所述模拟结果是否满足约束条件,获得第二判断结果;
针对步骤S22-步骤S24,需要说明的是,在本发明实施例中,若第一判断结果为否,则全部路径未被覆盖。此时,需要对当前测试用例进行测试用例更改操作,即形成新测试用例,以用来对未覆盖的路径进行有效测试。但获取到的新测试用例要满足约束条件,才会用来对待测试程序进行测试。
在本发明实施例中,由于新测试用例获取之后,不能保证其能够完成有效的测试。为了避免反复执行程序,故需利用新测试用例和约束条件进行程序模拟,判断是否满足约束条件。在这里,约束条件是测试用例对程序进行有效执行的条件。
在本发明实施例中,当全部路径未被覆盖时,需要获取覆盖路径集中未覆盖路径对应的约束条件。一般情况下,当当前测试用例所覆盖的路径为条件分支路径时,且该分支路径未被覆盖,则直接获取该分支路径对应的约束条件。即当前测试用例所覆盖路径对应的约束条件的反向条件。
获取所选的未覆盖路径对应的约束条件后,需要获取新的测试用例对该约束条件进行程序模拟。在本实施例中,采用梯度下降算法对所述当前测试用例进行更改处理,获得新测试用例,具体以下面具体实例进行解释说明:
步骤11:当全部路径未被覆盖时,根据已覆盖路径集选择一个约束条件取反,以获得一个未覆盖路径对应的约束条件;
步骤12:根据当前测试用例x0变异生成新的测试用例x0-Δx或x0+Δx确保新的测试用例到达当前约束条件,将生成的测试用例带入约束条件中,判断测试用例是否满足约束:
若满足约束条件,则利用所述新测试用例对待测试程序进行测试;
若不满足约束条件,则进行步骤13;
步骤13:运行梯度下降算法,使用
Figure BDA0002003536510000061
计算处的近似梯度,根据梯度下降算法x0=x0-α*f'(x0)生成新的测试用例x0,将其带入约束条件中模拟执行,判断新的测试用例是否满足约束,不满足返回步骤12,满足则使用当前测试用例对测试程序进行测试。
S25、若所述第二判断结果为是,则利用所述新测试用例对待测试程序进行模糊测试,获得新测试结果,并在所述新测试结果满足测试结束条件时,输出测试报告。
针对步骤S25,需要说明的是,当第二判断结果为是,则新测试用例满足约束条件。此时,将新测试用例作为当前测试用例,对待测试程序进行测试,获得新的测试结果。然后继续判断新的测试结果是否满足测试结束条件,若不满足,则对新测试用例重复执行测试用例更改操作,即执行步骤S22-步骤S24,若满足,则输出测试报告。在这里,输出的测试报告为测试用例对程序执行所得到的所有测试结果。
针对上述本方案所述的步骤,下面以具体实例进行完整描述,参照图3为基于模拟执行的程序测试方法的测试流程示意图,如图所示:
开始后,生成一有效测试用例作为当前测试用例x0,将测试用例x0执行程序,在未覆盖全部路径时,先将测试用例添加到测试用例集中,建立与覆盖路径的映射关系,并存储,以及将新路径添加到已覆盖路径集中并存储。基于已覆盖路径集生成一个未覆盖路径对应的约束条件,并根据当前测试用例x0变异生成新的测试用例x0-Δx或x0+Δx确保新的测试用例到达当前约束条件,将生成的测试用例带入约束条件中,判断测试用例是否满足约束。
在未满足约束的情况下,运行梯度下降算法,使用
Figure BDA0002003536510000071
计算处的近似梯度,根据梯度下降算法x0=x0-α*f'(x0)生成新的测试用例x0,继续通过将测试用例带入约束条件中模拟执行,判断新的测试用例是否满足约束。
若满足约束条件,则利用所述新测试用例对待测试程序进行测试。直到覆盖全部路径后,输出测试报告,完成结束。
本发明实施例提供的一种基于模拟执行的程序模糊测试方法,通过利用当前测试用例对待测试程序进行模糊测试,获得测试结果,在测试结果不满足测试结束条件时对当前测试用例进行测试用例更改操作,获得新测试用例,并根据新测试用例和预存的约束条件集进行程序模拟,以判断模拟结果是否满足约束条件,减少反复执行程序次数,在满足条件时利用新测试用例对待测试程序进行模糊测试,获得新测试结果,直到输出测试报告,实现降低花销提高运行效率的目的。
图4示出了本发明一实施例提供的一种基于模拟执行的程序模糊测试方法,包括:
S31、确定输入变量,将输入变量符号化,生成初始化状态信息,获取所述待测试程序,构建所述待测试程序的控制流图,根据所述控制流图和初始化状态信息生成待处理路径状态信息集;
S32、从所述待处理路径状态信息集中选取目标待处理路径状态信息,判断所述目标待处理路径状态信息中是否存在下一条程序语句,若不存在,则判断所述待处理路径状态信息集中是否存在未选取的目标待处理路径状态信息,若不存在,则输出约束条件集;
S33、获取当前测试用例,利用所述当前测试用例对待测试程序进行模糊测试,获得测试结果,判断所述测试结果是否满足测试结束条件,获得第一判断结果;
S34、若所述第一判断结果为否,则对当前测试用例进行测试用例更改操作,获得新测试用例,根据所述新测试用例和预存的约束条件集进行程序模拟,获得模拟结果,判断所述模拟结果是否满足约束条件,获得第二判断结果;
S35、若所述第二判断结果为是,则利用所述新测试用例对待测试程序进行模糊测试,获得新测试结果,并在所述新测试结果满足测试结束条件时,输出测试报告。
针对步骤S31和步骤S32,需要说明的是,获取约束条件集采用符合执行方式完成。使用符号值代替具体值,在符号执行的过程中,符号执行引擎始终保持一个状态信息,这个状态信息表示为(pc,π,σ),其中:pc指向需要处理的下一条程序语句,其可以是赋值语句、条件分支语句或者是跳转语句。π指代路径约束条件信息,表示为执行到达pc所指的语句需要经过的条件分支,以及各分支处关于符号值ai的表达式。在分析的过程中,将其初始定义为π=true。σ表示与程序变量相关的符号值集,包括含有具体值和符号值ai的表达式。
如图5所示,下面以具体实例对步骤S31和步骤S32进行解释说明:
步骤01:确定输入变量,将输入变量符号化,并初始化状态信息(pc,π,σ);
步骤02:构建被测程序的控制流图,pc指向控制流图的第一条语句,并将其添加至待处理路径状态信息集;
步骤03:从待处理路径状态信息集中选择一条待处理路径状态信息;
步骤04:若pc为空,则直接输出约束条件集,并判断待处理路径状态信息集是否为空,若是,结束,否则循环执行步骤03;若pc不为空,则执行步骤05;
步骤05:对pc进行判断,如果为条件语句时,根据条件分支的true和false生成两个不同路径状态信息,并添加至待处理路径状态信息集;如果是赋值语句并且对符号值集σ中变量进行赋值操作时,则将新产生的变量当成符号变量进行处理,并添加到符号值集σ中;
步骤06:若待处理路径状态信息集为空,则结束,否则返回步骤03。
本实施例通过符合执行路径条件,将路径的约束条件转换成用输入变量表示的约束条件,用于后续的程序模拟执行。
针对步骤S33-步骤S35,这些步骤与上述实施例步骤S11-步骤S13在原理上相同,在此不再赘述。
本发明实施例提供的一种基于模拟执行的程序模糊测试方法,通过利用当前测试用例对待测试程序进行模糊测试,获得测试结果,在测试结果不满足测试结束条件时对当前测试用例进行测试用例更改操作,获得新测试用例,并根据新测试用例和预存的约束条件集进行程序模拟,以判断模拟结果是否满足约束条件,减少反复执行程序次数,在满足条件时利用新测试用例对待测试程序进行模糊测试,获得新测试结果,直到输出测试报告,实现降低花销提高运行效率的目的。
图6示出了本发明一实施例提供的一种基于模拟执行的程序模糊测试装置,包括第一判断模块41、第二判断模块42和处理模块43,其中:
第一判断模块41,用于获取当前测试用例,利用所述当前测试用例对待测试程序进行模糊测试,获得测试结果,判断所述测试结果是否满足测试结束条件,获得第一判断结果;
第二判断模块42,用于在所述第一判断结果为否,对当前测试用例进行测试用例更改操作,获得新测试用例,根据所述新测试用例和预存的约束条件集进行程序模拟,获得模拟结果,判断所述模拟结果是否满足约束条件,获得第二判断结果;
处理模块43,用于在所述第二判断结果为是,利用所述新测试用例对待测试程序进行模糊测试,获得新测试结果,并在所述新测试结果满足测试结束条件时,输出测试报告。
由于本发明实施例所述装置与上述实施例所述方法的原理相同,对于更加详细的解释内容在此不再赘述。
需要说明的是,本发明实施例中可以通过硬件处理器(hardware processor)来实现相关功能模块。
本发明实施例提供的一种基于模拟执行的程序模糊测试装置,通过利用当前测试用例对待测试程序进行模糊测试,获得测试结果,在测试结果不满足测试结束条件时对当前测试用例进行测试用例更改操作,获得新测试用例,并根据新测试用例和预存的约束条件集进行程序模拟,以判断模拟结果是否满足约束条件,减少反复执行程序次数,在满足条件时利用新测试用例对待测试程序进行模糊测试,获得新测试结果,直到输出测试报告,实现降低花销提高运行效率的目的。
本发明一实施例提供的一种基于模拟执行的程序模糊测试装置,包括第一判断模块、第二判断模块和处理模块,其中:
第一判断模块,用于获取当前测试用例,利用所述当前测试用例对待测试程序进行模糊测试,获得测试结果,判断所述测试结果是否满足测试结束条件,获得第一判断结果;
第二判断模块,用于:
当所述第一判断结果为否,根据测试用例对应的覆盖路径集生成未覆盖路径对应的约束条件,所述约束条件为所述约束条件集中的一个约束条件;
采用梯度下降算法对所述当前测试用例进行更改处理,获得新测试用例;
根据所述新测试用例和生成的未覆盖路径对应的约束条件进行程序模拟,获得模拟结果,判断所述模拟结果是否满足约束条件,获得第二判断结果;
处理模块,用于在所述第二判断结果为是,利用所述新测试用例对待测试程序进行模糊测试,获得新测试结果,并在所述新测试结果满足测试结束条件时,输出测试报告。
由于本发明实施例所述装置与上述实施例所述方法的原理相同,对于更加详细的解释内容在此不再赘述。
需要说明的是,本发明实施例中可以通过硬件处理器(hardware processor)来实现相关功能模块。
本发明实施例提供的一种基于模拟执行的程序模糊测试装置,通过利用当前测试用例对待测试程序进行模糊测试,获得测试结果,在测试结果不满足测试结束条件时对当前测试用例进行测试用例更改操作,获得新测试用例,并根据新测试用例和预存的约束条件集进行程序模拟,以判断模拟结果是否满足约束条件,减少反复执行程序次数,在满足条件时利用新测试用例对待测试程序进行模糊测试,获得新测试结果,直到输出测试报告,实现降低花销提高运行效率的目的。
图7示出了本发明一实施例提供的一种基于模拟执行的程序模糊测试装置,包括获取模块51、第一判断模块52、第二判断模块53和处理模块54,其中:
获取模块51,用于:
确定输入变量,将输入变量符号化,生成初始化状态信息;
获取所述待测试程序,构建所述待测试程序的控制流图,根据所述控制流图和初始化状态信息生成待处理路径状态信息集;
从所述待处理路径状态信息集中选取目标待处理路径状态信息;
判断所述目标待处理路径状态信息中是否存在下一条程序语句,若不存在,则判断所述待处理路径状态信息集中是否存在未选取的目标待处理路径状态信息,若不存在,则输出约束条件集;
第一判断模块52,用于获取当前测试用例,利用所述当前测试用例对待测试程序进行模糊测试,获得测试结果,判断所述测试结果是否满足测试结束条件,获得第一判断结果;
第二判断模块53,用于在所述第一判断结果为否,对当前测试用例进行测试用例更改操作,获得新测试用例,根据所述新测试用例和预存的约束条件集进行程序模拟,获得模拟结果,判断所述模拟结果是否满足约束条件,获得第二判断结果;
处理模块54,用于在所述第二判断结果为是,利用所述新测试用例对待测试程序进行模糊测试,获得新测试结果,并在所述新测试结果满足测试结束条件时,输出测试报告。
由于本发明实施例所述装置与上述实施例所述方法的原理相同,对于更加详细的解释内容在此不再赘述。
需要说明的是,本发明实施例中可以通过硬件处理器(hardware processor)来实现相关功能模块。
本发明实施例提供的一种基于模拟执行的程序模糊测试装置,通过利用当前测试用例对待测试程序进行模糊测试,获得测试结果,在测试结果不满足测试结束条件时对当前测试用例进行测试用例更改操作,获得新测试用例,并根据新测试用例和预存的约束条件集进行程序模拟,以判断模拟结果是否满足约束条件,减少反复执行程序次数,在满足条件时利用新测试用例对待测试程序进行模糊测试,获得新测试结果,直到输出测试报告,实现降低花销提高运行效率的目的。
图8示例了一种服务器的实体结构示意图,如图6所示,该服务器可以包括:处理器(processor)610、通信接口(Communications Interface)620、存储器(memory)630和通信总线640,其中,处理器610,通信接口620,存储器630通过通信总线640完成相互间的通信。处理器610可以调用存储器630中的逻辑指令,以执行如下方法:获取当前测试用例,利用所述当前测试用例对待测试程序进行模糊测试,获得测试结果,判断所述测试结果是否满足测试结束条件,获得第一判断结果;若所述第一判断结果为否,则对当前测试用例进行测试用例更改操作,获得新测试用例,根据所述新测试用例和预存的约束条件集进行程序模拟,获得模拟结果,判断所述模拟结果是否满足约束条件,获得第二判断结果;若所述第二判断结果为是,则利用所述新测试用例对待测试程序进行模糊测试,获得新测试结果,并在所述新测试结果满足测试结束条件时,输出测试报告。
此外,上述的存储器630中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (8)

1.一种基于模拟执行的程序模糊测试方法,其特征在于,包括:
获取当前测试用例,利用所述当前测试用例对待测试程序进行模糊测试,获得测试结果,判断所述测试结果是否满足测试结束条件,获得第一判断结果;
若所述第一判断结果为否,则根据测试用例对应的覆盖路径集生成未覆盖路径对应的约束条件,所述约束条件为预存的约束条件集中的一个约束条件;采用梯度下降算法对所述当前测试用例进行更改处理,获得新测试用例,根据所述新测试用例和未覆盖路径对应的约束条件进行程序模拟,获得模拟结果,判断所述模拟结果是否满足约束条件,获得第二判断结果;所述程序模拟是指将生产的新测试用例带入约束条件;
若所述第二判断结果为是,则利用所述新测试用例对待测试程序进行模糊测试,获得新测试结果,并在所述新测试结果满足测试结束条件时,输出测试报告;所述测试结束条件是是否对全部路径完成测试。
2.根据权利要求1所述的方法,其特征在于,还包括:
若所述第二判断结果为否,则对新测试用例重复执行测试用例更改操作。
3.根据权利要求1所述的方法,其特征在于,所述约束条件集的获取步骤包括:
确定输入变量,将输入变量符号化,生成初始化状态信息;
获取所述待测试程序,构建所述待测试程序的控制流图,根据所述控制流图和初始化状态信息生成待处理路径状态信息集;
从所述待处理路径状态信息集中选取目标待处理路径状态信息;
判断所述目标待处理路径状态信息中是否存在下一条程序语句,若不存在,则判断所述待处理路径状态信息集中是否存在未选取的目标待处理路径状态信息,若不存在,则输出约束条件集。
4.一种基于模拟执行的程序模糊测试装置,其特征在于,包括:
第一判断模块,用于获取当前测试用例,利用所述当前测试用例对待测试程序进行模糊测试,获得测试结果,判断所述测试结果是否满足测试结束条件,获得第一判断结果;
第二判断模块,用于在所述第一判断结果为否,根据测试用例对应的覆盖路径集生成未覆盖路径对应的约束条件,所述约束条件为预存的约束条件集中的一个约束条件;采用梯度下降算法对所述当前测试用例进行更改处理,获得新测试用例,根据所述新测试用例和未覆盖路径对应的约束条件进行程序模拟,获得模拟结果,判断所述模拟结果是否满足约束条件,获得第二判断结果;所述程序模拟是指将生产的新测试用例带入约束条件;
处理模块,用于在所述第二判断结果为是,利用所述新测试用例对待测试程序进行模糊测试,获得新测试结果,并在所述新测试结果满足测试结束条件时,输出测试报告;所述测试结束条件是是否对全部路径完成测试。
5.根据权利要求4所述的装置,其特征在于,所述第二判断模块还用于:在所述第二判断结果为否,对新测试用例重复执行测试用例更改操作。
6.根据权利要求4所述的装置,其特征在于,还包括获取模块,用于:
确定输入变量,将输入变量符号化,生成初始化状态信息;
获取所述待测试程序,构建所述待测试程序的控制流图,根据所述控制流图和初始化状态信息生成待处理路径状态信息集;
从所述待处理路径状态信息集中选取目标待处理路径状态信息;
判断所述目标待处理路径状态信息中是否存在下一条程序语句,若不存在,则判断所述待处理路径状态信息集中是否存在未选取的目标待处理路径状态信息,若不存在,则输出约束条件集。
7.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至3任一项所述基于模拟执行的程序模糊测试方法的步骤。
8.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至3任一项所述基于模拟执行的程序模糊测试方法的步骤。
CN201910220776.7A 2019-03-22 2019-03-22 基于模拟执行的程序模糊测试方法及装置 Active CN109992507B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910220776.7A CN109992507B (zh) 2019-03-22 2019-03-22 基于模拟执行的程序模糊测试方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910220776.7A CN109992507B (zh) 2019-03-22 2019-03-22 基于模拟执行的程序模糊测试方法及装置

Publications (2)

Publication Number Publication Date
CN109992507A CN109992507A (zh) 2019-07-09
CN109992507B true CN109992507B (zh) 2022-06-24

Family

ID=67129853

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910220776.7A Active CN109992507B (zh) 2019-03-22 2019-03-22 基于模拟执行的程序模糊测试方法及装置

Country Status (1)

Country Link
CN (1) CN109992507B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112199282B (zh) * 2020-10-09 2023-01-31 杭州安恒信息技术股份有限公司 一种office软件的模糊测试方法、装置及设备

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102708045A (zh) * 2012-04-13 2012-10-03 电子科技大学 一种缓解路径***的动态符号执行方法
CN102736979A (zh) * 2012-06-29 2012-10-17 南京大学 一种基于符号执行的带反馈测试用例生成方法
CN104252408A (zh) * 2013-06-26 2014-12-31 国际商业机器公司 提供测试用例的方法和装置
CN104375942A (zh) * 2014-12-11 2015-02-25 无锡江南计算技术研究所 一种面向二进制的混合模糊测试方法
CN104461908A (zh) * 2014-12-31 2015-03-25 中国科学院软件研究所 一种基于软件组合测试的回归测试用例重用方法
CN104598383A (zh) * 2015-02-06 2015-05-06 中国科学院软件研究所 一种基于模式的动态漏洞挖掘集成***和方法
CN108052825A (zh) * 2017-12-29 2018-05-18 哈尔滨工业大学 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测***
CN108647145A (zh) * 2018-05-10 2018-10-12 清华大学 软件内存安全检测方法及***
CN108845944A (zh) * 2018-06-28 2018-11-20 中国人民解放军国防科技大学 一种结合符号执行提高软件模糊测试效率的方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2003054666A2 (en) * 2001-12-19 2003-07-03 Steven Sims System and method for automated test-case generation for software
US8250658B2 (en) * 2007-09-20 2012-08-21 Mu Dynamics, Inc. Syntax-based security analysis using dynamically generated test cases
US8387016B2 (en) * 2009-05-01 2013-02-26 Microsoft Corporation Whitebox trace fuzzing
US10318667B2 (en) * 2015-12-16 2019-06-11 International Business Machines Corporation Test case generation

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102708045A (zh) * 2012-04-13 2012-10-03 电子科技大学 一种缓解路径***的动态符号执行方法
CN102736979A (zh) * 2012-06-29 2012-10-17 南京大学 一种基于符号执行的带反馈测试用例生成方法
CN104252408A (zh) * 2013-06-26 2014-12-31 国际商业机器公司 提供测试用例的方法和装置
CN104375942A (zh) * 2014-12-11 2015-02-25 无锡江南计算技术研究所 一种面向二进制的混合模糊测试方法
CN104461908A (zh) * 2014-12-31 2015-03-25 中国科学院软件研究所 一种基于软件组合测试的回归测试用例重用方法
CN104598383A (zh) * 2015-02-06 2015-05-06 中国科学院软件研究所 一种基于模式的动态漏洞挖掘集成***和方法
CN108052825A (zh) * 2017-12-29 2018-05-18 哈尔滨工业大学 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测***
CN108647145A (zh) * 2018-05-10 2018-10-12 清华大学 软件内存安全检测方法及***
CN108845944A (zh) * 2018-06-28 2018-11-20 中国人民解放军国防科技大学 一种结合符号执行提高软件模糊测试效率的方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Fuzzing_Process_Modelling_for_Web_Applications_Robustness_Testing_via_Dynamic_Bayesian_Networks;TV Azarnova、PV Polukhin、SA Barkalov;《2018 年全球智能工业会议 (GloSIC》;20181210;全文 *
一种基于约束的变异测试数据生成方法;刘新忠等;《计算机研究与发展》;20110415(第04期);全文 *
符号执行研究综述;叶志斌等;《计算机科学》;20180615;全文 *

Also Published As

Publication number Publication date
CN109992507A (zh) 2019-07-09

Similar Documents

Publication Publication Date Title
CN106294120B (zh) 测试代码的方法、设备和计算机程序产品
CN107783901B (zh) 测试用例生成方法、装置、计算机设备及存储介质
CN110543421B (zh) 基于测试用例自动生成算法的单元测试自动执行方法
US8265916B1 (en) Test environment for accumulating cumulative metric data
CN105373478B (zh) 自动化测试方法和***
CN110287104A (zh) 测试用例生成方法、装置、终端及计算机可读存储介质
EP3264274A1 (en) Input discovery for unknown program binaries
CN110866602A (zh) 一种集成多任务模型的方法和装置
CN114238071A (zh) 基于数字化仿真技术的dcs软件自动验证***和方法
CN110321458B (zh) 一种基于控制流图的数据流分析方法及装置
CN109992507B (zh) 基于模拟执行的程序模糊测试方法及装置
CN112346977A (zh) 量子云计算平台软件功能测评方法和装置
CN116540546A (zh) 工艺控制***的控制参数的推荐方法、***、设备和介质
CN111581101A (zh) 软件模型的测试方法、装置、设备和介质
CN109344057B (zh) 基于遗传方法和符号执行的组合加速测试用例生成方法
CN110909522A (zh) 一种数据处理方法、装置和电子设备及介质
CN111210279B (zh) 一种目标用户预测方法、装置和电子设备
CN113850292A (zh) 故障知识库生成式更新方法、***、电子设备及介质
US20210042394A1 (en) Extracting temporal specifications of features for functional compatibility and integration with oems
CN113343659B (zh) 分析报告生成方法、装置、设备及存储介质
CN116841886B (zh) 一种面向配置缺陷的定向模糊测试方法
CN112035372A (zh) 一种软件测试方法、装置及电子设备
CN110716855B (zh) 处理器指令集测试方法及装置
CN115080445B (zh) 一种游戏测试管理方法及其***
CN111488283B (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