1. 定義
黑盒測試 - 不關注內部結構的測試/基於輸入輸出的測試
白盒測試 - 基於內部結構的測試
白盒測試的關鍵: 覆蓋度
2. 白盒相關概念
-
語句覆蓋 - 設計一套測試 讓被測對象中所有語句得到測試覆蓋
-
判定覆蓋 - 設計一套測試 讓被測對象中所有判定得到測試覆蓋
-
條件覆蓋 - 設計一套測試 讓被測對象中所有條件得到測試覆蓋
-
路徑覆蓋 - 設計一套測試 讓被測對象中所有路徑得到測試覆蓋
上圖中:
3. 例題解析
例題1:
解:
語句覆蓋:
- 語句:以上代碼中的每一行都是語句。
- 注意THEN后面所接語句,是有可能不執行的。
- 語句覆蓋即要設計出測試數據,使得所有語句都被執行。
- 要滿足以上條件,只要讓兩個IF判定判定為”真“即可。
答:
分支覆蓋:
- 分支覆蓋是判定覆蓋的別名。因為判定可以在程序中創造分支,就像一條分叉路口,讓程序的執行走向不同方向
- 他的取值為布爾類型,只有兩個可能取值:”True“ 和 ”False“(真和假)。
- 判定覆蓋,即讓所有的判定都取到所有可能取值,即每個判定都取到”真“、”假“各一次。
- 本題中有兩個判定,即”IF“語句,則要取測試數據,讓兩個IF都取到真假最少各一次。
答:
例題2:
解:
- 題中while循環語句構成了本題代碼的路徑分支
- 判定解讀:當變量i不大於25時,做一件事;當i大於25時,做另一件事。這個判定就是”i是否大於25“.
- 效力最高的滿足判定覆蓋,即在最小的循環執行次數條件下,使判定取到”真“、”假“各一次。
- 取 i = 25的話,第一次循環,while判定為真,循環內部邏輯執行1次。執行1次之后i ++, i的值變為26,while判定為假,循環跳出。
答:
例題3:
解:
- 題中的三個if和一個else組成了所有判定
- 要滿足判定覆蓋,需要讓所有判定取到”真“、”假“各一次。
- 直觀的想法,取四個值: n = 0 , n = 1, n =2 , n = -1就可以讓所有判定都被覆蓋到真假所有可能。
- 但是注意第三個判定后的return語句
,返回調用了函數本身。
-
此即所謂的“遞歸” ,代入n = 2這樣的數據進入這個函數進行運算,return語句演變成以下形式:return fib(1) + fib(0) + fib(-1),相當於取n=1,0,-1各一次
答:
4. 練習題
最后留幾個練習題可以自己嘗試解答,歡迎留言寫下答案:
1:
2: