软件测试与管理-白盒测试-逻辑覆盖法例题

目录

知识点:

[例题 :](#例题 :)


知识点:

语句覆盖: 设计足够多的测试用例,使得被测试程序中的**" ++每条可执行语句至少被执行一次++"**

  • **优点:**可通过源码观察直观地得到测试用例,无须细分每个判定表达式。
  • **缺点:**只对程序逻辑中的可执行语句的显式错误起作用,隐藏在程序中的其他错误无法准确测试。

判定覆盖: 设计足够多的测试用例,使得被测试程序中的**"++每个判断的"真"、"假"分支至少被执行一次++"**

  • **优点:**测试的路径比语句覆盖多一倍,因此具有比语句覆盖更强的测试能力,而且判定覆盖与语句覆盖一样简单,无须细分每个判定即可得到测试用例。
  • **缺点:**一般程序中的判断语句是由多个逻辑条件组合而成,因此仅仅判断其最终结果,而忽略每个条件的各种取值情况,必定会导致部分测试路径遗漏。

条件覆盖: 设计足够多的测试用例,使得被测试程序中的每个判断语句中的++"每个逻辑条件的可能值至少被满足一次"++

  • **优点:**一般而言条件覆盖比判定覆盖要强,因为条件覆盖使判定条件中每个条件都取到了不同的结果,而判定覆盖无法保证这一点。
  • **缺点:**条件覆盖只能保证每个条件都取到不同的结果,但无法保证每种判定结果都满足。

判定-条件覆盖: 设计足够多的测试用例,使判断中++"每个条件的所有可能取值至少执行一次"++ (条件覆盖),与此同时还保证++"每个判断本身所有结果也至少执行一次"++ (判定覆盖)**。**即同时满足100%判定覆盖和100%条件覆盖的标准。

  • **优点:**弥补了判定覆盖和条件 覆盖各自的缺陷
  • **缺点:**当程序中还有多个判断结构时,容易出现不同的条件组合导致不同的结果,但判定/条件覆盖并未考虑这种条件组合的情况。

条件组合覆盖: 又称组合覆盖,是指**"** ++每个判断语句中的各个条件的各种可能组合都至少执行一次"++,因此条件组合覆盖的测试用例可满足判定覆盖、条件覆盖以及判定/条件覆盖。

  • **优点:**以同时满足判定覆盖、条件覆盖、判定/条件覆盖,可弥补三者的不足,从而对程序做更严格的测试,覆盖率更高。
  • **缺点:**需要考虑程序中所有的判断结构,并将判断结构中的各条件的所有可能组合都至少执行一次,因此设计的 测试用例数量较多,执行所花费的时间也会更长。

**路径覆盖:**考虑所有可能执行的路径。

**优点:**路径覆盖是 6 种逻辑覆盖方法中 覆盖率最高的白盒测试用例设计方法。

**缺点:**当需要考虑程序中所有可能执行的路径,尤其是判断结果比较多时,测试用例的设计量就会很大,测试用例的编写就会比其他方法耗时更多,整个测试过程也会被拉长。


例题 :

cpp 复制代码
//被测程序
1   int doWork(int x,int y,int z)
{
2       int k=0,j=0;
3       if((x>3)&&(z<10))
        {
4            k=x*y-1;
5           j=sqrt(k); 
        }
6      if((x==4)||(y>5))
       {
7          j=x*y+10;
8          j=j%3; 
        }
9      return j; }

1. 分析程序,画出程序流程图

2. 根据程序流程图对程序进行白盒测试:

① 语句覆盖,语句块,执行至少1次。

② 判定覆盖,判定节点,整体,真,假,执行至少1次。

③ 条件覆盖,判定节点,局部,真,假,执行至少1次。

④ 判定-条件覆盖,判定节点,整体,局部,真,假,执行至少1次。

⑤ 条件组合覆盖,判定节点,内部条件的组合,跨判定节点的条件组合无需考虑。

⑥ 路径覆盖,判定节点,真,假,至少执行1次。

3.测试用例:

(1)语句覆盖

|-------|---|---|---|---------------------------|
| 用例编号 | x | y | z | 覆盖语句 |
| Case1 | 4 | 6 | 8 | 3,4,5,6,7,8,9 (每行代码对应的编号) |


(2)判定覆盖

x>3 && z<10 :P1

(x==4)||(y>5): P2

|-------|---|---|----|----|----|---------|
| 用例编号 | x | y | z | P1 | P2 | 覆盖路径 |
| Case1 | 5 | 3 | 9 | T | F | abceghi |
| Case2 | 4 | 6 | 11 | F | T | abdefhi |


(3)条件覆盖

x>3 : C1

z<10 : C2

x==4 : C3

y>5 : C4

|-------|---|---|----|----|----|----|----|----|----|---------|
| 用例编号 | x | y | z | C1 | C2 | C3 | C4 | P1 | P2 | 覆盖路径 |
| CASE1 | 4 | 6 | 8 | T | T | T | T | T | T | abcefhi |
| CASE2 | 2 | 4 | 12 | F | F | F | F | F | F | abdeghi |
| CASE3 | 5 | 4 | 8 | T | T | F | F | T | F | abceghi |
| CASE4 | 4 | 6 | 12 | T | F | T | T | F | T | abdefhi |


(4)判定-条件覆盖

|-------|---|---|----|----|----|----|----|----|----|---------|
| 用例编号 | x | y | z | C1 | C2 | C3 | C4 | P1 | P2 | 覆盖路径 |
| CASE1 | 4 | 6 | 8 | T | T | T | T | T | T | abcefhi |
| CASE2 | 2 | 4 | 12 | F | F | F | F | F | F | abdeghi |


(5) 条件组合覆盖

x>3 && z<10 :

x==4)||(y>5):

