首页 > 代码库 > 实验二+049+尤帆贤
实验二+049+尤帆贤
一、实验目的
掌握基于覆盖理论与基本路径的基本白盒测试方法和实践
二、实验要求
运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例,并运行测试用例检查程序的正确与否,给出程序缺陷小结。
三、实验内容
根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的Junit脚本。
所有的覆盖的技术:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,基本路径测试方法。
包括的内容有:
1) 被测原代码:
import java.util.InputMismatchException; import java.util.Scanner; public class TestDemo { public static String Triangle(int side1,int side2,int side3)//判断是否构成三角形及三角形的种类 { int temp; if(side1>side2) {temp=side1;side1=side2;side2=temp;}//排个序让小数在前,大数在后(不能保证前两个数的顺序) if(side2>side3) {temp=side2;side2=side3;side3=temp;} String result="三角形"; if(side1+side2<=side3) return "不构成"+result; else if(side1==side2 && side2==side3) return "等边"+result; else if(side1==side2 || side2==side3) return "等腰"+result; else if(side1*side1+side2*side2==side3*side3) return "直角"+result; else return "普通"+result; } public static boolean Check(int num) //检验输入的数据是否属于[1,100] { if(num<1 || num>100) { System.out.println("边的值不在范围内!"); return false; } return true; } public static void main(String[] args) { while(true) { Scanner scanner=new Scanner(System.in); int side1=0,side2=0,side3=0; boolean flag=true; //用于标记输入的数据是否合法 System.out.println("请输入三角形的三条边"); try{ //捕获输入异常 side1=scanner.nextInt(); side2=scanner.nextInt(); side3=scanner.nextInt(); } catch(InputMismatchException e) //显示输入异常 { flag=false; System.out.println("请输入整数!"); } if(flag) //若输入有误则直接退出 if(Check(side1) && Check(side2) && Check(side3)) System.out.println(Triangle(side1,side2,side3)); } } }
2)依据覆盖技术,测试用例列表:
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));
}
}
4)给出测试参数化和打包测试的脚本,并生成执行结果
4、测试小结:
在本次测试实验中,学会了单元测试框架的使用,对Junit4的开发与使用又有了更深的了解。
实验二+049+尤帆贤