[发明专利]一种自动生成字符串类型测试用例的方法有效
| 申请号: | 201510628462.2 | 申请日: | 2015-09-28 |
| 公开(公告)号: | CN105224455B | 公开(公告)日: | 2018-01-09 |
| 发明(设计)人: | 王雅文;张旭舟;宫云战;金大海;黄俊飞 | 申请(专利权)人: | 北京邮电大学 |
| 主分类号: | G06F11/36 | 分类号: | G06F11/36 |
| 代理公司: | 北京永创新实专利事务所11121 | 代理人: | 赵文利 |
| 地址: | 100876 *** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 自动 生成 字符串 类型 测试 方法 | ||
1.一种自动生成字符串类型测试用例的方法,其特征在于,包括如下步骤:
步骤一、针对源程序的执行路径,对每条执行路径的每个语句分别使用符号执行技术进行约束提取,得到每个语句的字符串约束;
步骤二、取当前语句的字符串约束,判断是否包含字符串函数,如果包含,则执行步骤三;否则执行步骤四;当前语句初始值为第一个语句;
步骤三、根据字符串函数在路径中所表示的语义,使用中间变量以及原子函数的组合来表示该函数;
原子函数包括3个,分别为:
(1)访问字符串str中下标为i的一个成员,原子函数为strAtomic1(str,i),参数符号为:str和i;
(2)同时访问字符串str中下标由down至up的|up-down+1|个成员,原子函数为:strAtomic2(str,down,up),参数符号为:str,down,up;
(3)同时访问str中n个不确定位置的成员,原子函数为:strAtomic3(str,n),参数符号为:str,n;
中间变量指在三种原子函数中除了str之外的参数变量的位置,均为数值类型;
步骤四、顺序选取下一语句返回步骤二,直至当前语句是尾语句,输出所有字符串约束,并为中间变量的所有数值型符号,生成初始值域;
步骤五、判断当前数值型符号是否为原子函数的参数,如果是转到步骤六;否则转到步骤十;
步骤六、为当前原子函数的参数在初始值域中选值作为该参数确定值,执行步骤七;
步骤七、根据原子函数的参数确定值,对原子函数进行解释,如果解释失败,则说明参数取值错误,转到执行步骤八;否则执行步骤九;
具体解释过程为:若当前选择的是第一种原子函数strAtomic1(str,i)的参数符号i,在i的值域中选择一个值Vi,若str的字符成员集合中不存在下标是Vi的成员,则新建下标为Vi的成员;否则取str中位置是Vi的成员;然后对于路径约束中的strAtomic1(str,i)替换为str中位置Vi的成员,执行结束;
若当前选择的是第二种原子函数strAtomic2(str,down,up)的参数符号down和up,在down和up的值域中分别选择值Vdown和Vup,若str的字符成员集合中不存在下标是Vdown至Vup的范围中的成员,则新建相应位置的成员;否则取已经存在的成员,并且对于路径约束中的strAtomic2(str,down,up)替换为str中位置在Vdown至Vup的范围中的成员,执行结束;
若当前选择的是第三种原子函数strAtomic3(str,n)的参数符号n,在n的值域中选择值Vn,然后生成Vn个str的字符成员,对应的下标分别为indexv1,indexv2,...indexvn,对于路径约束中的strAtomic2(str,down,up)替换为str中位置在indexv1,indexv2,...indexvn的每一个成员,执行结束;
原子函数解释过程中,在字符串的数据结构中新建的字符成员如果与现有的字符成员冲突,或者数据结构的长度属性不符合要求,则原子函数解释失败;
步骤八、参数取值错误后,根据步骤六中选择的参数符号和参数确定值增加新的约束:当前参数符号不能取当前参数确定值;并且将原子函数解释失败导致的改变恢复至原来状态,重新转到步骤六;
步骤九、使用区间运算方法,对参数符号的取值区间进行缩减,缩减成功后转到步骤五继续处理下一个字符串约束;否则,返回步骤八;直至对当前路径约束中对所有字符串处理完毕,转到步骤十一;
步骤十、在当前数值型符号的值域中选取一个值作为其确定值;转到步骤九;
步骤十一、若所有字符串约束的参数符号都得到了确定值,则结合变量和符号的关系组成测试用例,测试用例生成结束。
2.如权利要求1所述的一种自动生成字符串类型测试用例的方法,其特征在于,所述的字符串类型使用的数据结构符号包含两个属性:1)是字符成员属性,以“下标”_“字符”为键值对的集合;2)是长度属性。
3.如权利要求1所述的一种自动生成字符串类型测试用例的方法,其特征在于,所述的步骤六具体为:判断当前原子函数是否为第一种原子函数strAtomic1(str,i),如果是,则为第二个参数i在值域中选择一个值,执行结束;否则判断当前原子函数是否为第二种原子函数strAtomic2(str,down,up),如果是,依次为第二、三个参数down、up在其值域中各选择一个值,执行结束;否则,当前原子函数是第三种原子函数strAtomic3(str,n),为第二个参数n在其值域中选择一个值,执行结束。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京邮电大学,未经北京邮电大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510628462.2/1.html,转载请声明来源钻瓜专利网。





