Java中語句、分支和路徑覆蓋測試[1] 軟件測試
代碼覆蓋是一種用來度量已執行的軟件測試水平的方法
簡介
代碼覆蓋是一種用來度量已執行的軟件測試水平的方法。收集覆蓋度量數據的過程很簡單:監測您的代碼,并對所監測的版本運行測試。這樣就可以生成相關數據,展示已執行哪些代碼,或者更重要的是,未執行哪些代碼。覆蓋測試是對單元測試的完美補充:單元測試可以顯示出是否代碼按預期執行,而代碼覆蓋可以表明還需要對哪些代碼進行測試。
大多數開發人員都能理解這一過程,也贊同其價值主張,他們通常追求100%的覆蓋率。盡管100%的覆蓋率是個極好的目標,但類型不當的100%覆蓋率依然會留下未知的問題。典型的軟件開發是根據要測試的語句或分支的數量來度量覆蓋率的。即便有著100%的語句或分支覆蓋率,代碼邏輯依然可能存在嚴重的邏輯bug,只能為開發人員和管理員帶來虛假的安全感。
為何100%的覆蓋率還不夠?這是因為語句和分支覆蓋率無法表明代碼中的邏輯是否已執行。語句和分支覆蓋對于未執行代碼塊中出現的明顯問題來說很有用,但它們經常會錯過與決策結構和決策交互相關的bug。而另一方面,路徑覆蓋則是一種有助于及早發現缺陷的更為健壯和全面的技術。
在了解路徑覆蓋之前,先關注一下語句和分支覆蓋率方面的一些問題:
語句覆蓋
語句覆蓋可以識別在一個方法或類中執行了哪些語句。這是一種計算起來比較簡單的量規,現在有許多 開源產品 都可以評測這種覆蓋級別。最終,語句覆蓋的獲益在于其能夠識別未執行代碼塊。然而語句覆蓋也存在問題,其無法識別源代碼中控制流結構導致的bug,例如復合條件或者連續開關標簽。這意味著在您可以輕松獲得100%覆蓋率的同時,未發現的明顯bug依然存在。
下例中顯示了這種問題。此處,returnInput()方法由七條語句組成,它有一個簡單的需求:輸出應等于輸入。

圖1. 代碼示例
接下來,您可以創建一個滿足需求并且具有100%語句覆蓋率的JUnit測試用例。

圖2. 語句覆蓋
文章來源于領測軟件測試網 http://www.kjueaiud.com/