CN107885663B - 测试用例自动生成的方法、装置、计算机设备及存储介质 - Google Patents
测试用例自动生成的方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN107885663B CN107885663B CN201711227912.2A CN201711227912A CN107885663B CN 107885663 B CN107885663 B CN 107885663B CN 201711227912 A CN201711227912 A CN 201711227912A CN 107885663 B CN107885663 B CN 107885663B
- Authority
- CN
- China
- Prior art keywords
- program
- statement
- test data
- function
- tested
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test 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
技术领域
本发明涉及软件测试领域,特别是涉及一种测试用例自动生成的方法、装置、计算机设备及存储介质。
背景技术
随着全球信息化的快速发展,人们越来越重视各工控系统、信息系统等软件的可靠性、安全性问题。软件测试是提高软件的可靠性、安全性的主要技术。其中,如何通过提高软件测试的自动化程度来提高软件的安全性、可靠性等问题已成为当今学术界研究的热点。
测试用例的自动化生成是软件测试自动化程度的重要体现。现阶段,一般采用基于符号执行法的测试用例生成技术,该方法首先分析程序的执行路径,然后用符号替换,然后按照程序的路径静态执行相应的符号表达式,当路径执行完毕后生成测试用例。然而这个方法存在无法针对非线性逻辑表达式和外部调用函数执行的缺陷。
发明内容
基于此,有必要针对符号执行存在无法针对非线性逻辑表达式和外部调用函数执行的问题,提供一种测试用例自动生成的方法、装置、计算机设备及存储介质。
一种测试用例自动生成的方法,包括以下步骤:
加载被测程序,接收测试数据;
根据测试数据执行被测程序中的当前程序语句,检测分支语句;
若分支语句为非线性逻辑表达式,则调用预设结果值取代非线性逻辑表达式中的变量值,预设结果值为与非线性逻辑表达式对应程序处理测试数据得到的结果值;
若分支语句为调用函数,则调用预设运行结果取代调用函数,预设运行结果为与调用函数对应的函数处理测试数据得到的运行结果;
更新被测程序对应路径,在ture的分支语句中执行被测程序的下一程序语句,将下一程序语句作为当前程序语句,返回根据测试数据执行被测程序中的当前程序语句的步骤;
当对应路径执行完毕时,生成测试用例。
在其中一个实施例中,加载被测程序的步骤前还包括:
在被测程序中插桩进行符号执行的函数。
在其中一个实施例中,接收测试数据的步骤前还包括:
接收并符号化处理原始数据,生成测试数据。
在其中一个实施例中,在被测程序中插桩进行符号执行的函数的步骤前还包括:
构建被测程序的函数调用关系图。
在其中一个实施例中,检测分支语句的步骤前还包括:
判断程序语句是否为程序末语句;
当程序语句不为程序末语句时,根据程序语句执行结果更新符号值并进入检测分支语句的步骤;
当程序语句为程序末语句时,判断被测程序中的所有路径是否执行完毕。
在其中一个实施例中,当对应路径执行完毕时,生成测试用例的步骤之后,还包括:
判断被测程序中所有路径是否执行完毕。
在其中一个实施例中,判断被测程序中的所有路径是否执行完毕的步骤包括:
当被测程序中的所有路径执行完毕时,输出所有生成的测试用例;
当被测程序中还有未执行路径时,依次取反其余约束条件执行未执行路径,判断未执行路径是否有解;
当未执行路径有解时,生成测试用例,返回判断被测程序中的所有路径是否执行完毕的步骤。
一种测试用例自动生成的装置,包括:
初始化模块,用于加载被测程序,接收测试数据;
第一处理模块,用于根据测试数据执行被测程序中的当前程序语句,检测分支语句;
第一调用模块,用于若分支语句为非线性逻辑表达式,则调用预设结果值取代非线性逻辑表达式中的变量值,预设结果值为与非线性逻辑表达式对应程序处理测试数据得到的结果值;
第二调用模块,用于若分支语句为调用函数,则调用预设运行结果取代调用函数,预设运行结果为与调用函数对应的函数处理测试数据得到的运行结果;
第二处理模块,用于更新被测程序对应路径,在ture的分支语句中执行被测程序的下一程序语句,将下一程序语句作为当前程序语句,返回根据测试数据执行被测程序中的当前程序语句的步骤;
第三处理模块,用于当对应路径执行完毕时,生成测试用例。
一种计算机设备,包括处理器和存储器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行测试用例自动生成的方法的步骤。
一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时,使得处理器执行测试用例自动生成的方法的步骤。
上述测试用例自动生成的方法、装置、计算机设备及存储介质,在执行程序语句的过程中,当程序语句中的分支语句为非线性逻辑表达式时,调用预设结果值取代非线性逻辑表达式中的变量值,预设结果值为与非线性逻辑表达式对应程序处理测试数据得到的结果值;当程序语句中的分支语句为外部调用函数时,调用预设运行结果取代调用函数,预设运行结果为与调用函数对应的函数处理测试数据得到的运行结果,解决了符号执行无法针对非线性逻辑表达式和外部调用函数执行的问题。
附图说明
图1为本申请测试用例自动生成的方法的其中一个实施例的流程示意图;
图2为本申请测试用例自动生成的方法的其中一个实施例的流程示意图;
图3为本申请测试用例自动生成的装置的其中一个实施例的结构示意图;
图4为本申请测试用例自动生成的装置的其中一个实施例的结构示意图;
图5为本申请测试用例自动生成的方法的其中一个实施例的流程示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中在本申请的说明书中所使用的术语只是为了描述具体地实施例的目的,不是旨在于限制本申请。应该理解的是,本申请的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
如图1所示,一种测试用例自动生成的方法,包括以下步骤:
S400:加载被测程序,接收测试数据。
具体的,被测程序指的是用于生成测试用例的程序,测试数据指的是被符号化的原始数据。服务器首先加载被测程序,然后接收测试数据,根据测试数据执行加载的被测程序,通过被测程序生成所需测试用例,其中,测试数据的数量可以自行设置。
S500:根据测试数据执行被测程序中的当前程序语句,检测分支语句。
具体的,被测程序由程序语句组成,程序语句中包含分支语句,根据测试数据执行加载的被测程序即执行被测程序中的程序语句。首先根据测试数据执行被测程序中的当前程序语句,测试数据在执行完一条程序语句后其符号值会发生变化,测试数据在执行被测程序中的当前程序语句时会检测分支语句,即探索分支语句,当存在分支语句时,对分支语句进行判断,以便进行下一个步骤。
S600:若分支语句为非线性逻辑表达式,则调用预设结果值取代非线性逻辑表达式中的变量值,预设结果值为与非线性逻辑表达式对应程序处理测试数据得到的结果值。
具体的,非线性逻辑表达式指的是表达式中包含变量值的表达式,此变量值指的是除了测试数据以外的其它值。服务器首先根据非线性逻辑表达式预设对应的程序,对应的程序可根据测试数据的不同输出对应的不同预设结果值供服务器使用,当分支语句为非线性逻辑表达式时,服务器会调用预设结果值取代非线性逻辑表达式中的变量值,使非线性逻辑表达式变为符号执行中可识别的线性逻辑表达式。
S700:若分支语句为调用函数,则调用预设运行结果取代调用函数,预设运行结果为与调用函数对应的函数处理测试数据得到的运行结果。
具体的,调用函数指的是系统调用函数、第三方函数库中的函数等。服务器首先根据调用函数预设对应的函数处理模块,函数处理模块可根据测试数据的不同输出对应的不同预设运行结果供服务器使用,当分支语句为调用函数时,服务器会调用预设运行结果取代调用函数,使分支语句由符号执行中不可识别的调用函数变为可识别的数据。
进一步的,预设运行结果可以为服务器可识别的二进制数1和0,其中1代表预设运行结果为真;0代表预设运行结果为假。另外,预设运行结果也可以为服务器可识别的具体数值,此时对应的函数处理为根据测试数据得到一个具体数值。
S800:更新被测程序对应路径,在ture的分支语句中执行被测程序的下一程序语句,将下一程序语句作为当前程序语句,返回根据测试数据执行被测程序中的当前程序语句的步骤。
具体的,路径由程序语句组成,指的是生成测试用例的路径,当路径更新完毕后,再次输入测试数据时,测试数据经过更新完毕的路径就能生成与路径对应的测试用例。当遇到分支语句时,会取条件为真的分支语句继续执行被测程序的下一程序语句,此时将被测程序的下一程序语句,作为当前程序语句,返回根据测试数据执行被测程序中的当前程序语句的步骤,继续被测程序的执行。
S900:当对应路径执行完毕时,生成测试用例。
具体的,当测试数据在执行被测程序的程序语句的过程中,碰到程序末语句时,在程序末语句对测试数据进行处理之后即可更新对应路径,此时的更新为此条对应路径的最后一次更新,在执行完程序末语句之后,即可得到能生成测试用例的路径。
上述测试用例自动生成的方法,在执行程序语句的过程中,当程序语句中的分支语句为非线性逻辑表达式时,调用预设结果值取代非线性逻辑表达式中的变量值,预设结果值为与非线性逻辑表达式对应程序处理测试数据得到的结果值;当程序语句中的分支语句为外部调用函数时,调用预设运行结果取代调用函数,预设运行结果为与调用函数对应的函数处理测试数据得到的运行结果,解决了符号执行无法针对非线性逻辑表达式和外部调用函数执行的问题。
如图2所示,在其中一个实施例中,S400加载被测程序的步骤前还包括:
S200:在被测程序中插桩进行符号执行的函数。
具体的,符号执行是指在不执行程序的前提下,用符号值表示程序的输入,然后模拟程序执行进行过程内分析和全局分析。过程内分析指的是由多个程序基本块构成单个过程,根据单个过程的控制流图,求解出该过程所有可执行路径,其中,程序基本块指的是没有跳转的顺序语句代码块。全局分析指的是在过程内分析的基础上对整个程序代码进行上下文敏感的分析,形成程序代码的函数调用关系图。
插桩指的是在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针,又称为“探测仪”,本质上就是进行信息采集的代码段,可以是赋值语句或采集覆盖信息的函数调用,通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息,从而实现测试目的的方法。
如图2所示,在其中一个实施例中,S400接收测试数据的步骤前还包括:
S300:接收并符号化处理原始数据,生成测试数据。
具体的,符号化处理原始数据指的是对原始数据进行符号化,使原始数据转变为符号执行过程中可识别的测试数据,测试数据可以为符号值。
如图2所示,在其中一个实施例中,S200在被测程序中插桩进行符号执行的函数的步骤前还包括:
S100:构建被测程序的函数调用关系图。
具体的,函数调用关系图是对程序中函数调用关系的一种静态描述。在函数调用关系图中,采用节点标识函数,采用边标识函数之间的调用关系。通过函数关系调用图,可以了解程序中的函数以及函数之间的调用关系,从而辅助理解程序的基本结构及其功能。
常用的函数调用关系图的构建算法包括类层析分析和快速类型分析。
如图2所示,在其中一个实施例中,S500检测分支语句的步骤前还包括:
S520:判断程序语句是否为程序末语句;
S522:当程序语句不为程序末语句时,根据程序语句执行结果更新符号值并进入检测分支语句的步骤;
S524:当程序语句为程序末语句时,判断被测程序中的所有路径是否执行完毕。
具体的,程序末语句指的是对应路径中最后的程序语句。当程序语句不为程序末语句时,表示对应路径并没有执行完毕,此时根据程序语句的执行结果更新测试数据的符号值,并进入检测分支语句的步骤,继续进行程序语句的执行。当程序语句为程序未语句时,表示对应路径已经执行完毕,此时可根据此对应路径和测试数据生成测试用例,但被测程序中可能存在其他路径,要继续判断被测程序中的其它路径的执行情况。
如图2所示,在其中一个实施例中,S900当对应路径执行完毕时,生成测试用例的步骤之后,还包括:
S920:判断被测程序中所有路径是否执行完毕。
具体的,对应路径执行完毕时,要进一步判断被测程序中其它路径的执行情况。
如图2所示,在其中一个实施例中,S920判断被测程序中的所有路径是否执行完毕的步骤包括:
S922:当被测程序中的所有路径执行完毕时,输出所有生成的测试用例;
S924:当被测程序中还有未执行路径时,依次取反其余约束条件执行未执行路径,判断未执行路径是否有解;
S926:当未执行路径有解时,生成测试用例,返回判断被测程序中的所有路径是否执行完毕的步骤。
具体的,当被测程序中的所有路径执行完毕时,也表示所有的测试用例已经生成,此时可直接输出所有生成的测试用例。当被测程序中还有未执行路径时,可取反其余约束条件执行未执行路径,判断未执行路径是否有解,其中,判断未执行路径是否有解可以采用约束解释器。约束解释器由过程的约束条件和路径调度策略组成,用于判定路径条件是否可行,其中,路径条件也可称为路径约束,由一系列分支条件组成。
如图3所示,一种测试用例自动生成的装置,包括:
初始化模块400,用于加载被测程序,接收测试数据;
第一处理模块500,用于根据测试数据执行被测程序中的当前程序语句,检测分支语句;
第一调用模块600,用于若分支语句为非线性逻辑表达式,则调用预设结果值取代非线性逻辑表达式中的变量值,预设结果值为与非线性逻辑表达式对应程序处理测试数据得到的结果值;
第二调用模块700,用于若分支语句为调用函数,则调用预设运行结果取代调用函数,预设运行结果为与调用函数对应的函数处理测试数据得到的运行结果;
第二处理模块800,用于更新被测程序对应路径,在ture的分支语句中执行被测程序的下一程序语句,将下一程序语句作为当前程序语句,返回根据测试数据执行被测程序中的当前程序语句的步骤;
第三处理模块900,用于当对应路径执行完毕时,生成测试用例。
具体的,首先通过初始化模块400加载被测程序,接收测试数据,然后通过第一处理模块500根据测试数据执行被测程序中的当前程序语句,检测分支语句,若分支语句为非线性逻辑表达式,则通过第一调用模块600调用预设结果值取代非线性逻辑表达式中的变量值,预设结果值为与非线性逻辑表达式对应程序处理测试数据得到的结果值;若分支语句为调用函数,则通过第二调用模块700则调用预设运行结果取代调用函数,预设运行结果为与调用函数对应的函数处理测试数据得到的运行结果,再通过第二处理模块800更新被测程序对应路径,在ture的分支语句中执行被测程序的下一程序语句,将下一程序语句作为当前程序语句,返回根据测试数据执行被测程序中的当前程序语句的步骤,最后通过第三处理模块900当对应路径执行完毕时,生成测试用例。
如图4所示,在其中一个实施例中,测试用例自动生成的装置还包括:
构建模块100、插桩模块200、符号化模块300和第二判断模块920。
如图4所示,在其中一个实施例中,第一处理模块500还包括第一判断模块520。
如图4所示,在其中一个实施例中,第二判断模块920还包括第四处理模块922。
上述测试用例自动生成的装置,在执行程序语句的过程中,当程序语句中的分支语句为非线性逻辑表达式时,调用预设结果值取代非线性逻辑表达式中的变量值,预设结果值为与非线性逻辑表达式对应程序处理测试数据得到的结果值;当程序语句中的分支语句为外部调用函数时,调用预设运行结果取代调用函数,预设运行结果为与调用函数对应的函数处理测试数据得到的运行结果,解决了符号执行无法针对非线性逻辑表达式和外部调用函数执行的问题。
一种计算机设备,包括处理器和存储器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行测试用例自动生成的方法的步骤。
计算机设备包括通过系统总线连接的处理器、存储器、网络接口、输入装置和显示屏。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作系统,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现测试用例自动生成的方法。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行测试用例自动生成的方法。计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。本领域技术人员可以理解上述结构仅仅是与本申请方案相关的部分结构,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在其中一个实施例中,本申请提供的测试用例自动生成的装置可以实现为一种计算机程序的形式,计算机程序可在计算机设备上运行。计算机设备的存储器中可存储组成该测试用例自动生成的装置的各个程序模块,比如,图3所示的初始化模块400、第一处理模块500、第一调用模块600、第二调用模块700、第二处理模块800和第三处理模块900。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的测试用例自动生成的方法中的步骤。
例如,计算机设备可以通过如图3所示的测试用例自动生成的装置中的初始化模块400执行步骤S400、第一处理模块500执行步骤S500、第一调用模块600执行步骤S600、第二调用模块700执行步骤S700、第二处理模块800执行步骤S800和第三处理模块900执行步骤S900。
上述测试用例自动生成的计算机设备,在执行程序语句的过程中,当程序语句中的分支语句为非线性逻辑表达式时,调用预设结果值取代非线性逻辑表达式中的变量值,预设结果值为与非线性逻辑表达式对应程序处理测试数据得到的结果值;当程序语句中的分支语句为外部调用函数时,调用预设运行结果取代调用函数,预设运行结果为与调用函数对应的函数处理测试数据得到的运行结果,解决了符号执行无法针对非线性逻辑表达式和外部调用函数执行的问题。
一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时,使得处理器执行测试用例自动生成的方法的步骤。
本领域普通技术人员可以理解实现上述测试用例自动生成的方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述测试用例自动生成的方法的各个实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
上述测试用例自动生成的存储介质,在执行程序语句的过程中,当程序语句中的分支语句为非线性逻辑表达式时,调用预设结果值取代非线性逻辑表达式中的变量值,预设结果值为与非线性逻辑表达式对应程序处理测试数据得到的结果值;当程序语句中的分支语句为外部调用函数时,调用预设运行结果取代调用函数,预设运行结果为与调用函数对应的函数处理测试数据得到的运行结果,解决了符号执行无法针对非线性逻辑表达式和外部调用函数执行的问题。
如图5所示,通过一个具体的实施例来说明本方案。其具体包括如下步骤:
1、在服务器构建被测程序的函数关系调用图;
2、根据函数关系调用图在被测程序中插桩进行符号执行的函数;
3、接收并符号化处理原始数据,生成测试数据;
4、加载被测程序,接收测试数据;
5、根据测试数据执行被测程序中的当前程序语句;
6、判断程序语句是否为程序末语句,若程序语句不为程序末语句则进入步骤7,若是则进入步骤13;
7、根据程序语句执行结果更新符号值;
8、检测分支语句,若分支语句为非线性逻辑表达式则进入步骤9,若分支语句为调用函数则进入步骤10;
9、调用预设结果值取代非线性逻辑表达式中的变量值,预设结果值为与非线性逻辑表达式对应程序处理测试数据得到的结果值;
10、调用预设运行结果取代调用函数,预设运行结果为与调用函数对应的函数处理测试数据得到的运行结果;
11、更新被测程序对应路径,在ture的分支语句中执行被测程序的下一程序语句,将下一程序语句作为当前程序语句,返回步骤5;
12、当对应路径执行完毕时,生成测试用例;
13、判断被测程序中的所有路径是否执行完毕,当被测程序中的所有路径未执行完毕时进入步骤14,当被测程序中的所有路径执行完毕时进入步骤16;
14、依次取反其余约束条件执行未执行路径,判断未执行路径是否有解,当未执行路径有解时进入步骤15,当所有路径执行完毕时进入步骤16;
15、生成测试用例,返回步骤13;
16、输出所有生成的测试用例。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种测试用例自动生成的方法,其特征在于,包括以下步骤:
加载被测程序,接收测试数据;
根据所述测试数据执行所述被测程序中的当前程序语句,检测分支语句;
若所述分支语句为非线性逻辑表达式,则调用预设结果值取代所述非线性逻辑表达式中的变量值,所述预设结果值为与所述非线性逻辑表达式对应程序处理所述测试数据得到的结果值,所述非线性逻辑表达式指的是表达式中包含变量的表达式;
若所述分支语句为调用函数,则调用预设运行结果取代所述调用函数,所述预设运行结果为与所述调用函数对应的函数处理所述测试数据得到的运行结果,所述预设运行结果为二进制数和根据测试数据得到的具体数值中的至少一种;
更新所述被测程序对应路径,在ture的分支语句中执行所述被测程序的下一程序语句,将所述下一程序语句作为当前程序语句,返回所述根据所述测试数据执行所述被测程序中的当前程序语句的步骤;
当所述对应路径执行完毕时,生成测试用例;
所述检测分支语句的步骤前还包括:
判断所述程序语句是否为程序末语句;
当所述程序语句不为程序末语句时,根据所述程序语句执行结果更新符号值并进入所述检测分支语句的步骤;
当所述程序语句为程序末语句时,判断所述被测程序中的所有路径是否执行完毕;
所述当所述对应路径执行完毕时,生成测试用例的步骤之后,还包括:
判断所述被测程序中所有路径是否执行完毕。
2.根据权利要求1所述的测试用例自动生成的方法,其特征在于,所述加载被测程序的步骤前还包括:
在所述被测程序中插桩进行符号执行的函数。
3.根据权利要求1所述的测试用例自动生成的方法,其特征在于,所述接收测试数据的步骤前还包括:
接收并符号化处理原始数据,生成所述测试数据。
4.根据权利要求2所述的测试用例自动生成的方法,其特征在于,所述在所述被测程序中插桩进行符号执行的函数的步骤前还包括:
构建所述被测程序的函数调用关系图。
5.根据权利要求1所述的测试用例自动生成的方法,其特征在于,所述若所述分支语句为调用函数,则调用预设运行结果取代所述调用函数之前,还包括:
根据调用函数预设对应的函数处理模块,通过所述函数处理模块根据测试数据的不同输出对应的不同预设运行结果。
6.根据权利要求1所述的测试用例自动生成的方法,其特征在于,所述判断所述被测程序中的所有路径是否执行完毕的步骤包括:
当所述被测程序中的所有路径执行完毕时,输出所有生成的测试用例;
当所述被测程序中还有未执行路径时,依次取反其余约束条件执行所述未执行路径,判断所述未执行路径是否有解;
当所述未执行路径有解时,生成测试用例,返回所述判断被测程序中的所有路径是否执行完毕的步骤。
7.根据权利要求6所述的测试用例自动生成的方法,其特征在于,所述判断所述未执行路径是否有解包括:
采用约束解释器判断所述未执行路径是否有解。
8.一种测试用例自动生成的装置,其特征在于,包括:
初始化模块,用于加载被测程序,接收测试数据;
第一处理模块,用于根据所述测试数据执行所述被测程序中的当前程序语句,检测分支语句;
第一调用模块,用于若所述分支语句为非线性逻辑表达式,则调用预设结果值取代所述非线性逻辑表达式中的变量值,所述预设结果值为与所述非线性逻辑表达式对应程序处理所述测试数据得到的结果值,所述非线性逻辑表达式指的是表达式中包含变量的表达式;
第二调用模块,用于若所述分支语句为调用函数,则调用预设运行结果取代所述调用函数,所述预设运行结果为与所述调用函数对应的函数处理所述测试数据得到的运行结果,所述预设运行结果为二进制数和根据测试数据得到的具体数值中的至少一种;
第二处理模块,用于更新所述被测程序对应路径,在ture的分支语句中执行所述被测程序的下一程序语句,将所述下一程序语句作为当前程序语句,返回所述根据所述测试数据执行所述被测程序中的当前程序语句的步骤;
第三处理模块,用于当所述对应路径执行完毕时,生成测试用例;
所述第一处理模块还包括第一判断模块,所述第一判断模块用于判断所述程序语句是否为程序末语句,当所述程序语句不为程序末语句时,根据所述程序语句执行结果更新符号值并进入所述检测分支语句的步骤,当所述程序语句为程序末语句时,判断所述被测程序中的所有路径是否执行完毕;
所述装置还包括第二判断模块,所述第二判断模块用于判断所述被测程序中所有路径是否执行完毕。
9.一种计算机设备,包括处理器和存储器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行权利要求1至7中任一项所述方法的步骤。
10.一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行权利要求1至7中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711227912.2A CN107885663B (zh) | 2017-11-29 | 2017-11-29 | 测试用例自动生成的方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711227912.2A CN107885663B (zh) | 2017-11-29 | 2017-11-29 | 测试用例自动生成的方法、装置、计算机设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107885663A CN107885663A (zh) | 2018-04-06 |
CN107885663B true CN107885663B (zh) | 2021-01-22 |
Family
ID=61776038
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711227912.2A Active CN107885663B (zh) | 2017-11-29 | 2017-11-29 | 测试用例自动生成的方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107885663B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108763094B (zh) * | 2018-06-01 | 2021-08-10 | 百度在线网络技术(北京)有限公司 | 测试用例生成方法、装置、设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102222035A (zh) * | 2011-07-25 | 2011-10-19 | 公安部第三研究所 | 基于符号执行技术的软件行为检测系统及检测方法 |
CN103116540A (zh) * | 2013-01-23 | 2013-05-22 | 电子科技大学 | 基于全局超级块支配图的动态符号执行方法及其装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102708045B (zh) * | 2012-04-13 | 2014-07-23 | 电子科技大学 | 一种缓解路径爆炸的动态符号执行方法 |
US8856751B2 (en) * | 2012-09-20 | 2014-10-07 | Fujitsu Limited | Abstract symbolic execution for scaling symbolic execution generation and automatic test generation |
CN104536880B (zh) * | 2014-11-28 | 2017-09-15 | 南京大学 | 基于符号执行的gui程序测试用例扩增方法 |
-
2017
- 2017-11-29 CN CN201711227912.2A patent/CN107885663B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102222035A (zh) * | 2011-07-25 | 2011-10-19 | 公安部第三研究所 | 基于符号执行技术的软件行为检测系统及检测方法 |
CN103116540A (zh) * | 2013-01-23 | 2013-05-22 | 电子科技大学 | 基于全局超级块支配图的动态符号执行方法及其装置 |
Non-Patent Citations (2)
Title |
---|
动态符号执行中的外部函数调用处理;朱聪;《中国优秀硕士学位论文全文数据库信息科技辑》;20140115(第01期);正文第21-50页 * |
基于动态符号执行的测试用例生成技术研究;董齐兴;《中国优秀硕士学位论文全文数据库信息科技辑》;20141015(第10期);正文第17-44页 * |
Also Published As
Publication number | Publication date |
---|---|
CN107885663A (zh) | 2018-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109948276B (zh) | 失效分析方法、装置、设备和存储介质 | |
CN111126668A (zh) | 基于图卷积网络的Spark作业时间预测方法和装置 | |
CN112286828B (zh) | 一种区块链智能合约的测试方法和系统 | |
CN111290950B (zh) | 程序测试中测试点获取方法、装置、存储介质和设备 | |
CN111797026A (zh) | 测试用例生成方法、装置、计算机设备及存储介质 | |
CN108399125B (zh) | 自动化测试方法、装置、计算机设备和存储介质 | |
CN111240975A (zh) | 人工智能系统风险检测方法、装置、计算机设备与介质 | |
CN111897727A (zh) | 软件测试方法、装置、计算机设备及存储介质 | |
CN112363937A (zh) | 差异覆盖率测试方法、装置、计算机设备和存储介质 | |
CN107885663B (zh) | 测试用例自动生成的方法、装置、计算机设备及存储介质 | |
US11994977B2 (en) | Test case generation apparatus, test case generation method, and computer readable medium | |
Jensen et al. | Modeling the propagation of failures in software driven hardware systems to enable risk-informed design | |
CN109815127B (zh) | 自动化脚本转换方法、装置、计算机设备和存储介质 | |
CN110928761B (zh) | 需求链及其应用的系统和方法 | |
CN112379913A (zh) | 基于风险识别的软件优化方法、装置、设备及存储介质 | |
CN110633213B (zh) | 单元测试方法、装置、计算机设备和存储介质 | |
CN109542782B (zh) | 基于机器学习的nfc测试方法、装置和计算机设备 | |
Oveisi et al. | Analysis of software safety and reliability methods in cyber physical systems | |
Nouioua et al. | Predictability in probabilistic discrete event systems | |
CN111008311A (zh) | 基于邻域弱连接的复杂网络节点重要性评估方法和装置 | |
CN110865939B (zh) | 应用程序质量监测方法、装置、计算机设备和存储介质 | |
CN111566625B (zh) | 测试用例生成装置、测试用例生成方法和计算机能读取的记录介质 | |
CN111190574B (zh) | 多级联动组件的选项选择方法、装置、设备和存储介质 | |
CN113886262A (zh) | 软件自动化测试方法、装置、计算机设备和存储介质 | |
CN114218188A (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 | ||
CB02 | Change of applicant information |
Address after: 511300 No.78, west of Zhucun Avenue, Zhucun street, Zengcheng District, Guangzhou City, Guangdong Province Applicant after: CHINA ELECTRONIC PRODUCT RELIABILITY AND ENVIRONMENTAL TESTING Research Institute Address before: 510610 No. 110 Zhuang Road, Tianhe District, Guangdong, Guangzhou, Dongguan Applicant before: CHINA ELECTRONIC PRODUCT RELIABILITY AND ENVIRONMENTAL TESTING Research Institute |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |