实验二+117+陈俊超
实验二结构性测试(4学时)
一、实验目的
掌握基于覆盖理论与基本路径的基本白盒测试方法和实践
二、实验要求
运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例,并运行测试用例检查程序的正确与否,给出程序缺陷小结。
三、实验内容
根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的Junit脚本。
所有的覆盖的技术:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,基本路径测试方法。
包括的内容有:
1) 被测原代码
2)依据覆盖技术,测试用例列表:
3)相应Junit测试脚本、执行结果
4)给出测试参数化和打包测试的脚本,并生成执行结果
四、实验步骤
1) 被测原代码
package exe1;
import java.util.Arrays;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
int[] num;
num = new int[3];
Scanner input = new Scanner(System.in);
System.out.print("请输入三角形的三条边:\n");
try{
System.out.print("第一条边:");
num[0] = input.nextInt();
System.out.print("第二条边:");
num[1] = input.nextInt();
System.out.print("第三条边:");
num[2] = input.nextInt();
}catch(Exception ex){
System.out.println("输入数值类型错误!");
}
1.if(num[0]>100||num[0]<1||num[1]>100||num[1]<1||num[2]>100||num[2]<1){
2. System.out.print("边的值不在范围内!");
3. return;
}
4. Arrays.sort(num);
5. System.out.println(triangle(num[0],num[1],num[2]));
}
6. static String triangle(int a,int b,int c){
7. String str=null;
8. if(a+b>c) {
9. if((a == b)||(b == c)&&(a!=c))
{
10. str = "等腰三角形";
}
11. else if(a == b&& b== c)
{
12. str = "等边三角形";
13. }else if(a*a+b*b==c*c){
14. str = "直角三角形";
15. }else
16. str="一般三角形";
}
17. else {
18. str = "不构成三角形";
}
19. return str;
}
}
DD-路径(只压缩链路经)
程序图节点 |
DD-路径 |
1 |
A |
2 |
B |
3 |
C |
4 |
D |
5 |
E |
6 |
F |
7 |
G |
8 |
H |
9 |
I |
17,18 |
J |
10 |
K |
11 |
L |
12 |
M |
13 |
N |
14 |
O |
15,16 |
P |
19 |
Q |
2)依据覆盖技术,测试用例列表:
(I)语句覆盖:
1.A-B-C 2.A-D-E-F-G-H-J-Q 3.A-D-E-F-G-H-I-K-Q 4.A-D-E-F-G-H-I-L-M-Q
5.A-D-E-F-G-H-I-L-N-O-Q 6.A-D-E-F-G-H-I-L-N-P-Q
测试用例:
用例ID |
输入值 |
执行路径 |
预期输出 |
||
A |
B |
C |
STR |
||
1 |
0 |
0 |
0 |
A-B-C |
边的值不在范围内! |
2 |
1 |
2 |
3 |
A-D-E-F-G-H-J-Q |
不构成三角形 |
3 |
1 |
2 |
2 |
A-D-E-F-G-H-I-K-Q |
等腰三角形 |
4 |
3 |
3 |
3 |
A-D-E-F-G-H-I-L-M-Q |
等边三角形 |
5 |
3 |
4 |
5 |
A-D-E-F-G-H-I-L-N-O-Q |
直角三角形 |
6 |
4 |
5 |
6 |
A-D-E-F-G-H-I-L-N-P-Q |
一般三角形 |
(II)分支覆盖(判断覆盖):
1.A-B-C(1.左) 2.A-D-E-F-G-H-J-Q(1.右,2右)
3.A-D-E-F-G-H-I-K-Q(1.右,2左,3右)
4.A-D-E-F-G-H-I-L-M-Q(1.右,2左,3左,4右)
5.A-D-E-F-G-H-I-L-N-O-Q( 1.右,2左,3左,4左,5右)
6.A-D-E-F-G-H-I-L-N-P-Q(1.右,2左,3左,4左,5左)
测试用例:
用例ID |
输入值 |
执行路径 |
预期输出 |
||
A |
B |
C |
STR |
||
1 |
0 |
0 |
0 |
A-B-C |
边的值不在范围内! |
2 |
1 |
2 |
3 |
A-D-E-F-G-H-J-Q |
不构成三角形 |
3 |
1 |
2 |
2 |
A-D-E-F-G-H-I-K-Q |
等腰三角形 |
4 |
3 |
3 |
3 |
A-D-E-F-G-H-I-L-M-Q |
等边三角形 |
5 |
3 |
4 |
5 |
A-D-E-F-G-H-I-L-N-O-Q |
直角三角形 |
6 |
4 |
5 |
6 |
A-D-E-F-G-H-I-L-N-P-Q |
一般三角形 |
(III)路径覆盖:
1.A-B-C(1.左) 2.A-D-E-F-G-H-J-Q(1.右,2右)
3.A-D-E-F-G-H-I-K-Q(1.右,2左,3右)
4.A-D-E-F-G-H-I-L-M-Q(1.右,2左,3左,4右)
5.A-D-E-F-G-H-I-L-N-O-Q( 1.右,2左,3左,4左,5右)
6.A-D-E-F-G-H-I-L-N-P-Q(1.右,2左,3左,4左,5左)
测试用例:
用例ID |
输入值 |
执行路径 |
预期输出 |
||
A |
B |
C |
STR |
||
1 |
0 |
0 |
0 |
A-B-C |
边的值不在范围内! |
2 |
1 |
2 |
3 |
A-D-E-F-G-H-J-Q |
不构成三角形 |
3 |
1 |
2 |
2 |
A-D-E-F-G-H-I-K-Q |
等腰三角形 |
4 |
3 |
3 |
3 |
A-D-E-F-G-H-I-L-M-Q |
等边三角形 |
5 |
3 |
4 |
5 |
A-D-E-F-G-H-I-L-N-O-Q |
直角三角形 |
6 |
4 |
5 |
6 |
A-D-E-F-G-H-I-L-N-P-Q |
一般三角形 |
(IV)条件覆盖:各个条件取真或假的可能至少执行一次
编号 |
num[0]>100 |
num[0]<1 |
num[1]>100 |
num[1]<1 |
num[2]>100 |
num[2]<1 |
num[0]>100||num[0]<1||num[1]>100||num[1]<1||num[2]>100||num[2]<1 |
覆盖路径 |
|
1 |
T |
F |
F |
F |
F |
F |
T |
A-B-C |
|
2 |
T |
T |
F |
F |
F |
F |
T |
A-B-C |
|
3 |
T |
T |
T |
F |
F |
F |
T |
A-B-C |
|
4 |
T |
T |
T |
T |
F |
F |
T |
A-B-C |
|
5 |
F |
F |
F |
F |
F |
F |
F |
A-D |
|
总共2^6总选择 |
编号 |
A+B>C |
覆盖路径 |
6 |
T |
H-J |
7 |
F |
H-I-K |
编号 |
a == b |
b == c |
a!=c |
(a == b)||(b == c)&&(a!=c) |
覆盖路径 |
8 |
T |
T |
T |
T |
I-K |
9 |
T |
T |
F |
F |
I-L |
10 |
T |
F |
T |
T |
I-K |
11 |
T |
F |
F |
F |
I-L |
12 |
F |
T |
T |
T |
I-K |
13 |
F |
T |
F |
F |
I-L |
14 |
F |
F |
T |
F |
I-L |
15 |
F |
F |
F |
F |
I-L |
编号 |
a == b |
b == c |
a == b&& b== c |
覆盖路径 |
16 |
T |
T |
T |
L-M |
17 |
T |
F |
F |
L-N |
18 |
F |
T |
F |
L-N |
19 |
F |
F |
F |
L-N |
编号 |
a*a |
b*b |
c*c |
a*a+b*b==c*c |
覆盖路径 |
20 |
T |
T |
T |
T |
N-O |
21 |
T |
T |
F |
F |
N-P |
22 |
T |
F |
T |
F |
N-P |
23 |
T |
F |
F |
F |
N-P |
24 |
F |
T |
T |
F |
N-P |
25 |
F |
T |
F |
F |
N-P |
26 |
F |
F |
T |
F |
N-P |
27 |
F |
F |
F |
F |
N-P |
测试用例:
用例ID |
输入值 |
执行路径 |
覆盖条件 |
预期输出 |
||
A |
B |
C |
X |
|||
1 |
1 |
1 |
101 |
A-B-C |
1 |
边的值不在范围内! |
2 |
3 |
1 |
4 |
A-D-E-F-G-H-J-Q |
1,8 |
不构成三角形 |
3 |
2 |
2 |
1 |
A-D-E-F-G-H-I-K-Q |
8,9 |
等腰三角形 |
4 |
3 |
3 |
3 |
A-D-E-F-G-H-I-L-M-Q |
9,11 |
等边三角形 |
5 |
3 |
4 |
5 |
A-D-E-F-G-H-I-L-N-O-Q |
11,13 |
直角三角形 |
6 |
4 |
2 |
3 |
A-D-E-F-G-H-I-L-N-P-Q |
13,15 |
一般三角形 |
..... |
..... |
..... |
..... |
...... |
...... |
..... |
3)相应Junit测试脚本、执行结果
package Test1;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
public class TestTest {
@Before
public void setUp() throws Exception {
}
@Test
public void testTriangle() {
assertEquals("等腰三角形", Test1.Test.triangle(2,2,1));
assertEquals("等边三角形", Test1.Test.triangle(3,3,3 ));
assertEquals("直角三角形", Test1.Test.triangle(3,4,5));
assertEquals("一般三角形", Test1.Test.triangle(4,2,3));
assertEquals("不构成三角形", Test1.Test.triangle(3,1,4));
}
}
4) 测试小结:
1.测试找到的缺陷清单:判断等腰三角形有缺陷
2. 对源代码的修改建议:
由于前面有对数据排序,所以(a == b)||(b == c)&&(a!=c)改成a == b&&a!=c即可
3.测试心得:
绘制程序流程,是方便接下来对程序做路径或条件覆盖等测试,流程图应正确清晰给出.流程要是都给错了,那么可能导致接下来做的东西都是错误的, 所以在这一步时应认真对待,最好可以与编写该程序的开发人员进行沟通,让他确认给出的流程是否正确.并对其功能的完整性进行检查.
依照流程图,选择合适的测试方法,并进行测试:白盒测试方法有很多种类,语句覆盖->判定覆盖->条件覆盖测试->判定/条件覆盖->条件组合覆盖->路径覆盖测试等,其检错能力左到右是由弱到强的,但是不能盲目选择检错性较强的测试方法,因根据程序需要而定,有些程序路径千千万万,可以适当选择条件覆盖测试方法.