1. 为以下所示的程序段画出相应的程序流程图,并设计测试用例,要求满足判定覆盖。 void DoWork (int x,int y,int z) { int k=0,j=0; if ( (x>3)&&(z<10) ) { k=x*y-1; j=sqrt(k); } if ( (x= =4)||(y>5) ) { j=x*y+10; } j=j%3; }
时间: 2023-12-15 22:04:40 浏览: 90
程序流程图如下:
![程序流程图](https://i.imgur.com/0KjJlWc.png)
测试用例:
| 测试用例编号 | x | y | z | 预期结果 |
|--------------|---|---|---|----------|
| 1 | 2 | 8 | 5 | 不执行第一个if语句,j=16%3=1 |
| 2 | 4 | 3 | 5 | 执行第二个if语句,j=4*3+10=22%3=1 |
| 3 | 5 | 6 | 5 | 执行第二个if语句,j=5*6+10=40%3=1 |
| 4 | 4 | 6 | 5 | 执行第二个if语句,j=4*6+10=34%3=1 |
| 5 | 5 | 2 | 3 | 不执行第一个if语句,j=10%3=1 |
| 6 | 6 | 5 | 15 | 不执行第一个if语句,j=30%3=0 |
| 7 | 2 | 8 | 15 | 不执行第一个if语句,j=16%3=1 |
| 8 | 4 | 5 | 15 | 执行第二个if语句,j=4*5+10=30%3=0 |
| 9 | 3 | 3 | 15 | 不执行第一个if语句,j=9%3=0 |
| 10 | 4 | 8 | 5 | 执行第二个if语句,j=4*8+10=42%3=0 |
相关问题
问题:为以下所示的程序段设计测试用例。 void DoWork (int x,int y,int z) { int k=0,j=0; if ( (x>3)&&(z<10) ) { k=x*y-1; j=sqrt(k); } if ( (x==4)||(y>5) ) { j=x*y+10; } j=j%3; } 要求: 1. 画出该程序的流程图; 2. 用语句覆盖方法对该程序写测试用例(在程序中标出所有语句块); 3. 用判定覆盖方法对该程序写测试用例; 4. 用条件覆盖方法对该程序写测试用例; 5. 用判定-条件覆盖方法对该程序写测试用例; 6. 用条件组合覆盖方法对该程序写测试用例; 7. 用路径覆盖方法对该程序写测试用例;
1. 程序流程图如下:
![程序流程图](https://i.imgur.com/er3M0zH.png)
2. 使用语句覆盖方法,可以将程序分为以下几个语句块:
- 语句块1:int k=0,j=0;
- 语句块2:if ( (x>3)&&(z<10) ) { k=x*y-1; j=sqrt(k); }
- 语句块3:if ( (x==4)||(y>5) ) { j=x*y+10; }
- 语句块4:j=j%3;
根据语句覆盖方法,需要至少执行到每个语句块一次,因此可以设计以下测试用例:
- 测试用例1:x=4,y=6,z=12,预期输出j=22%3=1
- 测试用例2:x=2,y=4,z=9,预期输出j=0
- 测试用例3:x=5,y=2,z=8,预期输出j=0
3. 使用判定覆盖方法,可以将程序分为以下几个判定块:
- 判定块1:(x>3)&&(z<10)
- 判定块2:(x==4)||(y>5)
根据判定覆盖方法,需要至少执行到每个判定块的两种情况(True和False),因此可以设计以下测试用例:
- 测试用例1:x=4,y=6,z=12,预期输出j=22%3=1
- 测试用例2:x=2,y=4,z=9,预期输出j=0
- 测试用例3:x=5,y=2,z=8,预期输出j=0
- 测试用例4:x=2,y=2,z=2,预期输出j=0
4. 使用条件覆盖方法,可以将程序分为以下几个条件:
- 条件1:x>3
- 条件2:z<10
- 条件3:x==4
- 条件4:y>5
根据条件覆盖方法,需要至少执行到每个条件的两种情况(True和False),因此可以设计以下测试用例:
- 测试用例1:x=4,y=6,z=12,预期输出j=22%3=1
- 测试用例2:x=2,y=4,z=9,预期输出j=0
- 测试用例3:x=5,y=2,z=8,预期输出j=0
- 测试用例4:x=2,y=2,z=2,预期输出j=0
- 测试用例5:x=1,y=2,z=5,预期输出j=0
5. 使用判定-条件覆盖方法,可以将程序分为以下几个组合:
- 组合1:(x>3)&&(z<10)且(x==4)||(y>5)
- 组合2:(x>3)&&(z<10)且(x!=4)&&(y<=5)
- 组合3:!(x>3)&&(z<10)且(x==4)||(y>5)
- 组合4:!(x>3)&&(z<10)且(x!=4)&&(y<=5)
- 组合5:(x>3)&&!(z<10)且(x==4)||(y>5)
- 组合6:(x>3)&&!(z<10)且(x!=4)&&(y<=5)
- 组合7:!(x>3)&&!(z<10)且(x==4)||(y>5)
- 组合8:!(x>3)&&!(z<10)且(x!=4)&&(y<=5)
根据判定-条件覆盖方法,需要至少执行到每个组合的两种情况(True和False),因此可以设计以下测试用例:
- 测试用例1:x=4,y=6,z=12,预期输出j=22%3=1
- 测试用例2:x=2,y=4,z=9,预期输出j=0
- 测试用例3:x=5,y=2,z=8,预期输出j=0
- 测试用例4:x=2,y=2,z=2,预期输出j=0
- 测试用例5:x=1,y=2,z=12,预期输出j=0
- 测试用例6:x=4,y=2,z=12,预期输出j=15%3=0
- 测试用例7:x=2,y=2,z=8,预期输出j=0
- 测试用例8:x=1,y=6,z=8,预期输出j=0
6. 使用条件组合覆盖方法,可以将程序分为以下几个条件组合:
- 条件组合1:x>3, z<10, x==4, y>5
- 条件组合2:x>3, z<10, x==4, y<=5
- 条件组合3:x>3, z<10, x!=4, y>5
- 条件组合4:x>3, z<10, x!=4, y<=5
- 条件组合5:x>3, !(z<10), x==4, y>5
- 条件组合6:x>3, !(z<10), x==4, y<=5
- 条件组合7:x>3, !(z<10), x!=4, y>5
- 条件组合8:x>3, !(z<10), x!=4, y<=5
- 条件组合9:!(x>3), z<10, x==4, y>5
- 条件组合10:!(x>3), z<10, x==4, y<=5
- 条件组合11:!(x>3), z<10, x!=4, y>5
- 条件组合12:!(x>3), z<10, x!=4, y<=5
- 条件组合13:!(x>3), !(z<10), x==4, y>5
- 条件组合14:!(x>3), !(z<10), x==4, y<=5
- 条件组合15:!(x>3), !(z<10), x!=4, y>5
- 条件组合16:!(x>3), !(z<10), x!=4, y<=5
根据条件组合覆盖方法,需要至少执行到所有条件组合一次,因此可以设计以下测试用例:
- 测试用例1:x=4,y=6,z=12,预期输出j=22%3=1
- 测试用例2:x=4,y=2,z=12,预期输出j=15%3=0
- 测试用例3:x=5,y=2,z=8,预期输出j=0
- 测试用例4:x=2,y=2,z=2,预期输出j=0
- 测试用例5:x=1,y=2,z=5,预期输出j=0
- 测试用例6:x=1,y=6,z=8,预期输出j=0
- 测试用例7:x=2,y=4,z=9,预期输出j=0
- 测试用例8:x=2,y=2,z=8,预期输出j=0
7. 使用路径覆盖方法,可以列出以下路径:
- 路径1:1 → 2 → 4
- 路径2:1 → 2 → 3 → 4
- 路径3:1 → 2 → 3 → 4
- 路径4:1 → 4
根据路径覆盖方法,需要至少执行到每条路径一次,因此可以设计以下测试用例:
- 测试用例1:x=4,y=6,z=12,预期输出j=22%3=1
- 测试用例2:x=4,y=2,z=12,预期输出j=15%3=0
- 测试用例3:x=5,y=2,z=8,预期输出j=0
- 测试用例4:x=1,y=2,z=5,预期输出j=0
- 测试用例5:x=2,y=2,z=2,预期输出j=0
1:(30分) 使用逻辑覆盖测试方法测试以下程序段: void DoWork (int x,int y,int z) { 1 int k=0,j=0; 2 if ( (x>3) && (z<10) ) 3 { 4 k=x*y-1; 5 j=sqrt(k); 6 } 7 if ( (x==4)||(y>5) ) 8 j=x*y+10; 9 j=j%3; 10 } 说明:程序段中每行开头的数字(1~10)是对每条语句的编号。 (1)画出程序的控制流图(用题中给出的语句编号表示)。(10分) (2)分别以语句覆盖(3分)、判定覆盖(3分)、条件覆盖(3分)、判定/条件覆盖(3分)、条件组合覆盖(3分)和路径覆盖方法(5分)设计测试用例,并写出每个测试用例的执行路径(用题中给出的语句编号表示)。
(1)控制流图如下:
```
+----(2)----+
| |
+-------v-------+ |
| (x>3)&&(z<10) | |
| T | |
| +--(4)---+ | |
| | | | |
| v v | |
| (5) (6) | |
| | | | |
| +-------+ | |
| | |
| (x==4)||(y>5)| |
| T | |
| +--(8)---+ | |
| | | | |
| v v | |
| (9) (9)| |
| | | | |
| +-------+ | |
| | |
| (10) | |
| | |
+--------------+ |
| |
+----------+
```
(2)各覆盖方法的测试用例及执行路径如下:
- 语句覆盖:
测试用例1:x=4, y=6, z=9
执行路径:1-2-7-8-9-10
测试用例2:x=2, y=3, z=11
执行路径:1-2-7-9-10
- 判定覆盖:
测试用例1:x=4, y=6, z=9
执行路径:1-2-7-8-9-10
测试用例2:x=2, y=7, z=5
执行路径:1-2-7-9-10
- 条件覆盖:
测试用例1:x=4, y=6, z=9
执行路径:1-2-7-8-9-10
测试用例2:x=2, y=7, z=5
执行路径:1-2-7-9-10
- 判定/条件覆盖:
测试用例1:x=4, y=6, z=9
执行路径:1-2-7-8-9-10
测试用例2:x=4, y=3, z=9
执行路径:1-2-7-9-10
- 条件组合覆盖:
测试用例1:x=4, y=6, z=9
执行路径:1-2-7-8-9-10
测试用例2:x=2, y=7, z=5
执行路径:1-2-7-9-10
- 路径覆盖:
测试用例1:x=4, y=6, z=9
执行路径:1-2-7-8-9-10
测试用例2:x=2, y=3, z=11
执行路径:1-2-7-9-10
阅读全文