接著上一篇,這一篇來討論黑盒測試,黑盒測試是基於功能說明的測試,它的目的是為了找出程式不符合功能說明的地方。上篇提到,由於產品邏輯的組合數量非常之大,無法通過窮舉所有情況來構建測試用例,所以需要通過合理的策略來選取出一個測試用例的子集,通過這個子集來儘量多的發現程式中所隱含的錯誤。
一個比較經典的策略是基於等價類劃分的黑盒測試方法。該方法通過合理的選取測試用例的子集來代表整體的用例集,所以基於等價類劃分的黑盒測試包含如下兩個特性
- 嚴格控制測試用例數量,減少測試用例數量
- 某分類下的測試用例需要反應的是某一類問題,也就是說使用該分類下的用例,哪些問題會被發現,哪些問題會被遺漏是明確的。
我們以三角形有效邊定義來對黑盒測試方法進行說明:三角形的邊為正數,並且兩邊之和大於第三邊。
首先來說等價類劃分,基於等價方法劃分測試用例的步驟分為兩步:1. 確定等價類;2. 生成測試用例。
等價類有可以分為兩種:
- 有效等價類:程式的有效輸入
- 無效等價類:程式的無效輸入
根據三角形的定義和等價類劃分的方法,分別確定有效等價類和無效等價類,並生成測試用例。
輸入條件 | 有效等價類 | 無效等價類 | 測試用例 | 說明 |
三角形的邊為正整數 |
|
|
有效輸入:
1) A: 2; B: 3; C: 3
無效輸入:
1) A: 0; B: 3; C: 3
2) A: 3; B: 0; C: 3
3) A: 3; B: 3; C: 0
|
假設三條邊分別為:A, B, C |
兩邊之和大於第三邊 |
|
|
有效輸入
1) A: 2; B: 3; C: 3
無效輸入
1) A: 3; B: 1; C: 4
2) A: 4; B: 2; C: 2
3) A: 2; B: 4; C: 2
|
假設三條邊分別為:A, B, C
|
確定等價類的過程基本上會依賴於一個人過去的經驗,對人的素質及經驗依賴會比較大。利用集合的概念來講述這些概念的話,那麼假設輸入的全集為 X, 那麼有效輸入為 Y, 那麼無效輸入就是在集合X裡求Y的補集。
但是在利用等價劃分的方法進行構建測試用例的話,會漏掉一些高效的測試用例。大量的實踐經驗證明在輸入和輸出等價類中,那些恰好在邊界和邊界附近的輸入是經常出錯的地方。所以需要在等價劃分的基礎上,再增加邊界值分析。需要注意的是,邊界值分析不僅僅需要關注輸入空間,也需要關注結果空間。所以對於上述的輸入,可以做出如下的測試用例作為補充:
輸入條件 | 邊界 | 分析 | 測試用例 | 說明 |
三角形的邊為正整數
|
正數 | 正數的上下邊界可以為-0.01,0,0.01 |
1) A:0.01; B:0.01;C:0.01
2) A:0; B:0; C:0
3) A:-0.01; B: -0.01; C:-0.01
|
假設三條邊分別為:A, B, C
|
兩邊之和大於第三邊
|
大於第三邊 | 可以是等於,小於0.01;大於0.01 |
1)A:1; B: 1; C: 2
2)A:1; B: 0.09; C: 2
3)A:1; B:1.01; C: 2
|
假設三條邊分別為:A, B, C
|
通過等價類劃分和邊界值分析法,通常能構建出對於簡單問題的測試用例集合。但是如果遇到多輸入條件的組合的情況下,如果利用上述方法則會產生大量的測試用例,而且很容易漏掉一些情況,這時候則需要利用其它的策略(因果圖分析法)。由於作為程式設計師,在工程實踐中較少對組合條件進行完全的測試,所以省略這部分討論。
綜上,在黑盒測試中,需要對輸入和輸出劃分等價類,然後對邊界值進行補充,當然可以基於個人經驗對程式中可能產生的錯誤進行猜測,補充一部分測試用例。由此應該可以在程式設計師(非QA)的角度構建出一套較為可靠的測試用例。