一种基于四值逻辑的位运算测试用例生成方法_2

文档序号:9288376阅读:来源:国知局
结果为1,当y为1则x~y的结果为0,当y为T则x~y的结果为T;
[0062]x的值为T时,y从丄、0、1或T中选取,当y为丄,则x~y的结果为丄,否则当y为 0、1或T中任一值时,x~y的结果为T。
[0063] (4)~x:x的值为丄时,~x为丄;x的值为0时,~x为1 ;x的值为1时,~x为 〇;x的值为T时,~x为T。
[0064] 如图3 (b)所示,四值逻辑运算的逆运算方法如下:
[0065] (5)z&\:z的值为丄时,y从丄、0、1或T中选取,当y为丄,则z&\的结果为T, 否则当y为〇、1或T中任一值时,z& \的结果为丄;
[0066]z的值为0时,y从丄、0、1或T中选取,当y为丄,则z& \的结果为丄,当y为0 则z& \的结果为T,当y为1则z& \的结果为0,当y为T则z& \的结果为T;
[0067]z的值为1时,y从丄、0、1或T中选取,当y为丄,则z& \的结果为丄,当y为0 则z& \的结果为丄,当y为1则z& \的结果为1,当y为T则z& \的结果为1 ;
[0068] z的值为T时,y从丄、0、1或T中选取,当y为丄,则z& \的结果为丄,否则当y 为0、1或T中任一值时,z& \的结果为T。
[0069] (6)z|\:z的值为丄时,y从丄、0、1或T中选取,当y为丄,则z|\的结果为T, 否则,当y为〇、1或T中任一值时,z| \的结果为丄;
[0070]z的值为0时,y从丄、0、1或T中选取,当y为丄,则z|\的结果为丄,当y为0, 则z| \的结果为0,当y为1,则z| \的结果为丄,当y为T,则z| \的结果为0 ;
[0071]z的值为1时,y从丄、0、1或T中选取,当y为丄,则z|\的结果为丄,当y为0, 则z| \的结果为1,当y为1,则z| \的结果为T,当y为T,则z| \的结果为T;
[0072] z的值为T时,y从丄、0、1或T中选取,当y为丄,则z| \的结果为丄,否则当y 为0、1或T中任一值时,z| \的结果为T。
[0073] (7)z\ :z的值为丄时,y从丄、0、1或T中选取,当y为丄,则z\的结果为T,否 则当y为〇、1或T中任一值时,z\的结果为丄;
[0074] z的值为0时,y从丄、0、1或T中选取,当y为丄,则z\的结果为丄;当y为0则 z\的结果为0,当y为1,则z\的结果为1 ;当y为T,则z\的结果为T;
[0075]z的值为1时,y从丄、0、1或T中选取,当y为丄,则z\的结果为丄;当y为0则 z\的结果为1,当y为1,则z\的结果为0 ;当y为T,则z\的结果为T;
[0076]z的值为T时,y为丄则z\的结果为丄;否则当y为0、1或T中任一值时,z\ 的结果为T。
[0077] (8)~zS当z的值为丄时,~z为丄;当z的值为0时,~z为1 ;当z的值为1 时,~z为0;当z的值为T时,~z为T。
[0078] 步骤二、将位运算约束分解为逻辑运算约束;
[0079] 位运算约束的形式有两种:①一元约束:~x=y;②二元约束:xRy=z;其中, x、y、z是整数;将位运算约束中的整型变量表示成二进制形式,则二进制形式中的每一位 对应一个逻辑运算约束,符号化描述如下:
[0080] ~x=y-~X02. ? ?X;. ? ?xn=y? ?y;. ? ?yn-~x!=y厂~x2=y2. ? ? ~ ~x; =yi. ?xn=yn,其中
[0081] Xl,yiG{0,1};
[0082] xRy=z^ . .x;. . .xnRy1y2. . .y;. . .yn=z. .z;. . .zn^-
[0083] XjRy^z:x2Ry2=z2 ? ? ?XjRy^zi. . .xnRyn=zn
[0084] 其中,XiJoZiG{0,1}
[0085] 如果整数用32位二进制数表示,则n= 32 ;
[0086] 步骤三、将逻辑运算约束对应为约束满足问题;
[0087]约束满足问题表示成三元组〈X,D,C> ;X是变量集,D是与变量集对应的值域集,C是变量的约束集;
[0088] 比如测试用例生成问题为:a、b、c都是小于等于100的正整数,约束为a+b=c;
[0089] 则约束满足问题表示成三元组〈X,D,C> ;其中变量集X= {a、b、c};值域集D= {Da =[1,100],Db= [1,100],Dc= [1,100]};约束集C= {a+b=c};
[0090] 步骤四、依据四值逻辑运算和逆运算的方法使用搜索算法求解逻辑运算约束;
[0091] 在搜索框架下,将测试用例生成问题转化为约束满足问题后,使用搜索算法求解: 应用四值逻辑运算和逆运算的方法计算变量集的值域,以减小搜索空间;
[0092] 步骤401、应用四值逻辑运算和逆运算的方法对约束集C进行抽象计算;得到变量 集X中各个子集的抽象结果;
[0093] 变量集X中的元素即为子集,用Xl表示基于四值逻辑的位运算生成的测试用例的 二进制形式。
[0094] 步骤402、从变量集X的抽象结果中选择一个子集变量Xl进行处理;
[0095] 步骤403、选定子集变量^后,从对应的值域集D中选择一个子集D1;
[0096] 步骤404、将<Xl,DA代入约束集C,如果发生矛盾,则从值域集D中重新选择子集 D1;否则,继续选择下一组<x1+1,D1+1>,直至变量集X中所有变量都赋值。
[0097] 步骤405、变量集X中所有变量都赋值且满足约束,求解成功。
[0098] 变量集X的一个赋值如果是约束求解问题的一个解,满足当且仅当该赋值包含所 有变量且满足所有约束。
[0099] 比如,上述约束集C= {a+b=c}中,变量集X的一组赋值{a=l、b= 2、c= 3} 为约束满足问题〈X,D,C>的一个解,而变量集X的另一组赋值{a= 1、b= 1、c= 1}则不 是约束满足问题〈X,D,C>的一个解。
[0100] 步骤五、将逻辑运算约束的解合成为位运算约束的解,该位运算约束的解为生成 的测试用例。
[0101] 本发明假定约束满足问题为:X&0110= 〇〇〇〇,位运算约束中的整数X用四位二进 制表示,判断整数X的中间两位是否为0 ;
[0102] 对应的程序代码如下:
[0103] 如果整数x的中间两位是0,则输出"ok",否则输出"error" ;
[0104] 0:Voidf(intx) {
[0105] 1:if(x&OllO== 0000)
[0106] 2:print( "ok");
[0107] 3:else
[0108] 4:print( "error")
[0109] 5 :}
[0110] 每一行代码前的数字表示代码的行号,用于标识执行路径。如上代码所示,如果x 的中间两位是〇,则执行路径为0-1-2-5,该执行路径生成测试用例的过程如下:
[0111] 首先得到执行路径0-1-2-5对应的约束:x&0110 = 0000 ;
[0112] 然后应用步骤二将位运算约束分解为逻辑运算约束,
[0113] 约束分解:将整数x表示成二进制形式,即x= ,则原约束X&0110 = 0000 变成XiX^Xi&OllO= 0000 ;
[0114] 再按位拆分为四个逻辑运算约束,Xi&0 = 0~x2&l= 0~x3&l= 0~x4&0 = 0 ;
[0115] 应用步骤三将逻辑运算约束对应为约束满足问题;
[0116] 则对应的约束满足问题<X,D,C>为:变量集值域集 D=|D. =7\Dv> =7',Dv =7\ZJV| = ={x^O = 0, x2&l = 0, x3&l = 0, x4&0 = 〇}
[0117] 基于搜索框架使用搜索算法对上述约束满足问题进行求解:
[0118] 步骤四应用四值逻辑运算和逆运算的方法对约束集进行抽象计算:
[0119] (1)已知Xi&0 = 0求Xi,应用z& \的运算方法%= 0& 4 =T ;
[0120] (2)已知 x2&l = 0 求 x2,应用 z& \ 的运算方法:x2= 0& H = 0 ;
[0121] (3)已知 x3&l = 0 求 x3,应用 z& \ 的运算方法:x3= 0& H = 0 ;
[0122] (4)已知 x4&0 = 0 求 x4,应用 z&iy 的运算方法:x4= 0& 4 =T ;
[0123]抽象计算的结果为:Xi=T,x2= 0,x3= 0,x4=T;
[0124] 从变量集X中选择一个子集变量Xi进行处理;同时从对应的值域集D中选择一个 子集Di,将<Xl,D,代入约束集C,如果发生矛盾,则从值域集D中重新选择子集D1;否则,继 续选择下一组<x1+1,D1+1>,直至变量集X中所有变量都赋值。
[0125] 如果选择变量Xi,再从Xl值域T中选择一个值,比如x1;
[0126] 如果选择变量x2,再从x2值域0中选择一个值,只有一种
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1