请用逻辑覆盖法(语句覆盖、判定覆盖(分支覆盖)、条件覆盖、条件组合覆盖、条件分支覆盖、路径覆盖)对下面的java代码段进行测试。
public char function(int x, int y) {
char t;
if ((x >= 90) && (y >= 90)) {
t = 'A';
} else {
if ((x + y) >= 165) {
t = 'B';
} else {
t = 'C';
}
}
return t;
}
流程图如下:
语句覆盖:设计足够多的测试用例,使得被测试程序中的每条可执行语句至少被执行一次。
解:
测试用例如下:
编号 | x | y | 执行路径 |
1 | 91 | 91 | acf |
2 | 85 | 85 | abef |
3 | 80 | 80 | abdf |
判定覆盖(分支覆盖):设计足够多的测试用例,使得被测试程序中的每个判断的“真”、“假”分支至少被执行一次。
if(x>90 && y>90)记为P1,if((x+y)>165)记为P2,测试用例如下:
编号 | x | y | P1 | P2 | 执行路径 |
1 | 91 | 91 | Y |
| acf |
2 | 85 | 85 | N | Y | abef |
3 | 80 | 80 | N | N | abdf |
条件覆盖:设计足够多的测试用例,使得被测试程序中的每个判断语句中的每个逻辑条件的可能值至少被满足一次。
解:
记两个判断if(x>90 && y>90)为P1,if((x+y)>165)为P2。记三个判断x>=90为C1,y>=90为C2,(x+y)>=165为C3,测试用例如下。
编号 | x | y | C1 | C2 | C3 | P1 | P2 | 执行路径 |
1 | 91 | 91 | Y | Y |
| Y |
| acf |
2 | 85 | 85 | N | N | Y | N | Y | abef |
3 | 80 | 80 | N | N | N | N | N | abdf |
判定-条件覆盖(分支-条件覆盖):设计足够多的测试用例,使得被测试程序中的每个判断本身的判定结果(真假)至少满足一次,同时,每个逻辑条件的可能值也至少被满足一次。即同时满足100%判定覆盖和100%条件覆盖的标准。
解:
记两个判断if(x>90 && y>90)为P1,if((x+y)>165)为P2。记三个判断x>=90为C1,y>=90为C2,(x+y)>=165为C3,测试用例如下。
编号 | x | y | C1 | C2 | C3 | P1 | P2 | 执行路径 |
1 | 91 | 91 | Y | Y |
| Y |
| acf |
2 | 85 | 85 | N | N | Y | N | Y | abef |
3 | 80 | 80 | N | N | N | N | N | abdf |
条件组合覆盖:设计足够多的测试用例,使得被测试程序中的每个判断的所有可能条件取值的组合至少被满足一次。
注意:
a、条件组合只针对同一个判断语句内存在多个条件的情况,让这些条件的取值进行笛卡尔乘积组合。
b、不同的判断语句内的条件取值之间无需组合。
c、对于单条件的判断语句,只需要满足自己的所有取值即可。
解:
编号 | x | y | C1 | C2 | C3 | P1 | P2 | 执行路径 |
1 | 91 | 91 | Y | Y |
| Y |
| acf |
2 | 91 | 65 | Y | N | Y | N | Y | abef |
3 | 10 | 91 | N | Y | N | N | N | abdf |
路径覆盖:设计足够多的测试用例,使得被测试程序中的每条路径至少被覆盖一次。
解:
测试用例如下:
编号 | x | y | 执行路径 |
1 | 91 | 91 | acf |
2 | 85 | 85 | abef |
3 | 80 | 80 | abdf |
六种逻辑覆盖的强弱关系:
路径覆盖很难在该图表示出来。