因果图法适用性分析举例

我从《软件测试的艺术》一书中摘取了一个作者精心构造的代码片段。作者用这个代码片段做逻辑覆盖测试讲解的,我用它来做黑盒测试分析。

public void foo(int A,int B,int X) {

       if(A>1 && B==0) {

              X=X/A;

       }

       if(A==2 || X>1) {

              X=X+1;

       }

}

等价类划分法难以适用,原因如下:

  1. 两条语句都可能会修改X的值。这导致两条if语句产生耦合性。测试时需要一起考虑这两条if语句。黑盒测试时要进行组合。白盒测试时需要进行路径覆盖。
  2. 第一条语句修改了X。但是之后,X又用于第二个判定中。这也导致两条if语句产生了耦合性。

如果程序如下:

public void foo(int A,int B,int C,int X,int Y) {

       if(A>1 && B==0) {

              X=X/A;

       }

       if(A==2 || C>1) {

              Y=Y+1;

       }

}

那么就可以将两条if语句分别进行测试。即黑盒测试时做等价类覆盖。白盒测试时做判定条件覆盖。

3. A用于两个判定中,并且两条语句都是对X进行修改。所以需要综合考虑A所在的两个条件的要求,来划分A的等价类。

比如下面的程序:

public void foo(int A,int X,int Y) {

       if(A>1) {

              X=X/A;

       }

       if(A==2) {

              X=X+1;

       }

}

可以划分出三个等价类。比如取值为2、3、0。

但是原来的程序中,因为A都只是判定中一个条件。还需要结合B或者X来决定判定的结果。这是多个输入的共同作用对输出产生影响。所以特定的A的等价类,不一定能对程序输出产生决定性影响。

原来的程序,适合使用因果图来进行案例设计。但是也许你不会画因果图,或者不想画因果图。没有关系,因为这个程序片段毕竟很短,很简单。直观来看,程序处理可能方式可能4种情况。即两条语句都执行、两条语句都不执行、只执行第一条语句、只执行第二条语句。这四种情况都要覆盖到。

但是并不能保证满足改进的判定条件覆盖,所以仍然会遗漏缺陷。需要补充用例,使之满足改进的判定条件覆盖。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值