白盒测试-覆盖测试(六种覆盖方法)

测试覆盖率

测试覆盖率:用于确定测试所执行到的覆盖项的百分比。其中的覆盖项是指作为测试基础的一个入口或属性,比如语句、分支、条件等。测试覆盖率可以表示出测试的充分性,在测试分析报告中可以作为量化指标的依据,测试覆盖率越高效果越好。单覆盖率不是目标,只是一种手段。

测试覆盖率包括功能点覆盖率和结构覆盖率。
功能点覆盖率大致用于表示软件已经实现的功能与软件需要实现的功能之间的比例关系。
结构覆盖率包括语句覆盖率、分支覆盖率、循环覆盖率、路径覆盖率等。

逻辑覆盖法

  • 根据覆盖目标的不同,逻辑覆盖又可以分为语句覆盖、判定覆盖、条件覆盖、判定\条件覆盖、组合覆盖和路径覆盖。
  • 语句覆盖:选择足够多的测试用例,使得程序中的每个可执行语句至少执行一次。
  • 判定覆盖:通过执行足够的测试用例,使得程序中的每个判定至少都获得一次“真”值和“假”值,也就是使程序中的每个取“真”分支和取“假”分支至少均经历一次,也称为“分支覆盖”。
  • 条件覆盖:设计足够多的测试用例,使得程序中每个判定包含的每个条件的可能取值(真/假)都至少满足一次。
  • 判定/条件覆盖:设计足够多的测试用例,使得程序中每个判定包含的每个条件的所有情况(真/假)至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次。----满足判定/条件覆盖的测试用例一定同事满足判定覆盖和条件覆盖。
  • 组合覆盖:通过执行足够的测试用例,使得程序中每个判定的所有可能的条件取值组合都至少出现一次。----满足组合覆盖的测试用例一定满足判定覆盖、条件覆盖和判定/条件覆盖。
  • 路径覆盖:设计足够多的测试用例,要求覆盖程序中所有可能的路径。

例题:

针对以下代码设计测试用例分别进行语句覆盖、判定覆盖、条件覆盖、判定\条件覆盖、组合覆盖和路径覆盖。

void DoWork(int x, int y, int z) {int k = 0,j = 0;if((x > 3) && (z < 10)) {k = x * y - 1;j = (int) Math.sqrt(k);}if((x == 4) || (y > 5)) {j = x * y + 10;}j = j%3;}

语句覆盖:

要求对DoWork函数进行语句覆盖,只需要设计一个测试用例就可以覆盖程序中所有可执行语句。例如测试用例:x = 4 , y = 5 , z = 5,程序执行的路径为abd

  • 分析:语句覆盖可以保证程序中每个语句都得到执行,但是不能够发现判定中录屏及运算的错误,即它并不是一种充分的检验方法。例如在第一个判定((x>3)&&(z<10))中把&&错误的写成了||,这是该测试用例仍能够使得程序按照路径abd执行,所以语句覆盖是最弱的逻辑覆盖准则。

判定覆盖

要求对DoWork函数进行判断覆盖,需要设计两个测试用例。
测试用例1:x = 4 , y = 5 , z = 5,程序执行的路径为abd;
测试用例2:x = 2 , y = 5 , z = 5,程序执行的路径为ace;

  • 分析:可以看出,这两个测试用例不仅满足了判定覆盖,同时更满足了语句覆盖。虽然确实判定覆盖比语句覆盖更强一些,但是依然无法确定判断条件内部的错误。如果把第二个判定条件的y>5错写成y<5,则以上测试用例依然能够执行不影响结果,因此判定覆盖测试依然不能保证判断条件完全正确。
  • 以上的每一种判定只有两种可能的情况,而也有可能出现多出口判断的情况,比如case语句,则一个判定可以有多种可能的结果,而判定覆盖就是就是使得每一个判定获得每一种可能的结果至少一次。

条件覆盖

对于Dowork函数各个判定的各个条件取值加以标记:
x>3 真值为T1,假值为-T1 ; z<10 真值为T2,假值为-T2
x==4 真值为T3,假值为-T3 ; y>5 真值为T4,假值为-T4
要求对DoWork函数进行条件覆盖,即要使上述四个条件可能产生的8种情况至少满足一次,设计以下两条用例:
测试用例1:x = 4 , y = 5 , z = 5,执行路径abd,覆盖条件T1、T2、T3、T4,覆盖分支bd
测试用例2:x = 2 , y = 5 , z = 15,执行路径ace,覆盖条件-T1、-T2、-T3、-T4,覆盖分支ce

  • 分析:在实际程序代码中,一个判定中通常都包含若干条件。条件覆盖的目的是设计若干测试用例,在执行被测程序后,要使每个判定中每个条件的可能值至少满足一次。上面这组测试用例不仅覆盖了4个条件的所有8种情况,而且将两个判定的分支都覆盖到了,所以也达到了判定覆盖。
  • 说明:以上测试用例同时满足了判定、条件覆盖,但并不是条件覆盖都能满足判定覆盖。比如以下测试用例:
    测试用例3:x = 2 , y = 6 , z = 5 , 执行路径:acd,覆盖条件:-T1、T2、-T3、T4,覆盖分支cd
    测试用例4:x = 4 , y = 5 , z = 15,执行路径acd,覆盖条件T1、-T2、T3、-T4,覆盖分支:cd

