试用期之覆盖率

文章详细介绍了软件测试中的不同覆盖率概念,如语句覆盖率、判定覆盖率、条件覆盖率、判定-条件覆盖率和条件组合覆盖率,强调了每个覆盖率度量的局限性,并指出条件组合+路径覆盖是较为全面的测试组合。同时,通过实例解释了各种覆盖率的计算方法及其在测试用例设计中的应用。
摘要由CSDN通过智能技术生成

覆盖率

覆盖率计算: 覆盖率 = 至少被执行一次的 i t e m 数 i t e m 的总数 \text{覆盖率}=\frac{至少被执行一次的item数}{item的总数} 覆盖率=item的总数至少被执行一次的item

  • 白盒覆盖率(语句、判定、条件、路径)
  • 灰盒覆盖率(接口(函数))
  • 黑盒覆盖率(功能)

测试用例不能一味追求覆盖率,存在测试成本的问题

白盒覆盖率

语句覆盖

代码每一行的覆盖情况

  • 语句覆盖率 = 至少被执行一次的语句数量 可执行的语句总数 语句覆盖率=\frac{至少被执行一次的语句数量}{可执行的语句总数} 语句覆盖率=可执行的语句总数至少被执行一次的语句数量

  • 举例:

    public static void main(String[] str){
        if(a>1 && b=0){
            c = c / a;
        }
    	if(a=0 || x>1){
            c = c + 1;
        }
    }
    

    a = 2 b = 0 x = 3 a=2\\b=0\\x=3 a=2b=0x=3,语句覆盖率为 100 % 100\% 100% a = 2 b = 1 x = 3 a=2\\b=1\\x=3 a=2b=1x=3,语句覆盖率为 75 % 75\% 75%(第二个判断题没有执行)

  • 思考:

    public static void main(String[] str){
        if(a>1 || b=0){
            c = c / a;
        }
    	if(a=0 && x>1){
            c = c + 1;
        }
    }
    

    a = 2 b = 0 x = 3 a=2\\b=0\\x=3 a=2b=0x=3,语句覆盖率同样为 100 % 100\% 100%但是两个判断语句的逻辑已经不一样了,所以无法测出此类错误。

判定覆盖率

if-else switch-case判断语句的取真分支和取假分支

  • 判定覆盖率 = 判定结果被评价的次数 判定结果的总数 判定覆盖率=\frac{判定结果被评价的次数}{判定结果的总数} 判定覆盖率=判定结果的总数判定结果被评价的次数

  • 举例:

    public static void main(String[] str){
        if(a>1 && b=0){
            c = c / a;
        }
    	if(a=0 || x>1){
            c = c + 1;
        }
    }
    

    a = 2 b = 0 x = 3 a=2\\b=0\\x=3 a=2b=0x=3 a = 1 b = 0 x = 1 a=1\\b=0\\x=1 a=1b=0x=1,判定覆盖率为 100 % 100\% 100%(4个判断都走到了)

  • 思考:

    public static void main(String[] str){
        if(a>1 && b=0){
            c = c / a;
        }
    	if(a=0 || x<1){
            c = c + 1;
        }
    }
    

    a = 2 b = 0 x = 3 a=2\\b=0\\x=3 a=2b=0x=3 a = 1 b = 0 x = 1 a=1\\b=0\\x=1 a=1b=0x=1,判定覆盖率为 100 % 100\% 100%(本应该是x>1但x<1,此错误没有识别出来)

条件覆盖率

所有判断语句中的每个条件的可能取值(一个判断可能有多个条件)

  • 条件覆盖率 = 条件操作数值至少被评价一次的数量 条件操作数的总数 条件覆盖率=\frac{条件操作数值至少被评价一次的数量}{条件操作数的总数} 条件覆盖率=条件操作数的总数条件操作数值至少被评价一次的数量

  • 举例:

    public static void main(String[] str){
        if(a>1 && b=0){
            c = c / a;
        }
    	if(a=0 || x>1){
            c = c + 1;
        }
    }
    

1: a>1 2: b=0 3: a=0 4: x>1

