白盒测试学习笔记

白盒测试主要是逻辑覆盖,逻辑覆盖标准有语句覆盖、判定覆盖、条件覆盖、(修正)判定/条件覆盖、条件组合覆盖

1|0语句覆盖

语句覆盖使程序中每个语句至少都能被执行一次

2|0判定覆盖(分支覆盖)

判定覆盖使得程序中每个判断的取真分支和取假分支至少执行一次,即判断的真价值均被满足过。

3|0条件覆盖

在程序中,一个判定语句可能是由多个条件组合而成的符合判定。如(x>3&&z<7)

条件覆盖使得程序中的每一判定语句中的每一个逻辑条件的可能值至少满足一次 ,如设计{x=4, z=5}和{x=2, z=8},满足x>3和z<7这两个逻辑条件的两个可能值。

4|0条件判定组合覆盖

条件判定组合覆盖使得程序中每个条件的所有可能真假值至少出现一次,并且每个判定本身的判定结果也至少出现一次。即测试用例同时满足条件覆盖和判定覆盖。

有时某些条件会被其他条件所掩盖,如if (x>3 && z<7) 若取 x = 2,则编译器将不会判断z<7这个条件。

5|0修正的条件判定组合覆盖

该覆盖需要体现条件对整个表达式的独立影响,如表:

ID A B A && b
1 T T T
2 F T F
3 T F F

上表所述,当逻辑运算为and时,要体现某一条件的独立影响,则需要使其他条件为真;同理当逻辑运算为or时,需要使其他条件为假。该覆盖设计较为困难。

6|0条件组合覆盖

设计足够多的测试用例,使得每一个判定中条件的各种可能组合都至少出现一次。

if (x > 3 && z < 7) ,其中有两个条件,这两个条件的可能组合有:

  1. x > 3, z < 7 . 满足其的测试用例为:x = 4, z = 6
  2. x < 3, z < 7 . 满足其的测试用例为:x = 2, z = 6
  3. x < 3, z > 7 . 满足其的测试用例为:x = 2, z = 8
  4. x > 3, z > 7 . 满足其的测试用例为:x = 4, z = 8

结:做题时需要有详细的标号,覆盖列表步骤。

7|0路径测试

7|1程序图

有向的程序图是由代码得到的,可以体现原代码的结构复杂度,程序图的组成:

  • 圆圈(节点):执行语句
  • 有向线段:程序的执行方向

生成流程图:

  • 忽略数据声明
  • 忽略注释语句
  • 压缩穿行语句
  • 忽略循环次数,只考虑是否执行循环体,即当作一个判断节点

7|2确定环复杂度(McCabe)

1|0直观观察法

观察程序图将二维平面分割成封闭区域和开放区域的个数,如图:

该区域划分为:

  • 绿:A-B-D-E
  • 黄:B-C
  • 蓝:B-E-F-G-C
  • 红:D-F-E
  • 一个外部开放区域

区域共计为5,因此环复杂度为5,记:V = 5。

1|0公式计算法

利用程序图包含的 边( e ) 和 顶点( n ) 的 数量来计算环复杂度:

V(G)=en+1

使用该公式拥有前提条件:

  1. 程序图中无孤立节点
  2. 程序图是强连通图。(所谓强连通,是节点间双向连通)

一般程序由入口节点单向执行到出口节点,因此像上图是不满足强连通图的,需要进行图的改造才能够使用该公式,改造如下:

改造方法:构建死循环, 连接G -> A

1|0判定节点法

利用程序图中的判定节点数量 ( P ) 计算环复杂度

V=P+1


7|3确定独立路径集合

独立路径集合的规模 = 程序的环复杂度

1|0寻找独立路径

1、确定主路径

主路径是包含判定节点最多的路径,以前述为例,如图:

主路径

主路径为:A, B, C, G

2、抽取其他独立路径

依次覆盖判定节点的执行分支

  • P1 : A,B,C,G
  • P2 : A,D,F,G
  • P3 : A,B,E,F,G
  • P4 : A,B,C,B,C,G
  • P5 : A,D,E,F,G

结:先确定主路径,然后随着主路径上的判定节点顺序寻找还未执行的分支,当一个判定节点的所有分支都执行完成则开始查找主路径上的下一个节点,当主路径中的节点都寻完后,再寻找不在主路径上的节点。

1|0局限

在源代码中的判定节点之间往往存在相互关联,使得部分判定节点分支的执行具有一定的条件概率。具有不可行路径的问题。

解决方式:结合源代码寻找独立路径等。

8|0注意

  • 在实际的逻辑覆盖测试中,一般以条件组合覆盖为主设计测试用例,然后再补充或修改用例以达到路径覆盖的测试标准
  • 满足路径覆盖的测试用例不一定满足条件组合覆盖
  • 由判定节点发出的边必须终止于某一个节点(画程序图时增加空的节点)如下图
  • 画程序图时注意压缩串行语句,如下图
  • 对于组合条件,将其分解为多个的单个条件,通过 or 和 and 的条件独立影响来分解,如图:

__EOF__

本文作者··十方··
本文链接https://www.cnblogs.com/flynn24/p/12623697.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ··十方··  阅读(486)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示