判定/条件覆盖

依然为DoWork函数哥哥判定哥哥条件取值加以标记;
要求对DoWork函数进行判定/条件覆盖,即要使得测试用例能够覆盖上述四个条件可能产生的8种情况以及4个判定分支,设计测试用例如下:
测试用例1:x = 4 , y = 5 , z = 5,执行路径abd,覆盖条件T1、T2、T3、T4,覆盖分支bd
测试用例2:x = 2 , y = 5 , z = 15,执行路径ace,覆盖条件-T1、-T2、-T3、-T4,覆盖分支ce

  • 分析:看起来判定/条件覆盖测试了每个判定每个条件的取值,但实际上,编译器在检查含有多个条件的逻辑表达式时,某些情况下的某些条件将会被其他调暗劲所掩盖。所以判定/条件覆盖也不一定能够完全检查出逻辑表达式的错误。
  • 例如:第一个判定中使用的是短路与&&,必须要x>3和z<10两个条件都为真,这个判定才能为真,但是如果x>3不成立,系统不会再检查z<10这个条件的真假,那么即使当这个条件设计错误了也不会被发现;同样的,第二个判定中使用的短路或||,表示只要x==4为真,那这个判定的结果就是真,而不会检查y>5这个条件的真假,那么也不会发现这个条件中是否存在错误。

组合覆盖

依然为DoWork函数哥哥判定哥哥条件取值加以标记;
要对DoWork函数进行组合覆盖,即要使设计的测试用例能覆盖每一个判定的所有可能的条件取值组合。设计测试用例如下:
测试用例1:
x = 4 , y = 6 , z = 5,执行路径abd,覆盖条件T1、T2、T3、T4,判定一和判定二都为真;
测试用例2:
x = 4 , y = 5 , z = 15,执行路径acd,覆盖条件T1、-T2、T3、-T4,判定一为假,判定二为真;
测试用例3:
x = 2 , y = 6 , z = 5,执行路径acd,覆盖条件-T1、-T2、-T3、T4,判定一为假,判定二为真;
测试用例4:
x = 2 , y = 5 , z = 15,执行路径ace,覆盖条件-T1、-T2、-T3、-T4,判定一和判定二都为假。

  • 分析:上面的测试用例覆盖了所有的八种条件取值的组合,也覆盖了所有判定的真假分支,但是仍然没有覆盖到abe路径。

路径覆盖

要对DoWork函数进行路径覆盖,即使设计的测试用例能覆盖被测程序中所有可能的的路径。设计测试用例如下:
测试用例1: x = 4 , y = 6 , z = 5,执行路径abd,覆盖条件T1、T2、T3、T4,
测试用例2: x = 4 , y = 5 , z = 15,执行路径acd,覆盖条件T1、-T2、T3、-T4,
测试用例3: x = 2 , y = 5 , z = 15,执行路径ace,覆盖条件-T1、-T2、-T3、-T4,
测试用例4:x = 5 , y = 5 ,z = 5 ,执行路径abe,覆盖条件T1、T2、-T3、-T4。

  • 分析:可以看出,满足路径覆盖不一定能够满足组合覆盖。
  • 说明,对于较简单的小程序,实现路径覆盖是可能做到的。但是如果程序中出现较多的判断和较多的循环,可能的路径数目将会急剧增长,要在测试中覆盖所有的路径是无法实现的。为了解决这个难题,只有把覆盖路径数量压缩到一定的限度内,比如程序中的循环体只执行一次。
    在实际测试中,即使对于路径数很有限的程序已经做到路径覆盖,仍然不能保证被测试程序的正确性,还需要采用其他测试方法来进行补充。

测试覆盖准则

逻辑覆盖的出发点是合理的、完善的。所谓“覆盖,就是想要做到全面而无遗漏,但逻辑覆盖并不能真正做到无遗漏。

  • 例如:
    if(x>3&&z<10) 若不小心写成了if(x>=3&&z<10),按照前面设计的测试用例(x取2或4),逻辑覆盖对这样的问题是无能为力的,而原因就在于:错误区域仅仅在x=3这个点上,即仅当x的值取3时,测试才能发现错误。面对这类情况,我们应该发现的是,测试工作要有中带你,要多针对容易发生问题的地方设计测试用例。而这里就用到了测试覆盖中需要遵循的两条准则:ESTCA准则、LCSAJ准则。

