测试链接: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)测试人员很难说服开发人员修改他觉得没必要改,但其实很重要的修改。