一、單元測試
1.單元測試是對軟件的基本組成單元進行的測試,如函數、類或類的方法。
單元測試是對軟件的最小可測試單元(即可獨立編譯或匯編的程序模塊)進行的測試活動,也稱為模塊測試
二、白盒測試方法
實例代碼
public static int test(int a,int b,int c) {
1 int result = 0;
2 if(a == 0 or b > 2) {
3 result = b - a;}
4 if(a > 0 and c > 0 ) {
5 result = c * a;}
6 return result;}
流程圖
1)語句覆蓋
語句覆蓋法是指設計適當數量的測試用例,使被測程序中的每條語句至少被執行一次。
語句覆蓋率的計算方法為:至少被執行一次的語句數量 / 程序中可執行的語句總數
語句覆蓋可以使程序中的語句都被測試到,但是它也是覆蓋最弱的一種邏輯覆蓋方法,無法發現程序中的很多邏輯錯誤
2)分支(判定覆蓋)
分支覆蓋,也叫判定覆蓋,是指運行代碼進行測試時,程序中的所有判定語句的真、假分支至少都被執行過一次。
分支覆蓋率的計算方法為:測試時覆蓋到的判定語句真、假分支的總數 / 程序中判定語句真、假分支的總數
分支(判定)覆蓋比語句覆蓋的的覆蓋效果要強一些,但是分支(判定)覆蓋可能還是無法發現程序中的一些邏輯錯誤
3)條件覆蓋
條件覆蓋法是指設計適當數量的測試用例,運行被測程序,使得程序中每個判斷語句中條件的真、假分支至少被執行一次(復合條件要拆分)
但是,滿足了條件覆蓋也不能保證所有的分支都已經得到覆蓋
4)分支-條件覆蓋
指運行代碼進行測試時,程序中所有判斷語句中的條件取值為真、取值為假的情況和整個判斷語句取真分支、假分支的情況都被覆蓋到(即,至少被執行過一次)
無法覆蓋所有路徑
5)條件組合覆蓋
要求讓每個條件為真、為假情況所有可能的組合都至少被執行一次
滿足了條件組合覆蓋也不能保證所有的路徑都已經得到覆蓋
6)路徑覆蓋
程序中的所有路徑都至少被執行一次
但對于包含多且復雜的判斷語句、循環語句的程序來說,要覆蓋每一條路徑將會非常困難
7)基本路徑覆蓋
基本路徑覆蓋法是在程序控制流圖的基礎上,通過分析控制結構的圈復雜度,導出基本可執行的路徑集合設計測試用例,運行被測程序,使程序的基本路徑都得到覆蓋。
控制流圖中如果含有復合條件,需要改為單條件嵌套的形式
V(G) = A + 1,其中 A 代表控制流圖中的封閉區域數量。從下圖可以看出,程序的控制流圖中共有 4 個封閉區域,所以,圈復雜度 V(G) = 4 + 1 = 5 。
V(G) = P + 1,其中 P 代表控制流圖中的判定節點數
V(G) = e - n + 2,其中 e 代表控制流圖中的邊的數量,即控制流中的箭頭數量;n 代表控制流圖的節點數量,即控制流圖中的圓圈數量
圈復雜度是指程序中的獨立路徑數量,是確保程序中每個可執行語句至少執行一次需要的測試用例數量的最小值
可以使程序中的每條獨立路徑都至少執行一次。如果程序中的基本路徑達到了 100% 覆蓋,則分支(判定)覆蓋、條件覆蓋也能達到 100% 覆蓋。
8)簡單循環測試
簡單循環是最簡單的循環,即只有一個循環且沒有嵌套,例如,一個 while 循環、一個do-while 循環、一個 for 循環
簡單循環的測試用例需要考慮下列幾種情況(設最大循環次數為 n ):
(1)循環 0 次:測試跳過整個循環的場景;
(2)循環 1 次:目的是檢查循環的初始值是否正確;
(3)循環 2 次:目的是檢查多次循環是否正確;
(4)循環 m 次(其中 2 < m < n - 1):目的是檢查多次循環是否正確
? 5)循環 n - 1 次:目的是檢查邊界值是否正確;
(6)循環 n 次:目的是檢查邊界值是否正確;
(7)循環 n + 1 次:目的是檢查邊界值是否正確。
9)嵌套循環
是指一個循環語句的循環體內含有其他的循環語句的語法結構
按簡單循環的方法對最內層循環進行測試,其他循環次數設置為最小值
2)由內向外逐步對每一層循環進行測試,直到所有各層循環都測試完成。測試時將當前循環的所有外層循環的循環次數設置為最小值,所有內層循環的循環次數設置為典型值;
3)對各層循環同時取最小循環次數進行測試,如果有最大次數,再同時取最大循環次數進行測試
10)串接循環
是指兩個或多個循環連接在一起的循環結構,也稱連鎖循環
第二種串接循環是各個循環體之間有關聯關系,第二個循環的輸入來自于第一個循環的輸出,對于這種串接循環,我們可以考慮使用嵌套循環的測試方法來進行測試。
按簡單循環的方法對下層循環進行測試,其他循環次數設置為最小值;
2)由下至上逐步對每一層循環進行測試,直到所有循環都測試完成。測試時將當前循環的所有上層循環的循環次數設置為最小值,所有下層循環的循環次數設置為典型值;
3)對各層循環同時取最小循環次數進行測試,如果有最大次數,再同時取最大循環次數進行測試。