白盒测试-覆盖测试(六种覆盖方法)相关推荐

  1. 白盒测试中的六种覆盖方法及案例分析

    语句覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每一个语句至少执行一次,其覆盖标准无法发现判定中逻辑运算的错误: 判定覆盖<又叫分支覆盖率>是指选择足够的测试用例,使得运 ...

  2. 白盒测试----六种覆盖方法

    定义: 白盒测试又称结构测试,透明盒测试.逻辑驱动测试或基于代码的测试.白盒测试是一种测试用例设计方法,白盒指的是程序的内部结构和运作机制是可见的. 白盒测试的目的: 通过检查软件内部的逻辑结构,对软 ...

  3. 软件测试-白盒测试:逻辑覆盖

    逻辑覆盖 参考文献: 软件测试第4章白盒测试一 软件测试--白盒测试 白盒测试-覆盖测试(六种覆盖方法) 几种常用的逻辑覆盖测试方法 目的:结构测试是依据被测程序的逻辑结构设计测试用例,驱动被测程序运 ...

  4. 白盒测试方法|白盒测试的六种方法比较分析

    白盒测试的六种方法比较分析 一.摘要 白盒测试是测试人员常用的一种测试方法,越来越受到测试工程师的重视.白盒测试并不是简单的按照代码测试用例而走,需要根据不同的测试需求,结合不同的测试对象,使用适合的 ...

  5. 白盒测试——静态测试/逻辑覆盖/基本路径测试

    一.实验目的 能够掌握白盒测试的静态测试.逻辑覆盖(语句覆盖.判定覆盖.条件覆盖.判定-条件覆盖.条件组合覆盖.路径覆盖).基本路径测试原理 能够运静态白盒测试.逻辑覆盖(语句覆盖.判定覆盖.条件覆盖 ...

  6. 白盒测试之语句覆盖案例

    @白盒测试之语句覆盖 一.定义: > 程序中每一个语句至少能被执行一次: 二.特点: > 1.程序中每一个语句执行一次: > 2.对程序执行逻辑的覆盖率低,属于最弱的覆盖方式在这里插 ...

  7. 白盒测试之语句覆盖、判定覆盖、条件覆盖等

    1.定义说明 (1)白盒测试:白盒测试是一种测试用例设计方法:白盒测试的方法总体上分为静态分析方法和动态分析方法两大类.主要用于单元测试阶段,代码和逻辑的测试,重点复杂的测试,是一种测试用例设计方法. ...

  8. 判定覆盖白盒测试java_白盒测试--条件判定覆盖和修正条件判定覆盖的差异

    1 简介 文章的目的在于通过比较发现条件判定覆盖(即Condition/Decision Coverage C/DC)和修正条件判定覆盖(Modified Condition/Decision Cov ...

  9. 《Hack与HHVM权威指南》——1.5.2 覆盖方法的类型

    本节书摘来自华章出版社<Hack与HHVM权威指南>一书中的第1章,第1.5.2节,作者 Owen Yamauchi,更多章节内容可以访问云栖社区"华章计算机"公众号查 ...

最新文章

  1. arduino nano 蓝牙_探索 Golang 云原生游戏服务器开发,5 分钟上手 Nano 游戏服务器框架...
  2. JavaScript的9个陷阱及评点
  3. write()和read()
  4. 译Step-by-Step Guide on Configuring Django-Userena
  5. MySQL 优化策略
  6. 使用sklearn进行数据挖掘
  7. 17-(基础入门篇)GPRS(Air202)串口
  8. jdk文件夹里点哪个是安装_jdk在哪个文件夹里面
  9. Qt echarts 教程(2):qt echarts 数据动态绑定
  10. Java数字图像处理基础-------图像二值化处理
  11. 后端开发工程师的工作流程是怎样的
  12. ip地址详解(深入网络层分析)
  13. Linux从删库到跑路的命令,从删库到跑路——重写 rm -rf
  14. 基于Java+SpringBoot+Thymeleaf+Mysql在线外卖点餐系统设计与实现
  15. VPC虚拟云端局域网
  16. 巧妙去除Word文档修订和批注帮助
  17. java以某个字符串断句_结合 ictclass4j 和 KTDictSeg 写自己的分词器----断句(1)
  18. 如何获取京东微信小程序页面路径
  19. 图像识别教程(百度AI开放平台)
  20. C++ Reference: Standard C++ Library reference: C Library: cstdio: stdout

热门文章

  1. ISO 270001-2005学习(一)
  2. Unicode 编码转换器 1.0
  3. android官方下载,android studio2.2下载
  4. 零基础10小时学会3D基础建模,可能性有多大?现学现用现演示
  5. EBay 接口开发(restful接口调用)
  6. 在线教学系统:C#实现网络电子白板、课件功能
  7. 明日方舟灰齐山麓挑战任务怎么做
  8. wget 下载盯盘文件
  9. 使用Eclips开发Mybatis入门程序
  10. 安卓开源项目周报0222