实验二+087+饶慧敏
被测代码地址: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+饶慧敏相关推荐
- 实验四+087+饶慧敏
一.实验目的 1) 学习QTP工具的使用 2)了解黑盒自动化测试 二.实验要求 (1)对被测程序进行黑盒测试用例设计 (2)对QTP的飞机订票系统的任一界面或控件实现自动化测试.(测试的具体自选) ( ...
- 实验三+087+饶慧敏
一.实验目的 掌握黑盒测试用例设计方法 二.实验要求 (1)对被测程序进行黑盒测试用例设计 (2)运用等价类.边界值.决策表.状态图法等进行测试用例设计. (3)对手机上任意一款音乐软件进行黑盒测试实 ...
- 第5次作业+087+饶慧敏
测试链接:http://www.cnblogs.com/leezoey/p/6803945.html 1)被测项目界面 该同学暂未做与界面相关的方法以及界面的实现. 2)测试用例设计表 符号标记:耳机 ...
- 第4次作业类测试代码+087+饶慧敏
1.类图 2.主要界面 当输入为空,输入非数值型数据时,程序会弹出错误信息,并要求重新输入: 正常情况下的输出结果为: 3.代码如下 1 import java.util.Arrays; 2 3 pu ...
- 刘知远 陈慧敏:流言止于“智”者——网络虚假信息的特征与检测
来源:清华大学藤影荷声 本文约5000字,建议阅读10分钟 本文为你介绍网络虚假信息的一些特征和检测方法. 互联网的深度普及加速了"信息时代"的到来,网络中每个人都可以以极低甚至& ...
- 数据库原理实验二 数据库管理 实验报告
广州大学学生实验报告实验二:数据库管理 此篇分享仅供参考学习,图文禁复制,勿作他用!谢谢配合! 数据库原理实验之实验二:数据库管理 软件:Oracle SQL Developer 今天实验才刚开始,花 ...
- java基本语句回文数实验_实验二 java基本数据类型与把持语句.doc
实验二 java基本数据类型与把持语句.doc 还剩 4页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 5System.out.println(num ...
- python顺序结构实验设计_实验二 顺序结构程序设计(验证性实验)
安徽工程大学 Python程序设计实验报告 班级物流192 姓名 徐敏 学号 3190505232 成绩 _____ 日期 2020.3.22 指导老师 修宇 [实验名称] 实验二 顺序结构程序设计( ...
- 数据库实验二 SQL语言
实验二 SQL语言 实验目的 熟悉并掌握创建表,插入记录,查询记录,删除记录,修改记录. 创建索引,删除索引. 创建视图,使用视图,删除视图. 实验内容 现有一个单位内部的小型图书借阅系统,假设每本图 ...
最新文章
- oracle求sql的cpu贡献率,oracle 实时查询最耗CPU资源的SQL语句
- linux rpm找不到命令_Linux安装软件
- 如何查看表和索引的统计信息
- Pubwin EP 正式版完整安装全程-完整安装配置
- 蓝牙耳机和蓝牙鼠标相互干扰_蓝牙耳机推荐:编辑亲测后中肯评价五大爆款蓝牙耳机...
- 吉特仓储管理系统--开源2018年源码
- 该文件可能是只读的 或者您要访问的位置_喔噢小贴士:如何保护PPT不被更改,将其设为只读...
- 人大副教授:本科生一定要做科研吗?九大灵魂拷问
- springboot使用redis做session会话管理
- 18.TCP使用的注意事项
- css系列教程1-选择器全解
- 游戏开发学什么?四步修炼骨灰级高手
- Oracle表空间设计理念
- 利用阿斯克码打印A到Z
- 免费历史文献数字资源
- mysql trigger 设置错误ERROR1419
- html是用cdn资源,网站常用前端公共库CDN服务资源(百度+360)
- 感知机算法(一)---原理
- Parent directory of crack_capcha.model doesn't exist, can't save. (tensorflow 报错)
- 黑客‘劫持’了一颗卫星,用它直播黑客大会和放电影,并且还完全合法?