被测代码地址:http://www.cnblogs.com/wangjiao0-0/p/6622442.html

一、实验目的

掌握基于覆盖理论与基本路径的基本白盒测试方法和实践

二、实验要求

运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例,并运行测试用例检查程序的正确与否,给出程序缺陷小结。

三、实验内容

根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的Junit脚本。

所有的覆盖的技术:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,基本路径测试方法。

包括的内容有:

1) 被测原代码

 1 import java.util.Scanner;
 2
 3 public class Triangle {
 4     public static String triangle(int a, int b, int c) {
 5         if (!((1 <= a && a <= 100) && (1 <= b && b <= 100) && (1 <= c && c <= 100)))
 6             return "边的值不在范围内!";
 7         if (!((a < b + c) && (b < a + c) && (c < a + b)))
 8             return "不构成三角形";
 9         if ((a == b) || (b == c) || (c == a))
10             if (a == b && b == c)
11                 return "等边三角形";
12             else
13                 return "等腰三角形";
14         else {
15             if ((a * a == b * b + c * c) || (b * b == a * a + c * c) || (c * c == a * a + b * b))
16                 return "直角三角形";
17             return "一般三角形";
18         }
19     }
20
21     public static void main(String[] args) {
22         String input = "";
23         int a, b, c;
24         Scanner scan = new Scanner(System.in);
25         while (true) {
26             System.out.print("请输入三角形的三条边");
27             input = scan.nextLine().trim();
28             String[] buf = input.split("[\\s+,,]");
29             if (input.equals(""))
30                 continue;
31             else if (input.equalsIgnoreCase("return"))//退出程序
32                 break;
33             else if (buf.length == 3) {
34                 try {
35                     a = Integer.valueOf(buf[0]);
36                     b = Integer.valueOf(buf[1]);
37                     c = Integer.valueOf(buf[2]);
38                     System.out.println(triangle(a, b, c));
39                 } catch (NumberFormatException e) {
40                     System.out.println("请输入整数");
41                 }
42             } else//长度错误
43                 System.out.println("格式错误");
44         }
45         System.out.println("谢谢使用,再见~");
46         scan.close();
47     }
48 }

View Code

2)依据覆盖技术,测试用例列表:

(DD-路径图)

DD-路径(只压缩链路经)

程序图节点 DD-路径
4 A
5 B
6 C
7 D
8 E
9 F
10 G
11 H
12,13 I
14,15 J
16 K
17 L
18 M

(I)语句覆盖:

A-B-C-M

A-B-D-E-M

A-B-D-F-J-L-M

A-B-D-F-J-K-M

A-B-D-F-G-I-M

A-B-D-F-G-H-M

测试用例:

用例ID

输入值

执行路径

预期输出

a

b

c

1

-1

-1

-1

A-B-C-M

边的值不在范围内

2

1

2

1

A-B-D-E-M

不构成三角形

3

3

3

3

A-B-D-F-J-L-M

等边三角形

4

3

3

4

A-B-D-F-J-K-M

等腰三角形

5

3

4

5

A-B-D-F-G-I-M

直角三角形

6

2

4

3

A-B-D-F-G-H-M

一般三角形

(II)分支覆盖(判断覆盖):

A-B-C-M

A-B-D-E-M

A-B-D-F-J-L-M

A-B-D-F-J-K-M

A-B-D-F-G-I-M

A-B-D-F-G-H-M

测试用例:

用例ID

输入值

执行路径

预期输出

a

b

c

1

0

0

0

A-B-C-M

边的值不在范围内

2

3

2

1

A-B-D-E-M

不构成三角形

3

5

5

5

A-B-D-F-J-L-M

等边三角形

4

5

5

6

A-B-D-F-J-K-M

等腰三角形

5

6

8

10

A-B-D-F-G-I-M

直角三角形

6

3

5

6

A-B-D-F-G-H-M

一般三角形

(III)路径覆盖: 

A-B-C-M

A-B-D-E-M

A-B-D-F-J-L-M

A-B-D-F-J-K-M

A-B-D-F-G-I-M

A-B-D-F-G-H-M

测试用例:

用例ID

输入值

执行路径

预期输出

a

b

c

1

101

0

0

A-B-C-M

边的值不在范围内

2

4

2

2

A-B-D-E-M

不构成三角形

3

100

100

100

A-B-D-F-J-L-M

等边三角形

4

50

50

80

A-B-D-F-J-K-M

等腰三角形

5

6

8

10

A-B-D-F-G-I-M

直角三角形

6

10

15

20

A-B-D-F-G-H-M

一般三角形

(IV)条件覆盖:

编号

1<=a<=100

1<=b<=100

1<=c<=100

