iT邦幫忙

2024 iThome 鐵人賽

DAY 9
3
IT 管理

葬送的軟體測試 - 不懂不想做是會出事系列 第 9

2024 Day09 黑箱測試方法

  • 分享至 

  • xImage
  •  

什麼是黑箱測試呢? 就是不管程式內部的結構來進行測試的作法. 在這個測試過程中, 著重於 確認程式是否根據功能規格來運作, 所以又稱為 功能測試 (Functional Testing) 或是 行為測試 (Behavioral Testing).

黑箱測試方法是目前最通用, 最可行的測試方法. 主要是時間有限, 這個方法可以很快上手. 另外則是可以幫忙測試的人, 很多人是看不懂程式碼. 因此黑箱測試方法就變成首選.

黑箱測試方法可以應用到的場景很廣, 可以應用到以下測試階段

• 單元測試
• 整合測試
• 系統測試
• 驗收測試

在不同測試階段使用黑箱測試, 差別只是在於用起來有多困難. 有些階段或是場景用這種方法開立測試很容易, 有些階段用這些方法不容易. 例如: 在單元測試階段, 因為程式碼較少, 不看程式碼也容易準備. 在整合或是系統測試階段, 如果有 bug 修復, 這時候不看程式碼去進行迴歸測試, 用黑箱測試方法就是亂槍打鳥, 容易不精準.

黑箱測試的作法非常多, 至少看過十幾種, 因為時間和篇幅有限, 我就挑幾個比較常見的來介紹. 其實這些方法很多人都用過, 只是大家不知道它的名稱.


Equivalence Class Testing

Equivalence Class Testing 將受測單元的輸或是輸出資料, 劃分出幾個等價類別分割(partition). 原則上, 每個分割至少會開立一個測試個案來涵蓋. 這些分割基本上是獨立, 彼此不會相互影響. (如下圖 9-1 所示)

https://ithelp.ithome.com.tw/upload/images/20240807/20161809LbKu4MMwhj.png
圖 9-1 Equivalence Class Testing 觀念示意圖

利用這種方法, 可以減少需要建立的測試個案總數, 讓測試軟體所需的時間也減少. 但是這樣的涵蓋率還算可靠, 因為每個分割都有測試案例.

我們來看個案例: 有個函式 F1 (int A, int B, Int C), 他會讀入三角形的三邊長 A, B, C, 然後判斷他是一個怎樣的三角形. 所以他的輸出可能是: 正三角形, 等腰三角形, 普通三角形 和 不是三角形.

https://ithelp.ithome.com.tw/upload/images/20240807/20161809g7f9vR6aAF.png
圖 9-2 Equivalence Class Testing 的測試案例

根據 Equivalence Class Testing 的作法, 你可以利用輸出的部分, 找出以下這幾個分割, 每個分割我們至少有一個測試個案來涵蓋.

https://ithelp.ithome.com.tw/upload/images/20240807/20161809MGv6l4ja94.png

所以看到這邊, 可能會有人覺得這個方法的關鍵, 就是在找出分割. 沒錯, 厲害和不厲害的測試人員, 差別就在這裡. 有些測試人員有豐富的經驗或者是領域知識, 他可以展開的分割就非常詳盡.

拿上面這個三角形的函式來說, 沒經驗的可能就上面所示, 分成合法的 3 個分割, 和不合法的 1 個分割.

有經驗的人在不合法的部分, 他還會展開更多的分割, 例如:

• 小數點
• 字元
• 特殊符號
• 中文字
• 不是只有 3 個輸入
• 超過邊界值

你看這樣完整度就不一樣. 這邊不容易可以教會. 可以用 checking list 和加強領域知識來輔助.


Boundary Values Testing

Boundary Values Testing 是根據變數的邊界來開立測試個案. 如下圖 9-3 所示, 假設有一個變數, 他的邊界是 a 和 b, 這時候你可以開出以下幾個測試個案:

• 邊界 a
• 邊界 b
• 邊界 a 和 邊界 b 中間找一個
• 比 邊界 a 小一點
• 比 邊界 a 大一點
• 比 邊界 b 小一點
• 比 邊界 b 大一點

簡單吧, 只要有邊界, 你可以閉著眼睛就開出這7類測試個案.

https://ithelp.ithome.com.tw/upload/images/20240807/201618098pqzfiXPwu.png
圖 9-3 Boundary Values Testing 的開立測試個案方向

為什麼我們會想利用 Boundary Values Testing 的作法, 最主要的原因是受測系統很多問題都是出現邊界狀況. 另外則是開發人員大多只考慮 happy case, 對於邊界狀況不是沒空處理, 要不是就忘了. 因此, 測這部分往往投資報酬率很高, 很容易就可以抓出很多問題.


Decision Table Testing

Decision Table Testing 是用於測試不同輸入組合的系統行為. 他算是一種很系統化的方法, 把不同的輸入組合, 及其相應的系統行為, 以表格形式來呈現組合的狀況. 所以這方法也被稱為因果表格(Cause-Effect Table).

如下圖 9-4 所示, 這個表格會分成上半部和下半部. 上半部就是一堆 condition, 就是一些輸入的條件, 或是可能處理的狀況. 這裡可以利用前面提到的 Equivalence Class Testing 來找出可能的條件, 或者是 Boundary Values Testing 的值也可以. 所以 Decision Table Testing 可以整合Equivalence Class Testing 和 Boundary Values Testing 方法一起使用.

下半部是代表受測系統的行為或是輸出. 當他接受了上半部的資料或行為條件, 他會哪些反應.

這個表格的每個欄位(column) 就是你要測試的一個測試個案或場景.

這個方法厲害的地方, 是將你的測試想法給視覺化, 別人可以很容易知道你想怎麼測, 然後他就比較容易給你回饋, 看看哪邊需要加強. 因此, 強烈建議對於主要功能, 可以利用此方法來開立測試個案.

https://ithelp.ithome.com.tw/upload/images/20240807/20161809NzXLU9Wtrw.png
圖 9-4 Decision Table Testing 的解說

讓我們來看一個案例: 一家公司在販賣商品, 會根據以下狀況給優惠:

• 如果訂貨超過 50 個, 可以打 2% 的折扣
• 如果付現, 可以打 2% 的折扣
• 如果是批發商, 可以打 2% 的折扣

根據 Decision Table Testing 的作法, 你可以建立出以下表格:

上半部的 condition 有: 買超過 50 個, 付現, 或是批發商等狀況
下半部的 action 會有: 沒打折, 2% 折扣, 4% 折扣, 6% 折扣
每個 column 就是你會需要測試的場景

https://ithelp.ithome.com.tw/upload/images/20240807/20161809RxaO2VCKgR.png


上一篇
2024 Day08 靜態測試方法
下一篇
2024 Day10 白箱測試方法
系列文
葬送的軟體測試 - 不懂不想做是會出事11
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言