|-------|---|---|----|----|----|----|----|----|----|---------|
| 用例编号 | x | y | z | C1 | C2 | C3 | C4 | P1 | P2 | 覆盖路径 |
| CASE1 | 5 | 5 | 7 | T | T | F | F | T | F | abceghi |
| CASE2 | 4 | 5 | 12 | T | F | T | F | F | T | abdefhi |
| CASE3 | 5 | 6 | 12 | F | F | F | T | F | T | abdefhi |
| CASE4 | 4 | 5 | 8 | T | T | T | F | T | T | abcefhi |
| CASE5 | 5 | 6 | 8 | T | T | F | T | T | T | abcefhi |
| CASE6 | 2 | 4 | 12 | F | F | F | F | F | F | abdeghi |


(6) 路径覆盖

|-------|---|---|----|----|----|----|----|----|----|---------|
| 用例编号 | x | y | z | C1 | C2 | C3 | C4 | P1 | P2 | 覆盖路径 |
| CASE1 | 4 | 6 | 8 | T | T | T | T | T | T | abcefhi |
| CASE2 | 2 | 4 | 12 | F | F | F | F | F | F | abdeghi |
| CASE3 | 5 | 4 | 8 | T | T | F | F | T | F | abceghi |
| CASE4 | 4 | 6 | 12 | T | F | T | T | F | T | abdefhi |

相关推荐
三品吉他手会点灯3 小时前
C语言学习笔记 - 20.C编程预备计算机专业知识 - 变量为什么必须的初始化【重点】
c语言·笔记·学习
kobesdu3 小时前
【ROS2实战笔记-12】rosshow:终端里的盲文可视化与无头机器人的现场调试
笔记·机器人·ros·移动机器人
sakiko_3 小时前
UIKit学习笔记1-创建项目(使用UIKit)、使用组件
笔记·学习
智者知已应修善业4 小时前
【51单片机中的打飞机设计】2023-8-25
c++·经验分享·笔记·算法·51单片机
智者知已应修善业6 小时前
【51单片机按键调节占空比3位数码管显示】2023-8-24
c++·经验分享·笔记·算法·51单片机
JasmineX-17 小时前
数据结构(笔记)——双向链表
c语言·数据结构·笔记·链表
程序猿乐锅8 小时前
【Tilas|第三篇】多表SQL语句
数据库·经验分享·笔记·学习·mysql
AOwhisky8 小时前
Kubernetes 学习笔记:集群管理、命名空间与 Pod 基础
linux·运维·笔记·学习·云原生·kubernetes
sakiko_10 小时前
UIKit学习笔记2-组件嵌套、滚动视图等
笔记·学习·objective-c·swift·uikit
Alice-YUE11 小时前
【JS高频八股】什么是闭包?
开发语言·javascript·笔记·学习