!(1<=a<=100&&1<=b<=100

&&1<=c<=100)

覆盖路径

1

F

F

F

T

B-C-M

2

F

F

T

T

B-C-M

3

T

F

F

T

B-C-M

4

T

F

T

T

B-C-M

5

T

T

T

F

B-D

6

F

T

F

T

B-C-M

7

F

T

T

T

B-C-M

8

T

T

F

F B-D

编号

a < b + c

b < a + c

c < a + b

!(a < b +c&&b < a + c

&&c < a + b)

覆盖路径

9

F

F

F

T

D-E-M

10

F

F

T

T

D-E-M

11

T

F

F

T

D-E-M

12

T

F

T

T

D-E-M

13

T

T

T

F

D-F

14

F

T

F

T

D-E-M

15

F

T

T

T

D-E-M

16

T

T

F

T D-E-M

编号

a == b

b == c

c==a

(a == b) || (b == c) || (c == a)

覆盖路径

17

F

F

F

F

F-J

18

F

F

T

T

F-G

19

T

F

F

T

F-G

20

T

F

T

T

F-G

21

T

T

T

T

F-G

22

F

T

F

T

F-G

23

F

T

T

T

D-F

24

T

T

F

T D-F

编号

a == b

b == c

(a == b) &&(b == c) 

覆盖路径

25

F

F

F

G-I

26

F

T

F

G-I

27

T

T

T

G-H

28

T

F

F

G-I

编号

a * a == b * b + c * c

b * b == a * a + c * c

c * c == a * a + b * b

(a == b) || (b == c) || (c == a)

覆盖路径

29

F

F

F

F

J-L

30

F

F

T

T

J-K

31

T

F

F

T

J-K

32

T

F

T

T

J-K

33

T

T

T

T

J-K

34

F

T

F

T

J-K

35

F

T

T

T

J-K

36

T

T

F

T J-K

测试用例:

用例ID

输入值

执行路径

覆盖条件

预期输出

a

b

c

1

0

0

0

A-B-C-M

1

边的值不在范围内

2

1

2

4

A-B-D-E-M

5,9

不构成三角形

3

4 

4

4

A-B-D-F-G-H-M

5,13,21,27

等边三角形

4

2

3

2

A-B-D-F-G-I-M

5,13,18,25

等腰三角形

5

2

6

7

A-B-D-F-J-L-M

5,13,17,30

一般三角形

6

3

5

4

A-B-D-F-J-K-M

5,13,17,29

直角三角形

7

2

2

3

A-B-D-F-G-I-M

5,13,19,26

等腰三角形

8

3

2

2

A-B-D-F-G-I-M

5,13,22,26

等腰三角形

