Java中語句、分支和路徑覆蓋測試[3] 軟件測試
兩個測試都驗證了(輸出等于輸入)需求并且達到了100%的分支覆蓋率。但是,盡管實現了100%的分支覆蓋率,測試卻未發現bug。管理員可能會再次認為測試已完成,該方法可進入生產階段。
聰明的開發人員將認識到您可能錯過了被測試方法中的一些可能路徑。以上示例已經測試了 真-假-真或假-真-真 路徑,您可以通過添加兩個額外測試來進行檢驗。
該方法中只有三個決策,因此測試所有八種可能路徑是非常容易的。但對于包含更多決策的方法來說,可能路徑數量將呈指數增長。例如,一個包含十個布爾決策的方法會有1024種可能路徑。這樣只有祝您好運了!
因此,獲得100%的語句和100%的分支覆蓋率是遠遠不夠的,但費力地測試一個復雜方法包含的所有可能路徑也是不可行的。有沒有其他選擇呢?讓我們看看基本路徑覆蓋。
基本路徑覆蓋
路徑代表著從開始執行方法到退出方法的執行流程。一個有著N個決策的方法會有 2^N 種可能路徑,如果方法中包含一個循環,則會產生無限數量的路徑。幸運的是,您可以使用稱為 圈復雜度(cyclomatic complexity) 的度量來減少需要測試的路徑數量。
一種方法的圈復雜度是數字1加上該方法中的獨特決策數量。圈復雜度可以幫助您定義方法的線性無關路徑的數量,即基組。線性無關的定義不在本文討論范圍之內,但總體來說基組就是一個最小的路徑組,它可以通過組合來創建方法中的其他可能路徑。
像分支覆蓋一樣,路徑基組測試確保了您可以測試每個決策結果,但是與分支覆蓋不同,基本路徑覆蓋可以確保對所有相互獨立的決策結果進行測試。也就是說每個新的基本路徑都可以準確地“瀏覽”前一個執行決策,而不改變其他執行分支。這是基本路徑覆蓋比分支覆蓋更健壯的重要原因,它使您能夠了解如何通過改變一個決策來影響方法的行為。
我將使用同一個示例進行說明。

圖4. 代碼示例
文章來源于領測軟件測試網 http://www.kjueaiud.com/