前言
記錄一次軟件測試課程的課后作業,作業內容是白盒測試中的基本路徑測試,步驟如下
- 分析程序的控制流
- 計算環形復雜度
- 找出基本路徑
- 設計測試用例
- 執行測試用例(要求使用JUnit)
作業要求
使用白盒測試用例設計方法為下面的程序設計測試用例(基本路徑測試)並用JUnit測試:
-
程序要求
10個鉛球中有一個假球(比其他鉛球的重量要輕),用天平三次稱出假球。
-
程序設計思路
第一次使用天平分別稱5個球,判斷輕的一邊有假球;拿出輕的5個球,取出其中4個第二次稱,兩邊分別放2個球:如果兩邊同重,則剩下的球為假球;若兩邊不同重,拿出輕的兩個球稱第三次,輕的為假球。
-
遞交材料
測試用例設計電子稿、源程序、JUnit測試截圖。
程序代碼及控制流圖
程序代碼
文件SearchBall.java
內容如下。
注意不要讓代碼的行號變動,程序流圖中結點的編號是根據這份代碼里每條執行語句里的行號對應的。
package module;
public class SearchBall {
private static int x[]=new int[10];
public SearchBall(){}
public void setBWeight(int w[]){
for(int i=0;i<w.length;i++){
x[i]=w[i];
}
}
public String BeginSearch(){
if(x[0]+x[1]+x[2]+x[3]+x[4]<x[5]+x[6]+x[7]+x[8]+x[9]){
if(x[1]+x[2]==x[3]+x[4]){
return "1號是假球";
}
if(x[1]+x[2]<x[3]+x[4]){
if (x[1]<x[2]) {
return "2號是假球";
}else {
return "3號是假球";
}
}else {
if (x[3]<x[4]){
return "4號是假球";
}
else{
return "5號是假球";
}
}
}else {
if(x[6]+x[7]==x[8]+x[9]){
return "6號是假球";
}
if(x[6]+x[7]<x[8]+x[9]) {
if (x[6]<x[7]) {
return "7號是假球";
}else {
return "8號是假球";
}
}else {
if (x[8]<x[9]) {
return "9號是假球";
}else {
return "10號是假球";
}
}
}
}
}
程序控制流圖
下圖中結點中的數字是對應可執行語句在上面代碼中的行號;邊上的Y代表判定結果為真,N代表判定結果為假。
計算環形復雜度
控制流圖\(G\)的環形復雜度計算公式:\(V(G)=E-N+2\),其中\(E\)為控制流圖中邊的數量,\(N\)是控制流圖中的結點數量。
函數BeginSearch()
的控制流圖的環形復雜度為
\[V(G)=18-19+2=1 \]
基本路徑
從程序流圖中可知,共有10條基本路徑,具體如下
路徑編號 | 經過結點 |
---|---|
1 | 12-13-14 |
2 | 12-13-16-17-18 |
3 | 12-13-16-17-20 |
4 | 12-13-16-23-24 |
5 | 12-13-16-23-27 |
6 | 12-31-32 |
7 | 12-31-34-35-36 |
8 | 12-31-34-35-38 |
9 | 12-31-34-41-42 |
10 | 12-31-34-41-44 |
測試用例設計與執行
測試用例設計
路徑編號 | 用例輸入 | 期待輸出 |
---|---|---|
1 | {5, 10, 10, 10, 10, 10, 10, 10, 10, 10} | "1號是假球" |
2 | {10, 5, 10, 10, 10, 10, 10, 10, 10, 10} | "2號是假球" |
3 | {10, 10, 5, 10, 10, 10, 10, 10, 10, 10} | "3號是假球" |
4 | {10, 10, 10, 5, 10, 10, 10, 10, 10, 10} | "4號是假球" |
5 | {10, 10, 10, 10, 5, 10, 10, 10, 10, 10} | "5號是假球" |
6 | {10, 10, 10, 10, 10, 5, 10, 10, 10, 10} | "6號是假球" |
7 | {10, 10, 10, 10, 10, 10, 5, 10, 10, 10} | "7號是假球" |
8 | {10, 10, 10, 10, 10, 10, 10, 5, 10, 10} | "8號是假球" |
9 | {10, 10, 10, 10, 10, 10, 10, 10, 5, 10} | "9號是假球" |
10 | {10, 10, 10, 10, 10, 10, 10, 10, 10, 5} | "10號是假球" |
Junit執行測試用例
基於JUnit生成的測試代碼,我補充了測試函數BeginSearch()
的代碼,文件SearchBallTest.java
內容如下。
package test.module;
import org.junit.Test;
import org.junit.Before;
import org.junit.After;
import module.SearchBall;
import static org.junit.Assert.assertEquals;
/**
* SearchBall Tester.
*
* @author <Authors name>
* @since <pre>4月 7, 2020</pre>
* @version 1.0
*/
public class SearchBallTest {
@Before
public void before() throws Exception {
}
@After
public void after() throws Exception {
}
/**
*
* Method: setBWeight(int w[])
*
*/
@Test
public void testSetBWeight() throws Exception {
//TODO: Test goes here...
}
/**
*
* Method: BeginSearch()
*
*/
@Test
public void testBeginSearch() throws Exception {
SearchBall obj = new SearchBall();
int[] input;
int ballIndex;
// 遍歷測試各個基本路徑
for(int i=0;i<10;++i){
// 生成用例輸入
input = new int[]{10, 10, 10, 10, 10, 10, 10, 10, 10, 10};
input[i]=5;
obj.setBWeight(input);
// 測試用例輸出
ballIndex = i+1;
assertEquals(ballIndex+"號是假球", obj.BeginSearch());
}
}
}
執行函數testBeginSearch()
,得到如下圖所示的結果(從下圖也可以看到項目的結構)
其它
作者:@臭咸魚
轉載請注明出處:https://www.cnblogs.com/chouxianyu/
歡迎討論和交流!