实验二+087+饶慧敏
被測代碼地址:http://www.cnblogs.com/wangjiao0-0/p/6622442.html
一、實(shí)驗(yàn)?zāi)康?/h3>
掌握基于覆蓋理論與基本路徑的基本白盒測試方法和實(shí)踐
二、實(shí)驗(yàn)要求
運(yùn)用邏輯覆蓋測試的覆蓋準(zhǔn)則設(shè)計(jì)被測程序的測試用例,并運(yùn)行測試用例檢查程序的正確與否,給出程序缺陷小結(jié)。
三、實(shí)驗(yàn)內(nèi)容
根據(jù)各位同學(xué)自己的被測程序,分別作出各類白盒測試技術(shù)的用例設(shè)計(jì)和相應(yīng)的Junit腳本。
所有的覆蓋的技術(shù):語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、組合覆蓋、路徑覆蓋,基本路徑測試方法。
包括的內(nèi)容有:
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 "邊的值不在范圍內(nèi)!"; 7 if (!((a < b + c) && (b < a + c) && (c < a + b))) 8 return "不構(gòu)成三角形"; 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("請輸入整數(shù)"); 41 } 42 } else//長度錯(cuò)誤 43 System.out.println("格式錯(cuò)誤"); 44 } 45 System.out.println("謝謝使用,再見~"); 46 scan.close(); 47 } 48 } View Code?
2)依據(jù)覆蓋技術(shù),測試用例列表:
(DD-路徑圖)
DD-路徑(只壓縮鏈路經(jīng))
| 程序圖節(jié)點(diǎn) | 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 | 輸入值 | 執(zhí)行路徑 | ? 預(yù)期輸出 ? | ||
| a | b | c | |||
| 1 | -1 | -1 | -1 | A-B-C-M | 邊的值不在范圍內(nèi) |
| 2 | 1 | 2 | 1 | A-B-D-E-M | 不構(gòu)成三角形 |
| 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 | 輸入值 | 執(zhí)行路徑 | ? 預(yù)期輸出 ? | ||
| a | b | c | |||
| 1 | 0 | 0 | 0 | A-B-C-M | 邊的值不在范圍內(nèi) |
| 2 | 3 | 2 | 1 | A-B-D-E-M | 不構(gòu)成三角形 |
| 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 | 輸入值 | 執(zhí)行路徑 | ? 預(yù)期輸出 ? | ||
| a | b | c | |||
| 1 | 101 | 0 | 0 | A-B-C-M | 邊的值不在范圍內(nèi) |
| 2 | 4 | 2 | 2 | A-B-D-E-M | 不構(gòu)成三角形 |
| 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)條件覆蓋:
?
| 編號(hào) | 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 |
?
?
| 編號(hào) | 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 |
?
| 編號(hào) | 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 |
?
| 編號(hào) | 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 |
?
| 編號(hào) | 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 | 輸入值 | 執(zhí)行路徑 | 覆蓋條件 | ? 預(yù)期輸出 ? | ||
| a | b | c | ||||
| 1 | 0 | 0 | 0 | A-B-C-M | 1 | 邊的值不在范圍內(nèi) |
| 2 | 1 | 2 | 4 | A-B-D-E-M | 5,9 | 不構(gòu)成三角形 |
| 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)相應(yīng)Junit測試腳本、執(zhí)行結(jié)果
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("邊的值不在范圍內(nèi)!", trangle.triangle(-1, -1, -1)); 23 assertEquals("不構(gòu)成三角形", 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("不構(gòu)成三角形", trangle.triangle(3, 2, 1)); 35 36 } 37 38 @Test 39 public void judgeTest2() { 40 assertEquals("邊的值不在范圍內(nèi)!", 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("邊的值不在范圍內(nèi)!", trangle.triangle(101, 0, 0)); 73 74 } 75 76 @Test 77 public void pathTest2() { 78 79 assertEquals("不構(gòu)成三角形", 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("邊的值不在范圍內(nèi)!", trangle.triangle(0, 0, 0)); 113 114 } 115 116 117 @Test 118 public void conditionTest2() { 119 120 assertEquals("不構(gòu)成三角形", 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)給出測試參數(shù)化和打包測試的腳本,并生成執(zhí)行結(jié)果
?參數(shù)化測試
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,"邊的值不在范圍內(nèi)!"}, 29 {1, 2, 1,"不構(gòu)成三角形"}, 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、測試小結(jié):
代碼能夠通過所有測試用例,未發(fā)現(xiàn)缺陷。
修改建議:程序的退出方式不夠友好,建議修改。
? ? 通過本次實(shí)驗(yàn)我對白盒測試有了更深刻的理解。進(jìn)一步掌握了白盒測試的基本路徑測試方法,能夠更好的設(shè)計(jì)測試用例。同時(shí),我還掌握了Junit腳本的使用方法。其中測試參數(shù)化和打包測試可以讓測試更加簡潔明了。
轉(zhuǎn)載于:https://www.cnblogs.com/lucerner/p/6698106.html
總結(jié)
以上是生活随笔為你收集整理的实验二+087+饶慧敏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SDCMS131批量安装设置助手
- 下一篇: php gearman 定时任务,php