测试链接:http://www.cnblogs.com/zbxun/p/6628545.html
实验二结构性测试(4学时)
一、实验目的
掌握基于覆盖理论与基本路径的基本白盒测试方法和实践
二、实验要求
运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例,并运行测试用例检查程序的正确与否,给出程序缺陷小结。
三、实验内容
根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的Junit脚本。
所有的覆盖的技术:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,基本路径测试方法。
包括的内容有:
1) 被测原代码
2)依据覆盖技术,测试用例列表:
3)相应Junit测试脚本、执行结果
4)给出测试参数化和打包测试的脚本,并生成执行结果
四、实验步骤
1) 被测原代码
1 Input(a,b,c)
2 String result;
3 if( a>=1 &&a<=100&&b>=1&&b<=100&&c>=1&&c<=100){
4 if(a<b+c &&b<a+c&& c<a+b){
5 if(a==b || a==c||b==c){
6 if(a==b &&b==c)
7 result = "等边三角形";
8 else
9 result = "等腰三角形";
10 }else if(a*a+b*b==c*c || b*b+c*c==a*a || a*a+c*c==b*b){
11 result = "直角三角形";
12 }else{
13 result = "一般三角形";
14 }
15 }else{
16 result = "不构成三角形";
17 }
18 }else{
19 result = "边的值不在范围内!";
20 }
21 OutPut(result)
2)依据覆盖技术的测试用例:
程序图 :
DD-路径图:
DD-路径(只压缩链路经)
程序图节点 |
DD-路径 |
1,2 |
A |
3 |
B |
4 |
C |
5 |
D |
6 |
E |
7 |
F |
8,9 |
G |
10 |
H |
11 |
I |
12,13,14 |
J |
15,16,17 |
K |
18,19,20 |
L |
21 |
M |
(I)语句覆盖:
A-B-C-D-E-F-M和A-B-C-D-E-G-M
和A-B-C-D-H-I-M和A-B-C-D-H-J-M
和A-B-C-K-M和A-B-L-M
测试用例:
用例ID |
输入值 |
执行路径 |
预期输出 |
||
a |
b |
c |
result |
||
1 |
3 |
3 |
3 |
A-B-C-D-E-F-M |
等边三角形 |
2 |
3 |
3 |
4 |
A-B-C-D-E-G-M |
等腰三角形 |
3 |
3 |
4 |
5 |
A-B-C-D-H-I-M |
直角三角形 |
4 |
3 |
4 |
6 |
A-B-C-D-H-J-M |
一般三角形 |
5 |
1 |
1 |
3 |
A-B-C-K-M |
不构成三角形 |
6 |
101 |
99 |
99 |
A-B-L-M |
边的值不在范围内! |
(II)分支覆盖(判断覆盖):
A-B-C-D-E-F-M和A-B-C-D-E-G-M
和A-B-C-D-H-I-M和A-B-C-D-H-J-M
和A-B-C-K-M和A-B-L-M
测试用例:
用例ID |
输入值 |
执行路径 |
预期输出 |
||
a |
b |
c |
result |
||
1 |
3 |
3 |
3 |
A-B-C-D-E-F-M |
等边三角形 |
2 |
3 |
3 |
4 |
A-B-C-D-E-G-M |
等腰三角形 |
3 |
3 |
4 |
5 |
A-B-C-D-H-I-M |
直角三角形 |
4 |
3 |
4 |
6 |
A-B-C-D-H-J-M |
一般三角形 |
5 |
1 |
1 |
3 |
A-B-C-K-M |
不构成三角形 |
6 |
101 |
99 |
99 |
A-B-L-M |
边的值不在范围内! |
(III)路径覆盖:
A-B-C-D-E-F-M和A-B-C-D-E-G-M
和A-B-C-D-H-I-M和A-B-C-D-H-J-M
和A-B-C-K-M和A-B-L-M
测试用例:
用例ID |
输入值 |
执行路径 |
预期输出 |
||
a |
b |
c |
result |
||
1 |
3 |
3 |
3 |
A-B-C-D-E-F-M |
等边三角形 |
2 |
3 |
3 |
4 |
A-B-C-D-E-G-M |
等腰三角形 |
3 |
3 |
4 |
5 |
A-B-C-D-H-I-M |
直角三角形 |
4 |
3 |
4 |
6 |
A-B-C-D-H-J-M |
一般三角形 |
5 |
1 |
1 |
3 |
A-B-C-K-M |
不构成三角形 |
6 |
101 |
99 |
99 |
A-B-L-M |
边的值不在范围内! |
(IV)条件覆盖:各个条件取真或假的可能至少执行一次
编号 |
a>=1 |
a<=100 |
b>=1 |
b<=100 |
c>=1 |
c<=100 |
a>=1 &&a<=100&&b>=1&&b<=100&&c>=1&&c<=100 |
覆盖路径 |
1 |
T |
F |
F |
F |
F |
F |
F |
B-C |
2 |
T |
T |
F |
F |
F |
F |
F |
B-L |
3 |
T |
T |
T |
F |
F |
F |
F |
B-L |
4 |
T |
T |
T |
T |
F |
F |
F |
B-L |
5 |
T |
T |
T |
T |
T |
F |
F |
B-L |
6 |
T |
T |
T |
T |
T |
T |
F |
B-L |
7 |
T |
T |
T |
T |
T |
T |
T |
B-C |
总共2^6总选择 |
编号 |
a<b+c |
b<a+c |
c<a+b |
a<b+c &&b<a+c&& c<a+b |
覆盖路径 |
1 |
T |
F |
F |
F |
C-K |
2 |
T |
T |
F |
F |
C-K |
3 |
T |
T |
T |
T |
C-D |
4 |
T |
F |
T |
F |
C-K |
5 |
F |
F |
F |
F |
C-K |
6 |
F |
T |
F |
F |
C-K |
7 |
F |
F |
T |
F |
C-K |
8 |
F |
T |
T |
F |
C-K |
编号 |
a==b |
a==c |
b==c |
a==b || a==c||b==c |
覆盖路径 |
1 |
T |
F |
F |
T |
D-E |
2 |
T |
T |
F |
T |
D-E |
3 |
T |
T |
T |
T |
D-E |
4 |
T |
F |
T |
T |
D-E |
5 |
F |
F |
F |
F |
D-H |
6 |
F |
T |
F |
T |
D-E |
7 |
F |
F |
T |
T |
D-E |
8 |
F |
T |
T |
T |
D-E |
编号 |
a==b |
b==c |
a==b &&b==c |
覆盖路径 |
1 |
F |
F |
F |
E-G |
2 |
F |
T |
F |
E-G |
3 |
T |
F |
F |
E-G |
4 |
T |
T |
T |
E-F |
编号 |
a*a+b*b==c*c |
b*b+c*c==a*a |
a*a+c*c==b*b |
a*a+b*b==c*c || b*b+c*c==a*a || a*a+c*c==b*b |
覆盖路径 |
1 |
T |
F |
F |
T |
H-I |
2 |
T |
T |
F |
T |
H-I |
3 |
T |
T |
T |
T |
H-I |
4 |
T |
F |
T |
T |
H-I |
5 |
F |
F |
F |
F |
H-J |
6 |
F |
T |
F |
T |
H-I |
7 |
F |
F |
T |
T |
H-I |
8 |
F |
T |
T |
T |
H-I |
测试用例:
用例ID |
输入值 |
执行路径 |
预期输出 |
||
a |
b |
c |
result |
||
1 |
3 |
3 |
3 |
A-B-C-D-E-F-M |
等边三角形 |
2 |
3 |
3 |
4 |
A-B-C-D-E-G-M |
等腰三角形 |
3 |
3 |
4 |
5 |
A-B-C-D-H-I-M |
直角三角形 |
4 |
3 |
4 |
6 |
A-B-C-D-H-J-M |
一般三角形 |
5 |
1 |
1 |
3 |
A-B-C-K-M |
不构成三角形 |
6 |
101 |
99 |
99 |
A-B-L-M |
边的值不在范围内! |
共2^17种 |
3)相应Junit测试脚本:
import static org.junit.Assert.*;
import org.junit.BeforeClass;
import org.junit.Test;
public class test1Test {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@Test
public final void testTriangle() {
//fail("Not yet implemented"); // TODO
assertEquals("等边三角形",test1.triangle(3,3,3));
assertEquals("等腰三角形",test1.triangle(3,3,4));
assertEquals("直角三角形",test1.triangle(3,4,5));
assertEquals("一般三角形",test1.triangle(3,4,6));
assertEquals("不构成三角形",test1.triangle(1,1,3));
assertEquals("边的值不在范围内!",test1.triangle(101,99,99));
}
}
五 、测试小结:
1.测试找到的缺陷清单:无
2. 对源代码的修改建议
(1)对源代码的修改情况:a==b &&b==c && a==c冗余,改成a==b &&b==c
(2)添加控制程序退出,而不是用,while(true)无限循环
3.测试总结与心得体会
(1)条件覆盖中会随着一个判断语句中条件的增多呈指数上升,很难手工全测试完。
(2)各种覆盖方式容易重合,造成测试冗余。
(3)测试人员很难说服开发人员修改他觉得没必要改,但其实很重要的修改。