官术网_书友最值得收藏!

2.2.1 黑盒測試

黑盒測試是一種重要的測試策略,又稱為數據驅動的測試或輸入/輸出驅動的測試。使用這種測試方法時,將程序視為一個黑盒子。測試目標與程序的內部機制和結構完全無關,而是將重點集中放在發現程序不按其規范正確運行的環境條件。

在這種方法中,測試數據完全來源于軟件規范(換句話說,不需要去了解程序的內部結構)。

如果想用這種方法來發現程序的所有錯誤,判定的標準就是“窮舉輸入測試”,將所有可能的輸入條件都作為測試用例。為什么這樣做?比如說在三角形測試的程序中,試過了三個等邊三角形的測試用例,這不能確保正確地判斷出所有的等邊三角形。程序中可能包含對邊長為3842,3842,3842的特殊檢查,并指出此三角形為不規則三角形。由于程序是個黑盒子,因此能夠確定此條語句存在的惟一方法,就是試驗所有的輸入情況。

要窮舉測試這個三角形程序,可能需要為所有有效的三角形創建測試用例,只要三角形邊長在開發語言允許的最大整數值范圍內。這些測試用例本身就是天文數字,但這還絕不是所謂窮盡的;當程序指出-3,4,5是一個不規則三角形或2,A,2是一個等腰三角形時,問題就暴露出來了。為了確保能夠發現所有這樣的錯誤,不僅得用所有有效的輸入,而且還得用所有可能的輸入進行測試。因此,為了窮舉測試三角形程序,實際上需要創建無限的測試用例,這當然是不可能的。

如果測試這個三角形程序都這么難的話,那么要窮舉測試一個稍大些的程序的難度就更大了。設想一下,如果要對一個C++編譯器進行黑盒窮舉測試,不僅要創建代表所有有效C++程序的測試用例(實際上,這又是一個無窮數),還需要創建代表所有無效C++程序的測試用例(無窮數),以確保編譯器能夠檢測出它們是無效的。也就是說,編譯器必須進行測試,確保其不會執行不應執行的操作—如順利地編譯成功一個語法上不正確的程序。

如果程序使用到數據存儲,如操作系統或數據庫應用程序,這個問題會變得尤為嚴重。舉例來說,在航班預定系統這樣的數據庫應用程序中,諸如數據庫查詢、航班預約這樣的事務處理需要隨上一次事務的執行情況而定。因此,不僅要測試所有有效的和無效的事務處理,還要測試所有可能的事務處理順序。

上述討論說明,窮舉輸入測試是無法實現的。這有兩方面的含義,一是我們無法測試一個程序以確保它是無錯的,二是軟件測試中需要考慮的一個基本問題是軟件測試的經濟學。也就是說,由于窮舉測試是不可能的,測試投入的目標在于通過有限的測試用例,最大限度地提高發現的問題的數量,以取得最好的測試效果。除了其他因素之外,要實現這個目標,還需要能夠窺見軟件的內部,對程序作些合理但非無懈可擊的假設(例如,如果三角形程序將2,2,2視為等邊三角形,那就有理由認為程序對3,3,3也作同樣判斷)。這種思路將形成本書第4章中測試用例設計策略的部分方法。

主站蜘蛛池模板: 高雄县| 阳曲县| 盱眙县| 尉犁县| 华安县| 和平县| 盐池县| 积石山| 呼伦贝尔市| 岳池县| 莎车县| 黑龙江省| 濮阳市| 新邵县| 安福县| 绩溪县| 抚松县| 河西区| 大丰市| 新疆| 金门县| 富锦市| 双桥区| 鹿邑县| 桂东县| 新民市| 黄梅县| 齐齐哈尔市| 临城县| 广东省| 南投县| 通河县| 云和县| 莱西市| 保定市| 平遥县| 磐安县| 鱼台县| 大化| 沧州市| 阿巴嘎旗|