实验二结构性测试(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.测试心得:
绘制程序流程,是方便接下来对程序做路径或条件覆盖等测试,流程图应正确清晰给出.流程要是都给错了,那么可能导致接下来做的东西都是错误的, 所以在这一步时应认真对待,最好可以与编写该程序的开发人员进行沟通,让他确认给出的流程是否正确.并对其功能的完整性进行检查.
依照流程图,选择合适的测试方法,并进行测试:白盒测试方法有很多种类,语句覆盖->判定覆盖->条件覆盖测试->判定/条件覆盖->条件组合覆盖->路径覆盖测试等,其检错能力左到右是由弱到强的,但是不能盲目选择检错性较强的测试方法,因根据程序需要而定,有些程序路径千千万万,可以适当选择条件覆盖测试方法.