黑盒測試:等價類劃分、邊界值分析、因果圖分析、錯誤猜測
白盒測試:語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、多重條件覆蓋
白盒測試:關注的是測試用例執行的程度或覆蓋程式邏輯結構(源**)的程度。
語句覆蓋是白盒測試中較弱的準則,通常沒有什麼用處。判定覆蓋或分支覆蓋式較強的一些邏輯覆蓋準則。該準則要求必須編寫足夠的測試用例,使得每乙個判斷都至少有乙個為真和為假的輸出結果。換句話說,每條分支路徑都必須至少遍歷一次。分支或判定語句的例子包括switch、do-while和if-else語句。
判定覆蓋通常可以滿足語句覆蓋。判定覆蓋是一種比語句覆蓋更強的準則,但仍然相當不足。
比判定覆蓋更強一些的準則是條件覆蓋。在條件覆蓋的情況下,要編寫足夠的測試用例以確保將乙個判斷中的每個條件的所有可能的結果至少執行一次。
判定/條件覆蓋準則要求設計出充足的測試用例,將乙個判斷中的每個條件的所有可能的結果至少執行一次,將每個判斷的所有可能的結果至少執行一次,將每個入口點都至少呼叫一次。
判定/條件覆蓋準則的乙個缺點是儘管看上去所有條件的所有結果似乎都執行到了,但由於有些特定的條件會遮蔽掉其他的條件,常常並不能全部執行到。舉例來說,如果「與」表示式中有個條件為「假」,那麼就無需計算該表示式中的後續條件。同樣,如果「或」表示式中有個條件為「真」,那麼後續條件也無需計算。因此,條件覆蓋或判定/條件覆蓋準則不一定會發現邏輯表示式中的錯誤。
多重條件覆蓋準則能夠部分解決這個問題。該準則要求編寫足夠多的測試用例,將每個判定中的所有可能的條件結果的組合,以及所有的入口點都至少執行一次。
在存在迴圈的情況下,多重條件覆蓋準則所需要的測試用力的數量通常會遠遠小於其路徑的數量。
總的來說,對於包含每個判斷只存在一種條件的語句,最簡單的測試準則就是設計出足夠數量的測試用例,實現1)將每個判斷的所有結果都至少執行一次;2)將所有的程式入口都至少呼叫一次,以確保全部的語句都至少執行一次。
而對於包多重條件判斷的程式,最簡單的測試準則是設計出足夠數量的測試用例,將每個判斷的所有可能的條件結果的組合,以及所有的入口點都至少執行一次。
1)嚴格控制測試用例的增加,減少未達到「合理測試」的某些既定目標而必須設計的其他測試用例的數量。
2)它覆蓋了大部分其他可能的測試用例。也就是說,它會告訴我們,使用或不使用這個特定的輸入集合,哪些錯誤會被發現,哪些會被遺漏掉。
確定等價類
需要確定兩類等價類:有效等價類代表對程式的有效輸入,而無效等價類代表的則是其他任何可能的輸入條件。
考慮了邊界條件的測試用例與其他沒有考慮邊界條件的測試用例相比,具有更高的測試回報率。所謂邊界條件,是指輸入和輸出等價類中那些恰好處於邊界、或超過邊界、或在邊界以下的狀態。邊界值分析方法與等價劃分方法存在兩方面的不同:
1)與從等價類中挑選出任意乙個元素作為代表不同,邊界值分析需要選擇乙個或多個元素,以便等價類得每個邊界都經過一次測試。
2)與僅僅關注輸入條件(輸入空間)不同,還需要考慮從結果空間(輸出等價類)設計測試用例。
邊界值分析和等價劃分的乙個弱點是未對輸入條件的組合進行分析。因果圖有助於用乙個系統的方法選擇出高效的測試用例集。它還有乙個額外的好處,就是可以指出規格說明的不完整性和不明確之處。因果圖是一種形式語言,用自然語言描述的規格說明可以轉換為因果圖。因果圖實際上是一種數字邏輯電路,但沒有使用標準的電子學符號,而是使用了稍微簡單的符號。除了了解布林邏輯之外,不需要掌握電子學方面的知識。
錯誤猜測主要是一項依賴於直覺的非正規的過程,因此很難描述出這種方法的規程。其基本思想是列舉出可能犯的錯誤或錯誤易發情況的清單,然後依據清單來編寫測試用例。
一組合理的策略如下:
如果規格說明中包含輸入條件組合的情況,應首先使用因果圖分析方法。
在任何情況下都應使用邊界值分析方法。應記住,這是對輸入和輸出邊界進行的分析。邊界值分析可以產生一系列補充的測試條件,但是,也正如「因果圖分析」一節所述,多數甚至全部條件都可以被整合到因果圖分析中。
應為輸入和輸出確定有效和無效等價類,在必要情況下對上面確認的測試用例進行補充。
使用錯誤猜測技術增加更多的測試用例。
針對上述測試用例檢查程式的邏輯結構。應使用判定覆蓋、條件覆蓋、判定/條件覆蓋或多重條件覆蓋準則(最後的乙個最為完整)。如果覆蓋準則未能被前四個步驟中確定的測試用例所滿足,並且滿足準則也並非不可能,那麼增加足夠數量的測試用例,以使覆蓋準則得到滿足。
讀書筆記 軟體測試的藝術第2章
對於測試,更為合適的定義應該是 測試是為發現錯誤而執行程式的過程 黑盒測試 又稱為資料驅動的測試或輸入 輸出驅動的測試 是一種重要的測試策略。在這種方法中,測試資料完全 於軟體規範 不需要去了解程式的內部結構 如果想通過黑盒測試發現程式的所有錯誤,判定的標準是 窮舉輸入測試 但是基於多方面考慮,窮舉...
《軟體測試的藝術》讀書筆記(上)
一 測試的目的。測試是為發現錯誤而執行程式的過程。乙個成功的測試用例 是發現程式中存在錯誤的測試用例。二 測試用例設計的原則 1 測試用例中乙個必需部分是對預期輸出進行定義。2 測試用例的編寫不僅應當根據有效和預料到的輸入情況,而且也應當根據無效和未預料到的輸入情況。3 檢查程式是否 未做其應該做的...
軟體測試的藝術 讀書筆記 五
當程式無法實現其終端使用者的要求的合理功能時,就發生了乙個軟體錯誤 軟體開發過程 溝通有關最終程式的資訊,並將資訊從一種形式轉換到另一種形式。由於資訊的轉化,大部分軟體錯誤都可以歸結為資訊溝通和轉換時發生的故障 差錯 干擾。解決辦法 在產生需求和設計的時候每一步的輸出和上一步要的結果做驗證,驗證有不...