摘要:伴隨著軟件和硬件的發展而逐步發展起來的軟件測試。軟件測試是一種檢驗手段,目的是為了尋找軟件系統的中缺陷,在業界已經有越來越多的公司意識到了軟件測試的重要性,并且在軟件測試方面加大了投入。其中,白盒測試是軟件測試技術中最基本的方法之一, 是針對被測單元內部是如何進行工作的測試,是以覆蓋測試與路徑測試為基本策略。該文將重點介紹白盒測試中的常用測試方法,并通過實例介紹實際運用白盒測試的技術。
關鍵詞:白盒測試;語句覆蓋;判定覆蓋;條件覆蓋;組合覆蓋;路徑覆蓋
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2010)11-2633-02
On the White-Box Testing Techniques
HONG Xin-feng
(Traffic Police Branch Of Quanzhou Police Security Burea, Quanzhou 362000, China)
Abstract: With the development of software and hardware, software testing is developed gradually.Software testing is a means of test, the aim is to find defects in the software systems, More and more companies have realized the importance of software testing in the industry and increased the investment in the software testing. Among them, white-box testing is the most basic method,and the unit under test is how to work within the test with pertinence, which based on the coverage testing and path testing for the basic strategy. This article focuses on the white-box testing of the used test methods commonly, and through examples to illustrate the practical application of white-box testing techniques.
Key words: white-box testing; statement coverage; decision coverage; condition coverage; combination of coverage; path coverage
1 白盒測試的概念
白盒測試是針對被測單元內部是如何進行工作的一種測試方法.它根據程序控制結構設計導出測試用例,主要用于軟件程序的驗證。又稱透明盒測試、邏輯驅動測試。
采用白盒測試應全面的了解程序內部的邏輯結構,對所有的邏輯路徑進行測試,是一種窮舉路徑的測試方法。在使用這種方法時,測試者必須檢查程序的內部結構,從檢查程序的邏輯結構著手,得出測試數據。
2 白盒測試的常用方法
覆蓋率測試用例設計方法是一種常用的白盒測試方法。覆蓋率不是目標,只是一種手段。測試的目標是盡可能地去發現錯誤,去尋找被測試對象與規定的不一致的地方。
目前,比較常用的覆蓋測試用例方法包括語句覆蓋、判定覆蓋、條件覆蓋、組合覆蓋、路徑覆蓋。為了便于理解,我們結合一個實例來分別講解這幾種方法。(程序如下)
1) ----IF ((A<2)and (B=1)) then
2) ----y=y/A
3) ----IF ((C>2) and (X>1))then
4) ----z=z+1
5) ----結束
根據程序畫出相應的流程圖和流圖如圖1,圖2所示。
1) 語句覆蓋
采用語句覆蓋方法應選擇足夠多的測試用例,使程序中的每個可執行語句至少執行一次。
例如上述實例,我們設計一個能通過流圖中路徑BCEF(執行了程序(1)(2)(3)(4)(5)語句)的測試路徑即可。即當A=1,B=1,C=3,X=2 時程序的五個語句均得到執行,完成了語句覆蓋。換句說,測試用例 A=1,B=1,C=3,X=2 就可以滿足了語句覆蓋。
2) 判定覆蓋
判定覆蓋比語句覆蓋較強一種的方法,它通過執行足夠的測試用例,使得程序中的每個判定至少都獲得一次”真”值和”假”值.也稱為”分支覆蓋”。
例如上述實例,要滿足判定覆蓋的測試用例就要使程序中的(1)語句和(3)語句獲得一次”真”值和”假”值。
判定((A<2)and (B=1))的值至少獲得一次”真”值(例如:A=1,B=1)和”假”值(例如:A=2,B=1);
判定((C>2) and (X>1))的值至少獲得一次”真”值(C=3,X=2)和”假”值(C=2,X=2)。于是,我們可以設計出以下兩組測試用例就可以滿足判定覆蓋。
測試用例1:A=1,B=1,C=3,X=2
測試用例2:A=2,B=1,C=2,X=2
3) 條件覆蓋
條件覆蓋是設計若干個測試用例,在執行測程序以后,要使用每個判定中的每個條件的可能值至少滿足一次.
例如上述實例,要滿足條件覆蓋的測試用例,就要滿足以下要求:
判定((A<2)and (B=1))中的條件(A<2)的值至少獲得一次”真”值(例如:A =1)和”假”值(例如:A=2),條件(B=1)分的值至少獲得一次”真”值(例如:B =1)和”假”值(例如:B =2)。
同理,也要使判定((C>2) and (X>1))中的條件(C>2) 的值至少獲得一次”真”值(例如:C=3)和”假”值(例如:C=2),條件(X>1)分的值至少獲得一次”真”值(例如:X =2)和”假”值(例如:X =1)。
于是,我們可以設計出以下兩組測試用例就可以滿足條件覆蓋,測試用例如下:
測試用例1:A =1,B=1,C=3,X=2
測試用例2:A=2,B=2,C=2,X=1
4) 組合覆蓋
組合覆蓋是通過執行足夠的測試用例,使得每個判定中的條件的各種可能都至少執行一次.因此組合覆蓋的測試用例一定滿足判定覆蓋、條件覆蓋。
例如上述實例,要滿足組合覆蓋的測試用例,就要滿足以下要求:
對于,判定((A<2)and (B=1))中的條件的各種可能值有:
(A<2)、(B=1)兩者的邏輯值同時為真,例如 A =1,B=1;
(A<2)、(B=1)兩者的邏輯值同時為假,例如 A =2,B=2;
(A<2)、(B=1)兩者的邏輯值前一個為真,后一個為假,例如 A =1,B=2;
(A<2)、(B=1)兩者的邏輯值前一個為假,后一個為真,例如 A =2,B=1;
同理,也要使判定((C>2) and (X>1))中的條件的各種可能值有:
(C>2)、(X>1)兩者的邏輯值同時為真,例如 C=3,X =2;
(C>2)、(X>1)兩者的邏輯值同時為假,例如 C=2,X =1;
(C>2)、(X>1)兩者的邏輯值前一個為真,后一個為假,例如C=3,X=1;
(C>2)、(X>1)兩者的邏輯值前一個為假,后一個為真,例如C=2,X=2;
于是,我們可以設計出以下四組測試用例就可以滿足組合覆蓋,測試用例如下:
測試用例1:A =1,B=1,C=3,X=2;
測試用例2:A=2,B=2,C=2,X=1;
測試用例3:A =1,B=2,C=3,X=1;
測試用例4:A =2,B=1,C=2,X=2;
5) 路徑覆蓋
路徑覆蓋是指設計足夠多的測試用例,要求覆蓋程序中所有的可能的路徑. 路徑覆蓋就是從一個程序的入口開始,執行所經歷的各個語句的完整過程。
例如上述實例,要滿足路徑覆蓋的測試用例,就要覆蓋AD、AEF、BCD、BCEF這四條路徑(流圖所示)。
于是,我們可以設計出以下四組測試用例就可以滿足路徑覆蓋,測試用例如下:
路徑1AD (1-3-5)測試用例1:A =2,B=2,C=2,X=1;
路徑2AEF(1-3-4-5)測試用例2:A =2,B=2,C=3,X=2;
路徑3BCD(1-2-3-5)測試用例3:A =1,B=1,C=2,X=1;
路徑4BCEF(1-2-3-4-5) 測試用例3:A =1,B=1,C=3,X=2;
3 結束語
本文著重介紹了白盒測試的基本概念、常用的測試技術、并通過實例進行講解。白盒測試是按照程序內部的結構測試程序,通過測試來檢測產品內部動作是否按照設計規格說明書的規定正常進行,檢驗程序中的每條通路是否都能按預定要求正確工作。白盒測試普遍應用于單元測試當中。
參考文獻:
[1] 毛志雄.軟件測試理論與實踐[M].北京:中國鐵道出版社,2008.
[2] 賀平.軟件測試教程[M].北京:電子工業出版社,2007.
[3] 佟偉光.軟件測試技術[M].北京:人民郵電出版社,2005.