3)相应Junit测试脚本、执行结果

  1 package com.test;
  2 import com.junit.Triangle;
  3 import static org.junit.Assert.*;
  4
  5 import org.junit.Before;
  6 import org.junit.Test;
  7
  8
  9 public class TriangleTest {
 10     private static Triangle trangle = new Triangle();
 11
 12     @Before
 13     public void setUp() throws Exception {
 14
 15     }
 16
 17
 18
 19     // 语句覆盖
 20     @Test
 21     public void statementTest() {
 22         assertEquals("边的值不在范围内!", trangle.triangle(-1, -1, -1));
 23         assertEquals("不构成三角形", trangle.triangle(1, 2, 1));
 24         assertEquals("等边三角形", trangle.triangle(3, 3, 3));
 25         assertEquals("等腰三角形", trangle.triangle(3, 3, 4));
 26         assertEquals("直角三角形", trangle.triangle(3, 4, 5));
 27         assertEquals("一般三角形", trangle.triangle(2, 4, 3));
 28     }
 29
 30     // 判定覆盖
 31     @Test
 32     public void judgeTest1() {
 33
 34         assertEquals("不构成三角形", trangle.triangle(3, 2, 1));
 35
 36     }
 37
 38     @Test
 39     public void judgeTest2() {
 40         assertEquals("边的值不在范围内!", trangle.triangle(0, 0, 0));
 41
 42     }
 43
 44     @Test
 45     public void judgeTest3() {
 46
 47         assertEquals("等边三角形", trangle.triangle(5, 5, 5));
 48     }
 49
 50     @Test
 51     public void judgeTest4() {
 52
 53         assertEquals("等腰三角形", trangle.triangle(5, 5, 6));
 54     }
 55
 56     @Test
 57     public void judgeTest5() {
 58
 59         assertEquals("直角三角形", trangle.triangle(6, 8, 10));
 60
 61     }
 62
 63     @Test
 64     public void judgeTest6() {
 65
 66         assertEquals("一般三角形", trangle.triangle(3, 5, 6));
 67     }
 68
 69     // 路径覆盖
 70     @Test
 71     public void pathTest1() {
 72         assertEquals("边的值不在范围内!", trangle.triangle(101, 0, 0));
 73
 74     }
 75
 76     @Test
 77     public void pathTest2() {
 78
 79         assertEquals("不构成三角形", trangle.triangle(4, 2, 2));
 80
 81     }
 82
 83     @Test
 84     public void pathTest3() {
 85
 86         assertEquals("等边三角形", trangle.triangle(100, 100, 100));
 87
 88     }
 89
 90     @Test
 91     public void pathTest4() {
 92
 93         assertEquals("等腰三角形", trangle.triangle(50, 50, 80));
 94
 95     }
 96
 97     @Test
 98     public void pathTest5() {
 99
100         assertEquals("直角三角形", trangle.triangle(6, 8, 10));
101
102     }
103
104     @Test
105     public void pathTest6() {
106         assertEquals("一般三角形", trangle.triangle(10, 15, 20));
107     }
108
109     // 条件覆盖
110     @Test
111     public void conditionTest1() {
112         assertEquals("边的值不在范围内!", trangle.triangle(0, 0, 0));
113
114     }
115
116
117     @Test
118     public void conditionTest2() {
119
120         assertEquals("不构成三角形", trangle.triangle(1, 2, 4));
121     }
122
123
124     @Test
125     public void conditionTest3() {
126
127         assertEquals("等边三角形", trangle.triangle(4, 4, 4));
128
129     }
130
131
132     @Test
133     public void conditionTest4() {
134
135         assertEquals("等腰三角形", trangle.triangle(2, 3, 2));
136
137     }
138
139
140     @Test
141     public void conditionTest5() {
142
143         assertEquals("直角三角形", trangle.triangle(3, 5, 4));
144
145     }
146
147
148     @Test
149     public void conditionTest6() {
150
151         assertEquals("一般三角形", trangle.triangle(2, 6, 7));
152
153     }
154
155
156     @Test
157     public void conditionTest7() {
158
159         assertEquals("等腰三角形", trangle.triangle(2, 2, 3));
160
161     }
162
163
164     @Test
165     public void conditionTest8() {
166
167         assertEquals("等腰三角形", trangle.triangle(3, 2, 2));
168     }
169
170 }

View Code

4)给出测试参数化和打包测试的脚本,并生成执行结果

参数化测试

 1 package com.test;
 2
 3 import static org.junit.Assert.*;
 4
 5 import java.util.Arrays;
 6 import java.util.Collection;
 7
 8 import org.junit.Test;
 9 import org.junit.runner.RunWith;
10 import org.junit.runners.Parameterized;
11 import org.junit.runners.Parameterized.Parameters;
12
13 import com.junit.Triangle;
14
15
16 @RunWith(Parameterized.class)
17 public class TriangleParamTest {
18     private int param1;
19     private int param2;
20     private int param3;
21     private String result;
22
23     Triangle triangle = new Triangle();
24
25     @Parameters
26     public static Collection data(){
27         return Arrays.asList(new Object[][]{
28             {-1, -1, -1,"边的值不在范围内!"},
29             {1, 2, 1,"不构成三角形"},
30             {3, 3, 3,"等边三角形"},
31             {3, 3, 4,"等腰三角形"},
32             {3, 4, 5,"直角三角形"},
33             {2, 4, 3,"一般三角形"}
34
35         });
36     }
37
38     public TriangleParamTest(int param1,int param2,int param3,String result){
39         this.param1 = param1;
40         this.param2 = param2;
41         this.param3 = param3;
42         this.result = result;
43     }
44
45     @Test
46     public void testParam(){
47         String rs = triangle.triangle(param1, param2, param3);
48         assertEquals(rs,result);
49     }
50
51 }

View Code

打包测试

 1 package com.test;
 2
 3 import org.junit.runner.RunWith;
 4 import org.junit.runners.Suite;
 5
 6
 7 @RunWith(Suite.class)
 8 @Suite.SuiteClasses(
 9         {
10             TriangleTest.class,
11             TriangleParamTest.class,
12
13         })
14 public class AllTriangleTest {
15
16 }

View Code

4、测试小结:

  代码能够通过所有测试用例,未发现缺陷。

  修改建议:程序的退出方式不够友好,建议修改。

   通过本次实验我对白盒测试有了更深刻的理解。进一步掌握了白盒测试的基本路径测试方法,能够更好的设计测试用例。同时,我还掌握了Junit脚本的使用方法。其中测试参数化和打包测试可以让测试更加简洁明了。

转载于:https://www.cnblogs.com/lucerner/p/6698106.html

