白盒測試又稱結構測試、透明盒測試、邏輯驅動測試或基於代碼的測試。盒子指的是被測試的軟件,白盒指的是盒子是可視的,你清楚盒子內部的東西以及裏面是如何運做的。白盒要考慮測試用例對程序內部的覆蓋程度,最好的白盒測試是能覆蓋到每一條路徑,可是因爲路徑數目極大,要執行每一條路徑是不可能。但咱們能作到就是讓覆蓋率變高一點,下面要介紹的六種覆蓋測試方法,看看他們的覆蓋程度。測試
六種白盒測試:(覆蓋率從低到高排序)spa
「語句覆蓋」是一個比較弱的測試標準,它的含義是:在測試時,首先設計若干個測試用例,而後運行被測程序, 使程序中的每一個可執行語句至少執行一次。這時所謂「若干個」,天然是越少越好。.net
用例設計:設計
從本例可看出,語句覆蓋其實是很弱的,程序中每一個語句都獲得執行這一點來看,語句覆蓋的方法彷佛可以比較全面地 檢驗每個語句。但它也毫不是天衣無縫的。假如這一程序段中兩個判斷的邏輯運算 有問題,若是第一個條件語句中的AND錯誤地編寫成OR,上面的測試用例是不能發現這個錯誤的;又如第三個條件語句中X>1誤寫成X>0,這個測試用例也不能暴露它,此外,沿着路徑abd執行時,X的值應該保持不變,覺得每一個語句都經歷過,彷佛能夠放心了。其實這種測試不十分可靠。語句覆蓋在測試被測程序中,除去對檢查不可執行語句有必定做用外,並無排除被測程序包含錯誤的風險。blog
總之,通常認爲「語句覆蓋」是很不充分的一種標準。
優勢:能夠很直觀地從源代碼獲得測試用例,無須細分每條斷定表達式。
缺點:因爲這種測試方法僅僅針對程序邏輯中顯式存在的語句(便可執行語句),但對於隱藏的條件和可能到達的隱式邏輯分支,是沒法測試的。排序
比「語句覆蓋」稍強的覆蓋標準是「斷定覆蓋」(或稱branch coverage分支覆蓋)標準。斷定覆蓋準則進行測試是指,設計若干測試用例,運行被側程序,使得程序中每一個判斷的取真分支和取假分支至少經歷一次,即判斷的真假值均曾被知足。斷定覆蓋又稱爲分支覆蓋get
優勢:
斷定覆蓋比語句覆蓋要多幾乎一倍的測試路徑,固然也就具備比語句覆蓋更強的測試能力。一樣斷定覆蓋也具備和語句覆蓋同樣的簡單性,無須細分每一個斷定就能夠獲得測試用例。
缺點:
每每大部分的斷定語句是由多個邏輯條件組合而成(如,斷定語句中包含AND、OR、CASE),若僅僅判斷其整個最終結果,而忽略每一個條件的取值狀況,必然會遺漏部分測試路徑。
it
設計用例時針對判斷語句裏面每一個條件表達式true 和 false各取值一次,不考判斷語句的計算結果軟件
測試用例條件:
A=T A=F
B=T B=F 循環
設計測試用例時,使得判斷語句中每一個條件表達式的全部可能結果至少出現一次,每一個判斷語句自己全部可能結果也至少出現一次。
測試用例條件:
A ^ B = T A ^ B = F
A=T A=F
B=T B=F
設計測試用例時,使得每一個判斷語句中條件結果的全部可能組合至少出現一次
測試用例條件:
A= T B= T
A= T B= F
A= F B= T
A= F B= F
設計測試用例時,覆蓋程序中全部可能的執行路徑
優勢:這種覆蓋方法能夠對程序進行完全的測試用例覆蓋,比前面講的五種方法覆蓋度都要高。
缺點:於路徑覆蓋須要對全部可能的路徑進行測試(包括循環、條件組合、分支選擇等),那麼須要設計大量、複雜的測試用例,使得工做量呈指數級增加。路徑覆蓋雖然是一種比較強的覆蓋,但未必考慮判斷語句中條件表達式結果的組合,並不能代替條件覆蓋和條件組合覆蓋。
參考:http://www.javashuo.com/article/p-fuplmjvm-hr.html
參考:https://blog.csdn.net/tsj11514oo/article/details/49161073