Java中語句、分支和路徑覆蓋測試[4] 軟件測試
要獲得100%的基本路徑覆蓋,您需要定義基組。這種方法的圈復雜度為四(1加決策數量),需要定義四個線性無關路徑。為此,可以將任何第一個路徑定為基線,并且逐個瀏覽決策,直至完成基組。
路徑1:任何路徑都可以作為基線,因此將決策結果選定為真(由 TTT 表示)。這是基組中的第一個路徑。
路徑2:要找到下一個基本路徑,瀏覽(僅限于)基線路徑中的第一個決策,顯示 FTT 表示您期望的決策結果。
路徑3:瀏覽基線路徑中的第二個決策,顯示第三個基本路徑為 TFT 。這樣,第一個基線決策就可以保持為結果“真”不變。
路徑4:最后,瀏覽基線路徑中的第三個決策,顯示第四個基本路徑為 TTF 。這樣,第一個基線決策就可以保持為結果“真”不變。
因此,四個基本路徑為 TTT、 FTT、 TFT、和 TTF,F在,進行測試并查看結果。
在所附的代碼中,您可以看到 testReturnInputIntBooleanBooleanBooleanTFT() 和 testReturnInputIntBooleanBooleanBooleanFTT() 找到了語句和分支覆蓋中未發現的bug。此外,基本路徑數量隨著決策數據呈線性增長,而非指數增長,使需要進行測試的數量與實現全面分支覆蓋所需的數量相等。事實上,基本路徑測試覆蓋了一個方法中的所有語句和分支,因而有效包含了分支和語句覆蓋。
但是,為何不對其他潛在路徑進行測試呢?記住,基本路徑測試的目的在于測試所有相對獨立的決策結果。通過對四個基本路徑的測試可達到這個目的,而這與其他的路徑沒有關系。如果在開始時選擇 FFF 作為基線路徑,您將得到(FFF、 TFF、 FTF、 FFT)基組,與 TTT 路徑無關。兩個基組都同樣有效,任何一個都可以滿足您的獨立決策結果標準。
創建測試數據
在本示例中獲得100%的基本路徑覆蓋率非常容易,但是對現實生活中的路徑基組進行全面測試將更具挑戰性,甚至不可能實現。由于基本路徑覆蓋測試一個方法中各個決策之間的交互情況,因此您需要使用促使指定路徑執行的測試數據,而不能僅僅使用單一的決策結果,這對分支覆蓋來說也很有必要。通過注入數據來強行按指定路徑執行非常困難,但是您可以記住簡化測試過程的幾種編碼實踐。
使您的代碼保持簡單。圈復雜度越低越好。在能夠減小數值時進行重構。數值越高,就越難測試,這個數值一旦超過10,測試就根本無法實現。這樣不僅能減少需要測試的基本路徑數量,而且還能減少每個路徑中的決策數量。
避免重復決策
避免數據依賴性
考慮以下示例:

圖5. 基本路徑測試
x 變量間接依賴于 object1 參數,但其中插入的代碼卻使查看關系變得尤為困難。隨著方法變得越來越復雜,查看方法的輸入值和決策表達式之間的關系幾乎是不可能的。
文章來源于領測軟件測試網 http://www.kjueaiud.com/