用例a b x覆盖条件
case12 0 3 T 1 T_1 T1 T 2 T_2 T2 T 3 T_3 T3 T 4 T_4 T4
case21 0 1 F 1 F_1 F1 T 2 T_2 T2 F 3 F_3 F3 F 4 F_4 F4
case32 1 1 T 1 T_1 T1 F 2 F_2 F2 T 1 T_1 T1 F 4 F_4 F4

条件覆盖率 100 % 100\% 100%就表示为测试用例包括 T 1 − T 4 T_1-T_4 T1T4 F 1 − F 4 F_1-F_4 F1F4

  • 思考:

    用例a b x覆盖条件
    case11 0 3 T 1 T_1 T1 T 2 T_2 T2 T 3 T_3 T3 T 4 T_4 T4
    case22 1 1 F 1 F_1 F1 T 2 T_2 T2 F 3 F_3 F3 F 4 F_4 F4

    条件覆盖率 100 % 100\% 100%,但是判断覆盖率只有 50 % 50\% 50%

判定-条件覆盖率

设计足够多的用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断本省的所有可能判断结果至少执行一次。

  • 判定条件覆盖率 = 条件操作数值或判定结果至少被评价一次的数量 条件操作数的总数 + 判定结果总数 判定条件覆盖率=\frac{条件操作数值或判定结果至少被评价一次的数量}{条件操作数的总数+判定结果总数} 判定条件覆盖率=条件操作数的总数+判定结果总数条件操作数值或判定结果至少被评价一次的数量

  • 举例:

    public static void main(String[] str){
        if(a>1 && b=0){
            c = c / a;
        }
    	if(a=0 || x>1){
            c = c + 1;
        }
    }
    

    a = 2 b = 0 x = 3 a=2\\b=0\\x=3 a=2b=0x=3,判定: 50 % 50\% 50%,条件覆盖率: 50 % 50\% 50%,判断条件覆盖率: 2 + 4 4 + 8 = 50 % \frac{2+4}{4+8}=50\% 4+82+4=50%

    a = 0 b = 0 x = 1 a=0\\b=0\\x=1 a=0b=0x=1,判定: 50 % 50\% 50%,条件覆盖率: 50 % 50\% 50%,判断条件覆盖率: 2 + 4 4 + 8 = 50 % \frac{2+4}{4+8}=50\% 4+82+4=50%

    结合两个用例:判定: 75 % 75\% 75%,条件覆盖率: 100 % 100\% 100%,判断条件覆盖率: 3 + 8 4 + 8 = 11 12 \frac{3+8}{4+8}=\frac{11}{12} 4+83+8=1211

条件组合覆盖率

判定-条件不存在组合所有无法识别and和or

  • 条件组合覆盖率 = 条件组合至少被评价一次的数量 条件组合的总数 条件组合覆盖率=\frac{条件组合至少被评价一次的数量}{条件组合的总数} 条件组合覆盖率=条件组合的总数条件组合至少被评价一次的数量

  • 举例:

    public static void main(String[] str){
        if(a>1 && b=0){
            c = c / a;
        }
    	if(a=0 || x>1){
            c = c + 1;
        }
    }
    

    一个两个判定四个条件,第一个判定的条件组合有4种情况:a>1 b=0、a<1 b=0、a<1 b不等于0、a>1 b不等于0

    用例a b x覆盖条件判定路径
    case12 0 3 T 1 T_1 T1 T 2 T_2 T2 T 3 T_3 T3 T 4 T_4 T4T T
    case22 1 1 T 1 T_1 T1 F 2 F_2 F2 T 1 T_1 T1 F 4 F_4 F4F F
    case31 0 3 F 1 F_1 F1 T 2 T_2 T2 F 1 F_1 F1 T 4 T_4 T4F T
    case41 1 1 F 1 F_1 F1 F 2 F_2 F2 F 1 F_1 F1 F 4 F_4 F4F F

    条件组合覆盖率为100%,但发现T F 路径没有覆盖

路径覆盖率

  • 路径覆盖率 = 至少被执行到一次的路径数 路径总数 路径覆盖率=\frac{至少被执行到一次的路径数}{路径总数} 路径覆盖率=路径总数至少被执行到一次的路径数

总结

每种覆盖率度量都有自己的局限性,因此要把各种覆盖率组合起来对测试进行度量。

目前感觉条件组合+路径覆盖是最为全面的组合

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值