- 軟件測試的藝術(原書第3版)
- (美)Glenford J.Myers Tom Badgett Corey Sandler
- 1140字
- 2021-01-14 16:50:40
2.2.1 黑盒測試
黑盒測試是一種重要的測試策略,又稱為數據驅動的測試或輸入/輸出驅動的測試。使用這種測試方法時,將程序視為一個黑盒子。測試目標與程序的內部機制和結構完全無關,而是將重點集中放在發現程序不按其規范正確運行的環境條件。
在這種方法中,測試數據完全來源于軟件規范(換句話說,不需要去了解程序的內部結構)。
如果想用這種方法來發現程序的所有錯誤,判定的標準就是“窮舉輸入測試”,將所有可能的輸入條件都作為測試用例。為什么這樣做?比如說在三角形測試的程序中,試過了三個等邊三角形的測試用例,這不能確保正確地判斷出所有的等邊三角形。程序中可能包含對邊長為3842,3842,3842的特殊檢查,并指出此三角形為不規則三角形。由于程序是個黑盒子,因此能夠確定此條語句存在的惟一方法,就是試驗所有的輸入情況。
要窮舉測試這個三角形程序,可能需要為所有有效的三角形創建測試用例,只要三角形邊長在開發語言允許的最大整數值范圍內。這些測試用例本身就是天文數字,但這還絕不是所謂窮盡的;當程序指出-3,4,5是一個不規則三角形或2,A,2是一個等腰三角形時,問題就暴露出來了。為了確保能夠發現所有這樣的錯誤,不僅得用所有有效的輸入,而且還得用所有可能的輸入進行測試。因此,為了窮舉測試三角形程序,實際上需要創建無限的測試用例,這當然是不可能的。
如果測試這個三角形程序都這么難的話,那么要窮舉測試一個稍大些的程序的難度就更大了。設想一下,如果要對一個C++編譯器進行黑盒窮舉測試,不僅要創建代表所有有效C++程序的測試用例(實際上,這又是一個無窮數),還需要創建代表所有無效C++程序的測試用例(無窮數),以確保編譯器能夠檢測出它們是無效的。也就是說,編譯器必須進行測試,確保其不會執行不應執行的操作—如順利地編譯成功一個語法上不正確的程序。
如果程序使用到數據存儲,如操作系統或數據庫應用程序,這個問題會變得尤為嚴重。舉例來說,在航班預定系統這樣的數據庫應用程序中,諸如數據庫查詢、航班預約這樣的事務處理需要隨上一次事務的執行情況而定。因此,不僅要測試所有有效的和無效的事務處理,還要測試所有可能的事務處理順序。
上述討論說明,窮舉輸入測試是無法實現的。這有兩方面的含義,一是我們無法測試一個程序以確保它是無錯的,二是軟件測試中需要考慮的一個基本問題是軟件測試的經濟學。也就是說,由于窮舉測試是不可能的,測試投入的目標在于通過有限的測試用例,最大限度地提高發現的問題的數量,以取得最好的測試效果。除了其他因素之外,要實現這個目標,還需要能夠窺見軟件的內部,對程序作些合理但非無懈可擊的假設(例如,如果三角形程序將2,2,2視為等邊三角形,那就有理由認為程序對3,3,3也作同樣判斷)。這種思路將形成本書第4章中測試用例設計策略的部分方法。
- 解構產品經理:互聯網產品策劃入門寶典
- Vue.js前端開發基礎與項目實戰
- Mastering Ubuntu Server
- Unity Shader入門精要
- Java 11 Cookbook
- WordPress 4.0 Site Blueprints(Second Edition)
- Python機器學習算法: 原理、實現與案例
- Test-Driven Machine Learning
- Clojure for Java Developers
- Backbone.js Testing
- ABAQUS6.14中文版有限元分析與實例詳解
- scikit-learn Cookbook(Second Edition)
- Visual Basic程序設計基礎
- XML程序設計(第二版)
- 編程的原則:改善代碼質量的101個方法