测试分类篇 - 测试方法(黑盒测试、白盒测试、灰盒测试)
文章目录
- 测试分类篇 - 测试方法(黑盒测试、白盒测试、灰盒测试)
- 1. 黑盒测试:
- 1.1 黑盒测试的优点
- 1.2 黑盒测试的缺点
- 1.3 黑盒测试常用方法
- 2. 白盒测试:
- 2.1 白盒测试设计方法:
- 1. 语句覆盖:
- 2. 判定覆盖
- 3. 条件覆盖:
- 4. 条件判定覆盖:
- 5. 条件组合覆盖:
- 6. 路径覆盖(附带判定组合覆盖):
- 2.2 总结:
- 3. 灰盒测试
- 4.常见面试题:你知道的测试方法有哪些?哪种用得比较多?(高频面试题)
- 5. 结尾:
这篇博客,来源自这篇博客:
博客链接: 测试(8) - 测试分类篇
如果你是第一次点击这篇博客,推荐你先看上面这篇博客,上面这篇博客有这篇博客的跳转链接。
看到根据 测试方法 划分的时候,再点击链接过来看这这篇博客。
如果你只是想单独了解测试方法的话,也可以直接看这篇博客
1. 黑盒测试:
黑盒测试是在完全不考虑程序内部逻辑与结构的前提下,检查系统功能是否按照需求规格说明书(需求文档)正常实现,能否正确接收输入数据并输出符合预期的结果,满足需求规范的测试方法。
由于只关注输入与输出的对应关系,黑盒测试也被称为数据驱动测试,测试重点聚焦于软件功能。
1.1 黑盒测试的优点
- 无需了解程序内部代码与实现细节,不关注软件内部结构。
- 从用户视角设计测试用例,更容易把握用户常用功能与潜在问题,培养测试人员的产品思维。
- 基于软件需求文档设计用例,不易遗漏需求中规定的测试功能。
1.2 黑盒测试的缺点
无法实现全量代码覆盖。
1.3 黑盒测试常用方法
等价类划分法、边界值分析法、因果图法、场景法、错误猜测法等。
也就是我们这篇博客:测试用例篇 - 设计测试用例的方法(等价类,边界值,场景法)
讲到的所有设计测试用例的方法,都属于是 黑盒测试。
2. 白盒测试:
白盒测试又称为结构测试或逻辑测试,通过分析程序内部结构,针对程序逻辑结构设计测试用例并开展测试。
白盒测试的目的是:
- 检查软件内部逻辑结构,对软件中的逻辑路径进行覆盖测试
- 在程序不同位置设立检查点,监测程序运行状态,确保实际运行状态与预期状态一致。
黑盒测试:完全不考虑程序内部逻辑与结构
白盒测试:分析程序内部逻辑与结构
白盒测试主要分为静态测试和动态测试两类。
静态测试常见方式包括:桌面检查、代码审查、代码走查、代码扫描工具检测等。
动态测试主要包含六种测试方法:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。
接下来,我们要介绍的是 白盒测试中,动态测试主要包含的六种测试方法:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。
2.1 白盒测试设计方法:
ifAandB// 语句1then action1// 语句2ifCorD// 语句3then action2// 语句4A,B,C,D 分别是四个判定条件。并且,我会以 T 表示 true,F 表示 false
通过这段 伪代码,来讲解白盒测试设计方法。
1. 语句覆盖:
语句覆盖:每个语句至少执行一次。
语句1 和 语句2 想要都执行:需满足 A 为真且 B 为真。(A 为 T并且 B 为 T)
语句1 和 语句2 想要都执行:需满足 C 为真或 D 为真。(C为 T或者 D 为 T)
由此得出测试用例:
用例 1:A 为T,B 为T,C 为T,D 为F。
通过这个测试用例,就能够让每个语句至少执行一次,这就是语句覆盖。
2. 判定覆盖
if语句,就是判定语句。
判定覆盖(分支覆盖):设计测试用例,使得程序中每一个判定的结果都至少取一次真、取一次假。
ifAandB// 语句1ifCorD// 语句3上述代码中,只有语句1 和 语句3 为if语句。
针对 语句1(if A and B),都为真,或者都为假 的情况:
| if A and B | |
|---|---|
| T | A == T且B == T |
| F | A == F 且 B == F,A == F 且 B == T,A == T 且 B == F |
针对 语句2(if C or D),都为真,或者都为假 的情况:
| if C or D | |
|---|---|
| T | C == T 且 D == T,C == F 且 D == T,C == T 且 D == F |
| F | C == F且 D == F |
综合起来:
语句1 和 语句2 都为真的情况:
测试用例1:A == T,B == T,C ==T ,D == F
通过这个测试用例满足每个 if语句 都为真的情况
语句1 和 语句2 都为假的情况:
测试用例1:A == F,B == F,C == F,D == F
通过这个测试用例满足每个每一个判定的结果都至少取一次真、取一次假
3. 条件覆盖:
设计足够的测试用例,使得程序中每个判定包含的每个条件 的所有可能取值(真和假)都至少被执行一次
ifAandB// 语句1then action1// 语句2ifCorD// 语句3then action2// 语句4A,B,C,D 分别是四个判定条件。
A,B,C,D 这四个判定条件,都为 T ,都为 F 的情况:
A:T F
B:T F
C:T F
D:T F
得出测试用例如下:
用例 1:A=T,B=T,C=T,D=T
用例 2:A=F,B=F,C=F,D=F
通过这两个测试用例,覆盖了A,B,C,D 这四个判定条件,都为 T ,都为 F 的情况。
4. 条件判定覆盖:
结合判定覆盖和条件覆盖,设计测试用例:都为T,都为F 的情况。
判定覆盖和条件覆盖 都为T 的情况,结合判定覆盖和条件覆盖:
判定覆盖:
针对 语句1(if A and B),都为真,或者都为假 的情况:
| if A and B | |
|---|---|
| T | A == T且B == T |
| F | A == F 且 B == F,A == F 且 B == T,A == T 且 B == F |
针对 语句2(if C or D),都为真,或者都为假 的情况:
| if C or D | |
|---|---|
| T | C == T 且 D == T,C == F 且 D == T,C == T 且 D == F |
| F | C == F且 D == F |
条件覆盖:A,B,C,D 这四个判定条件,都为 T 。
结合起来,得出测试用例1:A=T,B=T,C=T,D=T
判定覆盖和条件覆盖 都为F 的情况,结合判定覆盖和条件覆盖:
判定覆盖,和上述一样。
条件覆盖:A,B,C,D 这四个判定条件,都为 F 。
结合起来,得出测试用例2:A=F,B=F,C=F,D=F
总结:
测试用例1 和 测试用例2,既可以做到 判定覆盖,也可以做到 条件覆盖。
因此称之为:判定条件覆盖
5. 条件组合覆盖:
设计足够的测试用例,使得每个判定中所有条件 的各种可能组合都至少出现一次
ifAandB// 语句1then action1// 语句2ifCorD// 语句3then action2// 语句4语句1,语句3,分别有4个条件:A,B,C,D
将这 4 个条件的各种T,F 情况结合起来,形成表格:
| A | B | C | D |
|---|---|---|---|
| T | T | T | T |
| T | F | T | T |
| F | T | T | T |
| F | F | T | T |
每一行就可以是⼀个用例,⼀共四个用例。
条件组合覆盖,条件越多,条件的各种T,F 情况也就越多,测试用例也就越多。
6. 路径覆盖(附带判定组合覆盖):
路径覆盖,比较复杂,我们先给出一个示例:
将上述流程图,转化为代码:
if(x>0&&y>0){语句块1}else{语句块2}if(z<0){语句块3语句块4}else{语句块4}判定条件定义如下:
if(x>0 && y>0)判定,记为P1if(z<0)判定,记为P2x > 0记为C1y > 0记为C2z < 0记为C3
路径覆盖,需要按步骤进行设计,一共有三步:
- 判定组合覆盖
- 根据判定组合覆盖的结果,设计条件
- 根据条件,给出数据
接下来,我们根据这三步,一步一步设计:
判定组合覆盖
if(x>0 && y>0)判定,记为P1if(z<0)判定,记为P2
将 P1,P2 可能的结果,都列举出来,就像 条件组合覆盖 那样:
| P1 | P2 |
|---|---|
| T | T |
| T | F |
| F | T |
| F | F |
根据判定组合覆盖的结果,设计条件
P1 (if(x>0 && y>0))的两个条件:
x > 0记为C1,y > 0记为C2P2 (if(z<0))的条件:
z < 0记为C3
| x>0 (C1) | y>0 (C2) | z<0 (C3) | P1 (x>0 && y>0) | P2 (z<0) |
|---|---|---|---|---|
| T | T | T | T | T |
| F | T | T | F | T |
| T | F | T | F | T |
| F | F | T | F | T |
| T | T | F | T | F |
| F | T | F | F | F |
| T | F | F | F | F |
| F | F | F | F | F |
为了方便大家观察,下面的步骤,就取其中 4 个例子就行:
| x>0 (C1) | y>0 (C2) | z<0 (C3) | P1 (x>0 && y>0) | P2 (z<0) |
|---|---|---|---|---|
| T | T | T | T | T |
| F | T | T | F | T |
| T | T | F | T | F |
| F | T | F | F | F |
- 根据条件,给出数据
数据 x>0 (C1) y>0 (C2) z<0 (C3) P1 (x>0 && y>0) P2 (z<0) 路径 {x=3,y=3,z=-2} T T T T T a-b-d-f {x=-3,y=3,z=-2} F T T F T a-c-d-f {x=3,y=3,z=2} T T F T F a-b-e-f {x=-3,y=15,z=2} F T F F F a-c-e-f
这就是根据 路径覆盖 设计出来的 4 个测试用例。
2.2 总结:
- 白盒测试主要适用于单元测试阶段。
- 测试用例设计遵循先静态、后动态的原则。
- 通常以路径测试法为主,对重点模块可额外采用逻辑覆盖法进行补充。
3. 灰盒测试
灰盒测试是介于白盒测试与黑盒测试之间的一种测试方法,多用于集成测试阶段。
它不仅关注输入与输出的正确性,同时也会关注程序内部的实现情况。
但灰盒测试的细致度与完整性不如白盒测试,而黑盒测试是覆盖产品范围最广的测试方式。
因此,灰盒测试基本无法替代黑盒测试,若强行替代,会带来极高的成本,需要设计大量测试用例。
4.常见面试题:你知道的测试方法有哪些?哪种用得比较多?(高频面试题)
常见的测试方法有黑盒测试、白盒测试和灰盒测试。
开发人员主要使用白盒测试与灰盒测试,测试人员主要使用黑盒测试与灰盒测试。
对测试人员而言,相比白盒测试,黑盒测试的应用更为广泛。
5. 结尾:
回到上一篇博客:测试(8) - 测试分类篇
最后,如果这篇博客能帮到你的,请你点点赞,有写错了,写的不好的,欢迎评论指出,谢谢!