從上面的例子還看出盡管做了語句覆蓋,但是程序仍然可能存在錯誤。語句覆蓋是一種最弱的覆蓋測試,但卻是一種必須做的最低限度的白盒測試。獨立路徑測試可以保證所有語句被執行至少一次,同時排除上述(x=0,y=5/x)組合沒有被執行的情況。在進行獨立路徑測試(基本路徑測試)之前,先介紹流圖符號:
如上圖所示,每一個圓,稱為流圖的節點,代表一個或多個語句,流程圖中的處理方框序列和菱形決策框可映射為一個節點,流圖中的箭頭,稱為邊或連接,代表控制流,類似於流程圖中的箭頭。一條邊必須終止於一個節點,即使該節點並不代表任何語句,例如,下圖中兩個處理方框交匯處是一個節點,邊和節點限定的范圍稱為區域。
任何過程設計表示法都可被翻譯成流圖,下面顯示了一段流程圖以及相應的流圖。
(a)流程圖
(b)流圖
注意,程序設計中遇到復合條件時(邏輯or, and, nor等),生成的流圖變得更為復雜,如(c)流圖所示。此時必須為語句IF a OR b中的每一個a和b創建一個獨立的節點。
獨立路徑是指程序中至少引進一個新的處理語句集合,采用流圖的術語,即獨立路徑必須至少包含一條在定義路徑之前不曾用到的邊。例如圖(b)中所示流圖的一個獨立路徑集合為:
路徑1:1-11
路徑2:1-2-3-4-5-10-1-11
路徑3:1-2-3-6-8-9-10-11
路徑4:1-2-3-6-7-9-10-1-11
上面定義的路徑1,2,3和4包含了(b)流圖的一個基本集,如果能將測試設計為強迫運行這些路徑,那么程序中的每一條語句將至少被執行一次,每一個條件執行時都將分別取true和false(分支覆蓋)。應該注意到基本集並不唯一,實際上,給定的過程設計可派生出任意數量的不同基本集。如何才能知道需要尋找多少條路徑呢?可以通過如下三種方法之一來計算獨立路徑的上界:
1. V=E-N+2,E是流圖中邊的數量,N是流圖節點數量。
2. V=P+1,P是流圖G中判定節點的數量
3. V=R,R是流圖中區域的數量
例如,(b)流圖可以采用上述任意一種算法來計算獨立路徑的數量
1. 流圖有4個區域,所以V=4
2. V=11條邊-9個節點+2=4
3. V=3個判定節點+1=4
由此為了覆蓋所有程序語句,必須設計至少4個測試用例使程序運行於這4條路徑。