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

目录

知识点:

[例题 :](#例题 :)


知识点:

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

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

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

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

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

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

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

相关推荐
冷眼看人间恩怨27 分钟前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
Hejjon6 小时前
SpringBoot 整合 SQLite 数据库
笔记
西洼工作室8 小时前
【java 正则表达式 笔记】
java·笔记·正则表达式
初学者7.9 小时前
Webpack学习笔记(2)
笔记·学习·webpack
新手上路狂踩坑10 小时前
Android Studio的笔记--BusyBox相关
android·linux·笔记·android studio·busybox
stm 学习ing11 小时前
HDLBits训练3
c语言·经验分享·笔记·算法·fpga·eda·verilog hdl
尘觉11 小时前
算法的学习笔记—扑克牌顺子(牛客JZ61)
数据结构·笔记·学习·算法
bohu8312 小时前
sentinel学习笔记1-为什么需要服务降级
笔记·学习·sentinel·滑动窗口
初学者7.13 小时前
Webpack学习笔记(3)
笔记·学习·webpack
bohu8314 小时前
sentinel学习笔记5-资源指标数据统计
笔记·sentinel·statisticslot