一种自动生成字符串类型测试用例的方法

文档序号:9471291阅读:1181来源:国知局
一种自动生成字符串类型测试用例的方法
【技术领域】
[0001] 本发明涉及软件测试领域中的测试用例自动生成技术,具体是一种自动生成字符 串类型测试用例的方法。
【背景技术】
[0002] 随着互联网时代的来临,数据库、网络协议等软件得到广泛应用,字符串类型经常 作为基本的数据类型使用,并且通过标准库中的字符串函数进行操作。
[0003] 面向路径的测试用例自动生成技术中,通常的方法是利用符号执行技术得到路径 上输入变量的约束,即符号表达式,然后利用约束求解器得到满足路径约束的变量取值。
[0004] 1976年,JamesC.King等人提出符号执行技术用于判断程序的正确性。
[0005] 符号执行技术是指:使用符号执行分析程序时,该程序会使用符号值作为输入,而 非一般执行程序时使用的具体值。在达到目标代码时,分析器可以得到相应的路径约束,即 输出符号表达式,然后通过约束求解器来得到可以触发目标代码的具体值,即通过对符号 表达式的分析对程序的正确性进行判定。
[0006] 现有技术中,测试用例自动生成的工具无法自动对字符串类型生成满足约束的测 试用例。由于字符串类型是一种常用的复杂数据类型,具有结构属性和数值属性,并且常常 通过字符串函数调用的形式操作,字符串函数操作导致字符串的约束是非线性的约束,因 此现有的测试用例自动生成工具无法支持字符串的测试用例自动生成。

【发明内容】