实验二+087+饶慧敏相关推荐

  1. 实验四+087+饶慧敏

    一.实验目的 1) 学习QTP工具的使用 2)了解黑盒自动化测试 二.实验要求 (1)对被测程序进行黑盒测试用例设计 (2)对QTP的飞机订票系统的任一界面或控件实现自动化测试.(测试的具体自选) ( ...

  2. 实验三+087+饶慧敏

    一.实验目的 掌握黑盒测试用例设计方法 二.实验要求 (1)对被测程序进行黑盒测试用例设计 (2)运用等价类.边界值.决策表.状态图法等进行测试用例设计. (3)对手机上任意一款音乐软件进行黑盒测试实 ...

  3. 第5次作业+087+饶慧敏

    测试链接:http://www.cnblogs.com/leezoey/p/6803945.html 1)被测项目界面 该同学暂未做与界面相关的方法以及界面的实现. 2)测试用例设计表 符号标记:耳机 ...

  4. 第4次作业类测试代码+087+饶慧敏

    1.类图 2.主要界面 当输入为空,输入非数值型数据时,程序会弹出错误信息,并要求重新输入: 正常情况下的输出结果为: 3.代码如下 1 import java.util.Arrays; 2 3 pu ...

  5. 刘知远 陈慧敏:流言止于“智”者——网络虚假信息的特征与检测

    来源:清华大学藤影荷声 本文约5000字,建议阅读10分钟 本文为你介绍网络虚假信息的一些特征和检测方法. 互联网的深度普及加速了"信息时代"的到来,网络中每个人都可以以极低甚至& ...

  6. 数据库原理实验二 数据库管理 实验报告

    广州大学学生实验报告实验二:数据库管理 此篇分享仅供参考学习,图文禁复制,勿作他用!谢谢配合! 数据库原理实验之实验二:数据库管理 软件:Oracle SQL Developer 今天实验才刚开始,花 ...

  7. java基本语句回文数实验_实验二 java基本数据类型与把持语句.doc

    实验二 java基本数据类型与把持语句.doc 还剩 4页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 5System.out.println(num ...

  8. python顺序结构实验设计_实验二 顺序结构程序设计(验证性实验)

    安徽工程大学 Python程序设计实验报告 班级物流192 姓名 徐敏 学号 3190505232 成绩 _____ 日期 2020.3.22 指导老师 修宇 [实验名称] 实验二 顺序结构程序设计( ...

  9. 数据库实验二 SQL语言

    实验二 SQL语言 实验目的 熟悉并掌握创建表,插入记录,查询记录,删除记录,修改记录. 创建索引,删除索引. 创建视图,使用视图,删除视图. 实验内容 现有一个单位内部的小型图书借阅系统,假设每本图 ...

最新文章

  1. oracle求sql的cpu贡献率,oracle 实时查询最耗CPU资源的SQL语句
  2. linux rpm找不到命令_Linux安装软件
  3. 如何查看表和索引的统计信息
  4. Pubwin EP 正式版完整安装全程-完整安装配置
  5. 蓝牙耳机和蓝牙鼠标相互干扰_蓝牙耳机推荐:编辑亲测后中肯评价五大爆款蓝牙耳机...
  6. 吉特仓储管理系统--开源2018年源码
  7. 该文件可能是只读的 或者您要访问的位置_喔噢小贴士:如何保护PPT不被更改,将其设为只读...
  8. 人大副教授:本科生一定要做科研吗?九大灵魂拷问
  9. springboot使用redis做session会话管理
  10. 18.TCP使用的注意事项
  11. css系列教程1-选择器全解
  12. 游戏开发学什么?四步修炼骨灰级高手
  13. Oracle表空间设计理念
  14. 利用阿斯克码打印A到Z
  15. 免费历史文献数字资源
  16. mysql trigger 设置错误ERROR1419
  17. html是用cdn资源,网站常用前端公共库CDN服务资源(百度+360)
  18. 感知机算法(一)---原理
  19. Parent directory of crack_capcha.model doesn't exist, can't save. (tensorflow 报错)
  20. 黑客‘劫持’了一颗卫星,用它直播黑客大会和放电影,并且还完全合法?

热门文章

  1. 18.10.24 考试总结
  2. 前端canvas实现图画工具
  3. 淘宝技术这十年 知识点
  4. 大数据云计算——2020大数据云计算岗面经面试问题和经验一
  5. 华为OLT 注册过程
  6. 如何制作引人注目的PPT幻灯片
  7. Python爬虫兼职,在家也能赚钱
  8. 以客户思维重 塑品牌营销模式
  9. 动态网页制作怎么这么难
  10. 最常用的大文件传输方法有哪些,小编给你们细说