第三次作业+105032014101
被测代码链接:http://www.cnblogs.com/ypzeng/p/6626269.html
1、修正流程图
2、测试用例设计
覆盖方式 |
用例编号 |
输入 |
期望输出 |
实际输出 |
是否通过 |
时间 |
||
a |
b |
c |
||||||
语句覆盖 |
001 |
3 |
4 |
5 |
直角三角形 |
直角三角形 |
是 |
2017.03.29 |
语句覆盖 |
002 |
12 |
19 |
20 |
一般三角形 |
一般三角形 |
是 |
2017.03.29 |
判定覆盖 |
003 |
101 |
66 |
78 |
边值不存在 |
边值不存在 |
是 |
2017.03.29 |
判定覆盖 |
004 |
60 |
11 |
12 |
不构成三角形 |
一般三角形 |
否 |
2017.03.29 |
判定覆盖 |
005 |
66 |
66 |
66 |
等边三角形 |
等边三角形 |
是 |
2017.03.29 |
判定覆盖 |
006 |
66 |
77 |
77 |
等腰三角形 |
等腰三角形 |
是 |
2017.03.29 |
判定覆盖 |
007 |
13 |
14 |
15 |
一般三角形 |
一般三角形 |
是 |
2017.03.29 |
判定覆盖 |
008 |
5 |
8 |
13 |
直角三角形 |
直角三角形 |
是 |
2017.03.29 |
条件覆盖 |
009 |
10 |
15 |
50 |
不构成三角形 |
一般三角形 |
否 |
2017.03.29 |
条件覆盖 |
010 |
10 |
10 |
10 |
等边三角形 |
等边三角形 |
是 |
2017.03.29 |
条件覆盖 |
011 |
13 |
14 |
15 |
一般三角形 |
一般三角形 |
是 |
2017.03.29 |
条件覆盖 |
012 |
101 |
101 |
101 |
边值不存在 |
边值不存在 |
是 |
2017.03.29 |
判定/条件覆盖 |
013 |
0 |
101 |
101 |
边值不存在 |
边值不存在 |
是 |
2017.03.29 |
判定/条件覆盖 |
014 |
20 |
15 |
60 |
不构成三角形 |
一般三角形 |
否 |
2017.03.29 |
判定/条件覆盖 |
015 |
33 |
33 |
33 |
等边三角形 |
等边三角形 |
是 |
2017.03.29 |
判定/条件覆盖 |
016 |
3 |
3 |
5 |
等腰三角形 |
等腰三角形 |
是 |
2017.03.29 |
判定/条件覆盖 |
017 |
9 |
8 |
7 |
一般三角形 |
一般三角形 |
是 |
2017.03.29 |
判定/条件覆盖 |
018 |
6 |
8 |
10 |
直角三角形 |
直角三角形 |
是 |
2017.03.29 |
组合覆盖 |
019 |
5 |
5 |
5 |
等边三角形 |
等边三角形 |
是 |
2017.03.29 |
组合覆盖 |
020 |
9 |
12 |
15 |
直角三角形 |
直角三角形 |
是 |
2017.03.29 |
组合覆盖 |
021 |
101 |
102 |
89 |
边值不存在 |
边值不存在 |
是 |
2017.03.29 |
组合覆盖 |
022 |
23 |
23 |
32 |
等腰三角形 |
等腰三角形 |
是 |
2017.03.29 |
路径覆盖 |
023 |
20 |
20 |
20 |
等边三角形 |
等边三角形 |
是 |
2017.03.29 |
路径覆盖 |
024 |
12 |
25 |
16 |
一般三角形 |
一般三角形 |
是 |
2017.03.29 |
路径覆盖 |
025 |
13 |
12 |
13 |
等腰三角形 |
等腰三角形 |
是 |
2017.03.29 |
路径覆盖 |
026 |
10 |
20 |
40 |
不构成三角形 |
一般三角形 |
否 |
2017.03.29 |
路径覆盖 |
027 |
23 |
0 |
56 |
边值不存在 |
边值不存在 |
是 |
2017.03.29 |
路径覆盖 |
028 |
7 |
24 |
25 |
直角三角形 |
直角三角形 |
是 |
2017.03.29 |
3、单元测试框架
import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; public class GetDataTest { @Before public void setUp() throws Exception { } public String change(char c) { switch (c) { case '1': return "等边三角形"; case '2': return "等腰三角形"; case '3': return "直角三角形"; case '4': return "一般三角形"; case '5': return "不构成三角形"; default: break; } return null; } @Test public void testTriangle() { String s1 = change(GetData.triangle(3, 4, 5)); assertEquals("直角三角形", s1); String s2 = change(GetData.triangle(12, 19, 20)); assertEquals("一般三角形", s2); String s3 = change(GetData.triangle(60, 11, 12)); assertEquals("不构成三角形", s3); String s4 = change(GetData.triangle(66, 66, 66)); assertEquals("等边三角形", s4); String s5 = change(GetData.triangle(66, 77, 77)); assertEquals("等腰三角形", s5); } }
4、测试结果
由图可见,在第45行出现了错误。即输入一组“不构成三角形”的数据得到的结果是“一般三角形”。
5、测试小结
(1)根据六种覆盖方法编写的测试用例可以检测代码中的每条分支和路径,揭示隐藏在代码中的错误,对代码的测试会比较彻底,但无法检测代码中遗漏的路径和数据敏感性错误。
(2)使用单元测试框架,测试框架为我们做的最基本的事情,就是允许我们按照某种更简单的方式写测试代码,把每一个测试单元写在一个测试方法里面,然后它会自动找出所有的测试方法,并且根据你的需要,运行所有的测试方法,或者是运行单个测试方法,或者是运行部分测试方法等等。而用main()方法调用,如果有很多类和方法,就可能要写一堆代码,写起来累,运行起来也累。
(3)测试的目的是发现错误,至于找出错误的原因和错误发生的地方不是测试的任务,而是调试的任务。调试的目的是为了证明程序的正确,因此它必须不断地排除错误。它们的出发点不一样。前者是挑错,是一种挑剔过程,属于质盘保证活动。后者是排错,是一种排除过程,是编码活动的一部分。