[0007] 本发明的目的是为了解决现有的测试用例自动生成工具无法支持字符串的测试 用例自动生成,提出了一种自动生成字符串类型测试用例的方法,具体包括如下步骤:
[0008] 步骤一、针对源程序的执行路径,对每条执行路径的每个语句分别使用符号执行 技术进行约束提取,得到每个语句的字符串约束;
[0009] 步骤二、取当前语句的字符串约束,判断是否包含字符串函数,如果包含,则执行 步骤三;否则执行步骤四;当前语句初始值为第一个语句;
[0010] 步骤三、根据字符串函数在路径中所表示的语义,使用中间变量以及原子函数的 组合来表示该函数;
[0011] 首先、生成字符串类型的数据结构符号,其结构符号包含两个属性:
[0012] 1)是字符成员属性,以"下标"_ "字符"为键值对的集合;2)是长度属性;
[0013] 然后、定义三个原子函数:
[0014] ⑴访问字符串str中下标为i的一个成员,原子函数为StrAtomic1 (str,i),参 数符号为:str和i;
[0015] (2)同时访问字符串str中下标由down至up的|up-down+lI个成员,原子函数 为:
[0016]StrAtomic2 (str, down, up),参数符号为:str, down, up ;
[0017] (3)同时访问Str中n个不确定位置的成员,原子函数为:StrAtomic3 (str,n),参 数符号为:str,n;
[0018] 中间变量指代三种原子函数中除了str之外的参数变量的位置,均为数值类型。
[0019] 步骤四、顺序选取下一语句返回步骤二,直至当前语句是尾语句,输出所有字符串 约束,并为中间变量的所有数值型符号,生成初始值域;
[0020] 步骤五、判断当前数值型符号是否为原子函数的参数,如果是转到步骤六;否则转 到步骤十;
[0021] 当前数值型符号的初始值是从步骤四中的所有数值型符号中任选一个。
[0022] 步骤六、为当前原子函数的参数在初始值域中选值作为该参数确定值,执行步骤 七;
[0023] 具体为:若当前原子函数是第一种原子函数StrAtomic1 (str,i),则为第二个参数 i在值域中选择一个值,执行结束;
[0024]若当前原子函数是第二种原子函数StrAtomic2 (str,down,up),贝Ij依次为第二、三 个参数
[0025] down,up在其值域中各选择一个值,执行结束;
[0026] 若当前原子函数是第三种原子函数StrAtomic3 (str,n),则为第二个参数n在其值 域中选择一个值,执行结束;
[0027] 如果值域中的值都被选取过并且该参数不是首个选取的数值型符号,则选择前一 个数值型符号作为当前符号,并转到步骤五;如果值域中的值都被选取过并且该参数是首 个选取的数值型符号,则算法失败,执行结束。
[0028] 步骤七、根据原子函数的参数确定值,对原子函数进行解释,如果解释失败,则说 明参数取值错误,转到执行步骤八;否则执行步骤九;
[0029] 具体解释过程为:若当前选择的是第一种原子函数StrAtomic1 (str,i)的参数 符号i,在i的值域中选择一个值Vi,若str的字符成员集合中不存在下标是Vi的成 员,则新建下标为Vi的成员;否则取str中位置是Vi的成员;然后对于路径约束中的 StrAtomic1 (str,i)替换为str中位置Vi的成员,执行结束;
[0030] 若当前选择的是第二种原子函数StrAtomic2 (str,down,up),参数符号为 down,up;
[0031] 在down,up的取值域中分别选择值Vdown,Vup,若Str的字符成员集合中不存在下 标是Vdown至Vup的范围中的成员,则新建相应位置的成员;否则取已经存在的成员,并且 对于路径约束中的StrAtomic2(str,down,up)替换为str中位置在Vdown至Vup的范围中 的每一个成员,执行结束;
[0032] 若当前选择的是第三种原子函数StrAtomic3 (str,n)的参数符号n,在n的 取值域中选择值Vn,然后生成Vn个str的字符成员,对应的下标分别为indexvl,ind exv2,…indexvn,对于路径约束中的StrAtomic2 (str,down,up)替换为str中位置在 indexvl,indexv2, . . .indexvn的每一个成员,执行结束;
[0033] 原子函数解释过程中,在字符串的数据结构中新建的字符成员如果与现有的字符 成员冲突,或者数据结构的长度属性不符合要求,则原子函数解释失败。
[0034] 步骤八、参数取值错误后,根据步骤六中选择的参数符号和参数确定值增加新的 约束:当前参数符号不能取当前参数确定值;并且将原子函数解释失败导致的改变恢复至 原来状态,重新转到步骤六;
[0035] 步骤九、使用区间运算方法,对符号的取值区间进行缩减,缩减成功后转到步骤五 继续处理下一个字符串约束;否则,返回步骤八;直至对当前路径约束中对所有字符串处 理完毕,转到步骤十一;
[0036] 步骤十、在当前数值型符号的值域中选取一个值作为其确定值;转到步骤九。
[0037] 如果当前符号值域中的值都被选取过并且当前符号不是首个选取的数值型符号, 则回到前一个选值的数值型符号作为当前符号,并转到步骤五;如果当前符号值域的所有 值都被选过并且当前符号是首个选取的符号,则算法失败,执行结束。
[0038] 步骤十一、若所有字符串约束的参数符号都得到了确定值,则结合变量和符号的 关系组成测试用例,测试用例生成结束;
[0039] 本发明的优点与积极效果在于:
[0040] (1) -种自动生成字符串类型测试用例的方法,提出的使用三种原子函数来表示 被测程序中出现的字符串函数的方法,可以应用于处理各种字符串函数。
[0041] (2) -种自动生成字符串类型测试用例的方法,能够自动生成字符串类型的测试 用例,能够减少人工测试耗费的代价,提高软件测试的自动化程度。
【附图说明】
[0042] 图1为本发明一种自动生成字符串类型测试用例的方法流程图;
【具体实施方式】
[0043] 下面将结合附图和实施例对本发明作进一步的详细说明。
[0044] 一种自动生成字符串类型测试用例的方法,能够对包含字符串类型的输入参数以 及含有字符串函数调用的C语言代码进行测试用例自动生成,提高软件测试的自动化程 度。
[0045] -种自动生成字符串类型测试用例的方法,首先,使用一个字符数组和一个长度 属性作为字符串类型的数据模型,定义了三个原子函数,使用三个原子函数的组合表示C 语言标准库中的字符串函数,然后,利用符号执行技术得到一条程序路径的约束提取过程 中,对于字符串和字符串函数进行约束提取,得到包含原子函数表示的字符串约束;最后, 针对源程序的执行路径,对每条路径的字符串约束进行约束求解,约束求解过程中,根据原 子函数的参数的确定值,对于原子函数进行解释得到字符串的结构和取值,直到得到满足 路径所有约束的测试用例。
[0046] 具体步骤如图1所示,包括:
[0047] 步骤一、针对一段源程序的多条执行路径,对每条执行路径的每个语句分别使用 符号执行技术进行约束提取,得到每个语句的符号表达式;
[0048] 源程序中的可能执行路径,又名语句序列;
[0049] 步骤二、判断当前语句的符号表达式是否包含字符串函数,如果包含,则执行步骤 三;否则执行步骤四;当前语句初始值为第一个语句;
[0050] 步骤三、对于字符串函数,根据其在路径中所表示的语义,使用中间变量以及原子 函数的组合进行表示;
[0051 ] 对于字符串函数中的字符串类型参数,生成表示字符串
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1