??白盒測試的英文全稱:White-box Testing
???? 白盒測試(White-box Testing,又稱邏輯驅動測試,結構測試)是把測試對象看作一個打開的盒子。利用白盒測試法進行動態測試時,需要測試軟件產品的內部結構和處理過程,不需測試軟件產品的功能。白盒測試又稱為結構測試和邏輯驅動測試。
????? 白盒測試法的覆蓋標準有邏輯覆蓋、循環覆蓋和基本路徑測試。其中邏輯覆蓋包括語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、條件組合覆蓋和路徑覆蓋。
????? 六種覆蓋標準:語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、條件組合覆蓋和路徑覆蓋發現錯誤的能力呈由弱至強的變化。語句覆蓋每條語句至少執行一次。判定覆蓋每個判定的每個分支至少執行一次。條件覆蓋每個判定的每個條件應取到各種可能的值。判定/條件覆蓋同時滿足判定覆蓋條件覆蓋。條件組合覆蓋每個判定中各條件的每一種組合至少出現一次。路徑覆蓋使程序中每一條可能的路徑至少執行一次。
白盒測試也稱結構測試或邏輯驅動測試,它是知道產品內部工作過程,可通過測試來檢測產品內部動作是否按照規格說明書的規定正常進行,按照程序內部的結構測試程序,檢驗程序中的每條通路是否都有能按預定要求正確工作,而不顧它的功能,白盒測試的主要方法有邏輯驅動、基路測試等,主要用于軟件驗證。
"白盒"法全面了解程序內部邏輯結構、對所有邏輯路徑進行測試。"白盒"法是窮舉路徑測試。在使用這一方案時,測試者必須檢查程序的內部結構,從檢查程序的邏輯著手,得出測試數據。貫穿程序的獨立路徑數是天文數字。但即使每條路徑都測試了仍然可能有錯誤。第一,窮舉路徑測試決不能查出程序違反了設計規范,即程序本身是個錯誤的程序。第二,窮舉路徑測試不可能查出程序中因遺漏路徑而出錯。第三,窮舉路徑測試可能發現不了一些與數據相關的錯誤。
如何挑選白盒測試工具
?
????? 白盒測試目前主要用在具有高可靠性要求的軟件領域,例如:軍工軟件、航天航空軟件、工業控制軟件等等。白盒測試工具在選購時應當主要是對開發語言的支持、代碼覆蓋的深度、嵌入式軟件的測試、測試的可視化等。
對開發語言的支持:白盒測試工具是對源代碼進行的測試,測試的主要內容包括詞法分析與語法分析、靜態錯誤分析、動態檢測等。但是對于不同的開發語言,測試工具實現的方式和內容差別是較大的。目前測試工具主要支持的開發語言包括:標準C、C++、Visual C++、Java、Visual J++等。
代碼的覆蓋深度:從覆蓋源程序語句的詳盡程度分析,邏輯覆蓋標準包括以下不同的覆蓋標準:語句覆蓋、判定覆蓋、條件覆蓋、條件判定組合覆蓋、多條件覆蓋和修正判定條件覆蓋。
·語句覆蓋 為了暴露程序中的錯誤,程序中的每條語句至少應該執行一次。因此語句覆蓋(Statement Coverage)的含義是:選擇足夠多的測試數據,使被測程序中每條語句至少執行一次。語句覆蓋是很弱的邏輯覆蓋。
·判定覆蓋 比語句覆蓋稍強的覆蓋標準是判定覆蓋(Decision Coverage)。判定覆蓋的含義是:設計足夠的測試用例,使得程序中的每個判定至少都獲得一次“真值”或“假值”,或者說使得程序中的每一個取“真”分支和取“假”分支至少經歷一次,因此判定覆蓋又稱為分支覆蓋。
·條件覆蓋 在設計程序中,一個判定語句是由多個條件組合而成的復合判定。為了更徹底地實現邏輯覆蓋,可以采用條件覆蓋(Condition Coverage)的標準。條件覆蓋的含義是:構造一組測試用例,使得每一判定語句中每個邏輯條件的可能值至少滿足一次。
·多條件覆蓋 多條件覆蓋也稱條件組合覆蓋,它的含義是:設計足夠的測試用例,使得每個判定中條件的各種可能組合都至少出現一次。顯然滿足多條件覆蓋的測試用例是一定滿足判定覆蓋、條件覆蓋和條件判定組合覆蓋的。
·修正條件判定覆蓋 修正條件判定覆蓋是由歐美的航空/航天制造廠商和使用單位聯合制定的“航空運輸和裝備系統軟件認證標準”,目前在國外的國防、航空航天領域應用廣泛。這個覆蓋度量需要足夠的測試用例來確定各個條件能夠影響到包含的判定的結果。它要求滿足兩個條件:首先,每一個程序模塊的入口和出口點都要考慮至少要被調用一次,每個程序的判定到所有可能的結果值要至少轉換一次;其次,程序的判定被分解為通過邏輯操作符(and、or)連接的布爾條件,每個條件對于判定的結果值是獨立的。
不同的測試工具對于代碼的覆蓋能力也是不同的,通常能夠支持修正條件判定覆蓋的測試工具價格是極其昂貴的。
嵌入式軟件的測試:對于嵌入式軟件的測試,我們還需要一方面進一步考慮測試工具對于嵌入式操作系統的支持能力,例如DOS、Vxworks、Neculeus、Linux和Windows CE等;另一方面還需要考慮測試工具對于硬件平臺的支持能力,包括是否支持所有64/32/16位CPU 和 MCU,是否可以支持 PCI/VME/CPCI 總線。
測試的可視化:白盒測試是工作量巨大并且枯燥的工作,可視化的設計對于測試來說是十分重要的。在選購白盒測試工具時,應當考慮該款測試工具的可視化是否良好,例如:測試過程中是否可以顯示覆蓋率的函數分布圖和上升趨勢圖,是否使用不同的顏色區分已執行和未執行的代碼段顯示分配內存情況實時圖表等,這些對于測試效率和測試質量的提高是具有很大的作用的。
白盒測試之基本路徑測試法
白盒測試的測試方法有代碼檢查法、靜態結構分析法、靜態質量度量法、邏輯覆蓋法、基本路徑測試法、域測試、符號測試、Z路徑覆蓋、程序變異。
其中運用最為廣泛的是基本路徑測試法。
基本路徑測試法是在程序控制流圖的基礎上,通過分析控制構造的環路復雜性,導出基本可執行路徑集合,從而設計測試用例的方法。
設計出的測試用例要保證在測試中程序的每個可執行語句至少執行一次。
在程序控制流圖的基礎上,通過分析控制構造的環路復雜性,導出基本可執行路徑集合,從而設計測試用例。包括以下4個步驟和一個工具方法:
1. 程序的控制流圖:描述程序控制流的一種圖示方法。
2. 程序圈復雜度:McCabe復雜性度量。從程序的環路復雜性可導出程序基本路徑集合中的獨立路徑條數,這是確定程序中每個可執行語句至少執行一次所必須的測試用例數目的上界。
3. 導出測試用例:根據圈復雜度和程序結構設計用例數據輸入和預期結果。
4. 準備測試用例:確?;韭窂郊械拿恳粭l路徑的執行。
工具方法:
圖形矩陣:是在基本路徑測試中起輔助作用的軟件工具,利用它可以實現自動地確定一個基本路徑集。
程序的控制流圖:描述程序控制流的一種圖示方法。
圓圈稱為控制流圖的一個結點,表示一個或多個無分支的語句或源程序語句
流圖只有二種圖形符號:
圖中的每一個圓稱為流圖的結點,代表一條或多條語句。
流圖中的箭頭稱為邊或連接,代表控制流
任何過程設計都要被翻譯成控制流圖。
如何根據程序流程圖畫出控制流程圖?
在將程序流程圖簡化成控制流圖時,應注意:
在選擇或多分支結構中,分支的匯聚處應有一個匯聚結點。
邊和結點圈定的區域叫做區域,當對區域計數時,圖形外的區域也應記為一個區域。
基本路徑測試法的步驟:
第一步:畫出控制流圖
流程圖用來描述程序控制結構??蓪⒘鞒虉D映射到一個相應的流圖(假設流程圖的菱形決定框中不包含復合條件)。在流圖中,每一個圓,稱為流圖的結點,代表一個或多個語句。一個處理方框序列和一個菱形決測框可被映射為一個結點,流圖中的箭頭,稱為邊或連接,代表控制流,類似于流程圖中的箭頭。一條邊必須終止于一個結點,即使該結點并不代表任何語句(例如:if-else-then結構)。由邊和結點限定的范圍稱為區域。計算區域時應包括圖外部的范圍。
第二步:計算圈復雜度
圈復雜度是一種為程序邏輯復雜性提供定量測度的軟件度量,將該度量用于計算程序的基本的獨立路徑數目,為確保所有語句至少執行一次的測試數量的上界。獨立路徑必須包含一條在定義之前不曾用到的邊。
有以下三種方法計算圈復雜度:
流圖中區域的數量對應于環型的復雜性;
給定流圖G的圈復雜度V(G),定義為V(G)=E-N+2,E是流圖中邊的數量,N是流圖中結點的數量;
給定流圖G的圈復雜度V(G),定義為V(G)=P+1,P是流圖G中判定結點的數量。
第三步:導出測試用例 根據上面的計算方法,可得出四個獨立的路徑。(一條獨立路徑是指,和其他的獨立路徑相比,至少引入一個新處理語句或一個新判斷的程序通路。V(G)值正好等于該程序的獨立路徑的條數。)
路徑1:4-14
路徑2:4-6-7-14
路徑3:4-6-8-10-13-4-14
路徑4:4-6-8-11-13-4-14
根據上面的獨立路徑,去設計輸入數據,使程序分別執行到上面四條路徑。
白盒測試三步法
1) 根據代碼的功能,人工設計測試用例進行基本功能測試;
2) 統計白盒覆蓋率,為未覆蓋的白盒單位設計測試用例,實現完整的白盒覆蓋,比較理想的覆蓋率是實現100%語句、條件、分支、路徑覆蓋;
3) 自動生成大量的測試用例,捕捉"程序員未處理某些特殊輸入"形成的錯誤。
第1步的測試用例通常是現成的,因為詳細設計文檔會規定程序的基本功能,沒有文檔的,程序員在編程時也要想清楚程序的功能,這些基本功能就是基本測試用例;
第2步是在第1步的基礎上,檢查未覆蓋的白盒單位,由于未覆蓋的邏輯單位通常對應未測試的等價類,因此第2步可以找出第1步所遺漏的測試用例;
第3步用自動動態測試彌補第2步的固有缺陷。
"三步法"盡量避免重復工作,白盒方法和黑盒方法相結合,人工方法和自動方法相補充,如果第2步的覆蓋率比較理想,那么基本上可以保證找出所有等價類。在開發過程允許的限度內,"三步法"已接近極限,當得起"徹底測試"四個字。
評論
查看更多