1:白盒測試:
一、概述:
白盒測試也稱結構測試或邏輯驅動測試,是針對被測單元內部是如何進行工作的測試。它根據程序的控制結構設計測試用例,主要用於軟件或程序驗證。
白盒測試法檢查程序內部邏輯結構,對所有邏輯路徑進行測試,是一種窮舉路徑的測試方法。但即使每條路徑都測試過了,仍然可能存在錯誤。因為:
窮舉路徑測試無法檢查出程序本身是否違反了設計規范,即程序是否是一個錯誤的程序。
窮舉路徑測試不可能查出程序因為遺漏路徑而出錯。
窮舉路徑測試發現不了一些與數據相關的錯誤。
二、方法
白盒測試主要是檢查程序的內部結構、邏輯、循環和路徑。常用測試用例設計方法有:
邏輯覆蓋:以程序的內部邏輯結構為基礎,分為語句覆蓋、判定覆蓋、條件覆蓋、判定-條件覆蓋、條件組合覆蓋等。
基本路徑測試:在程序控制流程的基礎上,分析控制構造的環路復雜性,導出基本可執行路徑集合,從而設計測試用例。
邏輯覆蓋 vs. 路徑覆蓋:
邏輯覆蓋:以程序或系統的內部邏輯結構為基礎,分為語句覆蓋、判定覆蓋、判定-條件覆蓋、條件組合覆蓋等。
基本路徑測試:在程序或業務控制流程的基礎上,分析控制構造的環路復雜性,導出基本可執行路徑集合,從而設計測試用例。
2.1 語句覆蓋:
語句覆蓋法的基本思想是設計若干測試用例,運行被測程序,使程序中的每個可執行語句至少被執行一次
如果是順序結構,就是讓測試從頭執行到尾
如果有分支、條件和循環,需要利用下面的方法,執行足夠的測試覆蓋全部語句
只需設計一個測試用例: a=2,b=1,c=6; 即達到了語句覆蓋。
【優點】 :可以很直觀地從源代碼得到測試用例,無須細分每條判定表達式。
【缺點】 :由於這種測試方法僅僅針對程序邏輯中顯式存在的語句,但對於隱藏的條件是無法測試的。如在多分支的邏輯運算中無法全面的考慮。語句覆蓋是最弱的邏輯覆蓋。
2.2 判定覆蓋
設計若干用例,運行被測程序,使得程序中每個判斷的取真分支和取假分支至少經歷一次,即判斷真假值均曾被滿足。 一個判定往往代表着程序的一個分支,所以判定覆蓋也被稱為分支覆蓋。
a=2,b=1 ,c=6可覆蓋判斷M的Y分支和判斷N的Y分支;
a=-2,b=-1 ,c=-3可覆蓋判斷M的N分支和判斷N的N分支 。 這兩組測試用例可覆蓋所有判定的真假分支。
a=1,b=1 ,c=-3 可覆蓋判斷M的Y分支和判斷N的N分支 ;
a=1,b=-2 ,c=3可覆蓋判斷M的N分支和判斷N的Y分支 ; 同樣的這兩組測試用例也可覆蓋所有判定的真假分支。
【優點】:判定覆蓋具有比語句覆蓋更強的測試能力。同樣判定覆蓋也具有和語句覆蓋一樣的簡單性,無須細分每個判定就可以得到測試用例。
【缺點】:往往大部分的判定語句是由多個邏輯條件組合而成,若僅僅判斷其整個最終結果,而忽略每個條件的取值情況,必然會遺漏部分測試路徑。判定覆蓋仍是弱的邏輯覆蓋。
2.3 條件覆蓋
設計若干測試用例,執行被測程序以后,要使每個判斷中每個條件的可能取值至少滿足一次。
判斷M表達式: 設條件 a>0 取真 記為 T1 取假 記為 F1
條件 b>0 取真 記為 T2 取假 記為 F2
判斷N表達式: 設條件 a>1 取真 記為 T3 取假 記為 F3
條件 c>1 取真 記為 T4 取假 記為 F4
它覆蓋了判定M的N分支和判斷N的Y分支。
測試用例
我們用條件覆蓋設計的思想就是讓測試用例能覆蓋 T1、T2、T3、T4、F1、F2、F3、F4
【優點】:增加了對條件判定情況的測試,增加了測試路徑。
【缺點】:條件覆蓋不一定包含判定覆蓋。例如,我們剛才設計的用例就沒有覆蓋判斷M的Y分支和判斷N的N分支。條件覆蓋只能保證每個條件至少有一次為真,而不考慮所有的判定結果。
2.4 判定條件覆蓋
判定-條件覆蓋是判定和條件覆蓋設計方法的交集,即設計足夠的測試用例,使得判斷條件中的所有條件可能取值至少執行一次,同時,所有判斷的可能結果至少執行一次。
測試用例
按照判定-條件覆蓋的要求,我們設計的測試用例要滿足如下條件:
1.所有條件可能至少執行一次取值;
2.所有判斷的可能結果至少執行一次。
要滿足T1、T2、 T3 、T4 F1、 F2 、F3、F4
【優點】 :能同時滿足判定、條件兩種覆蓋標准。
【缺點】 :判定/條件覆蓋准則的缺點是未考慮條件的組合情況。
2.5 條件組合覆蓋
設計足夠的測試用例,使得程序中每個判斷的所有可能的條件取值組合都至少出現一次。
它與條件覆蓋的差別是它不是簡單地要求每個條件都出現“真”與“假”兩種結果,而是要求讓這些結果的所有可能組合都至少出現一次。
按照條件組合覆蓋的基本思想,對於前面的例子,我們把每個判斷中的所有條件進行組合,設計組合條件如表所示,而我們設計的測試用例就要包括所有的組合條件。
覆蓋了所有組合,但覆蓋路徑有限,1-2-5 沒被覆蓋
【優點】 :這種測試方法可以對程序進行徹底的測試,比前面五種的覆蓋面都廣。
【缺點】 :需要設計大量、復雜的測試用例,使得工作量呈指數級增長,不見得把所有的條件組合都覆蓋。
2.6 路徑覆蓋
設計所有的測試用例,來覆蓋程序中的所有可能的執行路徑。
【優點】 :這種測試方法可以對程序進行徹底的測試,比前面五種的覆蓋面都廣。
【缺點】 :需要設計大量、復雜的測試用例,使得工作量呈指數級增長,不見得把所有的條件組合都覆蓋。
2.7、邏輯覆蓋總結
根據覆蓋目標的不同,邏輯覆蓋又可分為語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、組合覆蓋和路徑覆蓋。
語句覆蓋:選擇足夠多的測試用例,使得程序中的每個可執行語句至少執行一次。
判定覆蓋:通過執行足夠的測試用例,使得程序中的每個判定至少都獲得一次“真”值和“假”值, 也就是使程序中的每個取“真”分支和取“假”分支至少均經歷一次,也稱為“分支覆蓋”。
條件覆蓋:設計足夠多的測試用例,使得程序中每個判定包含的每個條件的可能取值(真/假)都至少滿足一次。
判定/條件覆蓋:設計足夠多的測試用例,使得程序中每個判定包含的每個條件的所有情況(真/假)至少出現一次,並且每個判定本身的判定結果(真/假)也至少出現一次。
——滿足判定/條件覆蓋的測試用例一定同時滿足判定覆蓋和條件覆蓋。
組合覆蓋:通過執行足夠的測試用例,使得程序中每個判定的所有可能的條件取值組合都至少出現一次。
——滿足組合覆蓋的測試用例一定滿足判定覆蓋、條件覆蓋和判定/條件覆蓋。
路徑覆蓋:設計足夠多的測試用例,要求覆蓋程序中所有可能的路徑。
3.基本路徑測試
3.1流程
1.依據代碼繪制流程圖
2.確定流程圖的圈復雜度(cyclomatic complexity )
3.確定線性獨立路徑的基本集合( basis set )
4.設計測試用例覆蓋每條基本路徑
3.2 示例:
Path1: 1-2-3-6-7-9-10-1-11
Path2: 1-2-3-6-8-9-10-1-11
Path3: 1-2-3-4-5-10-1-11
Path4: 1-11P
基本路徑測試並不是測試所有路徑的組合,僅僅保證每條基本路徑被執行一次
————————————————
版權聲明:本文為CSDN博主「程序媛_婷」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_41431406/article/details/99320982