1.0 流程图标识
1.1 语句覆盖法(C0标准)
① 目标
程序中的每个可执行语句至少被执行一次
后面如未说明那就是还是用的这个样例
程序源代码:
-
import java.util.Scanner;
-
public class Demo {
-
public static void main(String[] args) {
-
int a, b;
-
double c;
-
Scanner scanner = new Scanner(System.in);
-
a = scanner.nextInt();
-
b = scanner.nextInt();
-
c = scanner.nextDouble();
-
if (a > 0 && b > 0) {
-
c = c / a;
-
} else if (a > 1 || c > 1) {
-
c = c + 1;
-
}
-
c = b + c;
-
System.out.println("a=" + a);
-
System.out.println("b=" + b);
-
System.out.println("c=" + c);
-
scanner.close();
-
}
-
}
画出流程图:
② 用例
输入 | 输出 |
---|---|
a = 2 b = 1 c = 6 | a = 2 b = 1 c = 7 |
③ 优缺点
- 语句覆盖能发现语句错误
- 语句覆盖不能发现逻辑错误
1.2 判定/分支覆盖法(C1标准)
① 目标
程序中每个判定的取真分支和取假分支至少执行一次
② 用例
输入 | 输出 |
---|---|
a = 2 b = 1 c = 6 | a = 2 b = 1 c = 5 |
a = -1 b = 1 c = 1 | a = -1 b = 1 c = 7 |
③ 优缺点
- 判定/分支覆盖能发现逻辑错误
- 判定/分支覆盖不能发现组合判断中的条件错误
1.3 条件覆盖法(C2标准)
① 目标
程序中每个判定中每个条件的可能取值至少满足一次
② 用例
判定3:(a > 0 && b > 0)
判定6:(a > 1 || c > 1)
原子条件集:
a > 0
b > 0
a > 1
c > 1
要求:各原子条件集真假各取一次
输入 | 原子条件 | 判定条件 |
---|---|---|
a = -1 b = 2 c = 3 | a>0取假,b>0取真,a>1取假,c>1取真 | 判定3取假,判定6取真 |
a = 2 b = -1 c = -2 | a>0取真,b>0取假,a>1取真,c>1取假 | 判定3取假,判定6取真 |
③ 优缺点
- 未必比判定/分支覆盖更全面
- 不能发现逻辑错误
1.4 判定条件覆盖法(C1+C2标准)
① 目标
每个条件中的所有可能取值至少执行一次,同时,每个判定的可能结果至少执行一次
② 用例
输入 | 原子条件 | 判定条件 |
---|---|---|
a = 2 b = 1 c = 4 | a>0取真,b>0取真,a>1取真,c>1取真 | 判定3取真,判定6取真 |
a = -1 b = -2 c = -3 | a>0取假,b>0取假,a>1取假,c>1取假 | 判定3取假,判定6取假 |
③ 优缺点
- 可能会导致某些条件掩盖了另一些条件
1.5 条件组合覆盖法(C3标准)
① 目标
每个判定中的所有的条件取值组合至少执行一次
② 用例
判定3:(a > 0 && b > 0)
判定6:(a > 1 || c > 1)
原子条件集:
a > 0 b > 0 a > 1 c > 1
要求:
a>0时,b>0真假各一次
a<=0时,b>0真假各一次
a>1时,c>1真假各一次
a<=1时,c>1真假各一次
输入 | 原子条件 | 判定条件 |
---|---|---|
a = 2 b = 1 c = 6 | a>0取真,b>0取真,a>1取真,c>1取真 | 判定3取真,判定6取真 |
a = 2 b = -1 c = -2 | a>0取真,b>0取假,a>1取真,c>1取假 | 判定3取假,判定6取真 |
a = -1 b = 2 c = 3 | a>0取假,b>0取真,a>1取假,c>1取真 | 判定3取假,判定6取真 |
a = -1 b = -2 c = -3 | a>0取假,b>0取假,a>1取假,c>1取假 | 判定3取假,判定6取假 |
③ 优缺点
- 比条件覆盖法更全面
1.6 路径覆盖
① 目标
用例覆盖程序中的所有可能的执行路径
② 用例
输入 | 原子条件 | 判定条件 |
---|---|---|
a = 2 b = 1 c = 6 | a>0取真,b>0取真,a>1取真,c>1取真 | 判定3取真,判定6取真 |
a = 1 b = 1 c = -3 | a>0取真,b>0取真,a>1取假,c>1取假 | 判定3取真,判定6取假 |
a = -1 b = 2 c = 3 | a>0取假,b>0取真,a>1取假,c>1取真 | 判定3取假,判定6取真 |
a = -1 b = -2 c = -3 | a>0取假,b>0取假,a>1取假,c>1取假 | 判定3取假,判定6取假 |
③ 优缺点
- 不切实际
- 因为涉及到相关长和几乎无穷尽的路径数
- 任何可能的循环在程序段中都被视为是可能的路径
1.7 基本路径覆盖法
1)McCabe的基路径方法
2)从源节点到汇节点的线性独立路径数(根据圈复杂度计算)
- V(G) = e - n + 2p = 10 - 7 + 2 = 5
- 当规模很小时,我们可以直观地标识独立路径
3)以下给出的是用节点/边序列表示的路径:
- p1:A,B,C,G/1,4,9
- p2:A,B,C,B,C,G/1,4,3,4,9
- p3:A,B,E,F,G/1,5,8,10
- p4:A,D,E,F,G/2,6,8,10
- p5:A,D,F,G/2,7,10
以上就是这节的全部内容,如有错误,还请各位指正!
总结:
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方进群即可自行领取。