定義
測試人員的測試結果會告訴你,他的代碼覆蓋率達到了100%,并且所有測試案例都通過了。然而遺憾的是,我們的語句覆蓋率達到了所謂的100%,但是卻沒有發現最簡單的Bug,比如,當我讓b=0時,會抛出一個除零異常。
簡言之,語句覆蓋,就是設計若幹個測試用例,運行被測程序,使得每一可執行語句至少執行一次。這裡的“若幹個”,意味着使用測試用例越少越好。語句覆蓋率的公式可以表示如下:
詳情
語句覆蓋率=被評價到的語句數量/可執行的語句總數x100%。
符号執行和約束求解相結合的軟件測試方法采用深度優先搜索的路徑調度算法會造成測試路徑聚居性問題,實際軟件中存在路徑爆炸,使得采用該算法的測試語句覆蓋率低下。提出一種新的PSHC路徑調度算法。先将路徑分為前綴和後綴兩部分,每次測試總是試圖尋找這樣的路徑,該路徑與已存在的路徑具有最短的相同前綴,并且包含盡可能多的尚未被訪問過的基本塊作為其後綴。基于Phoenix漏洞發掘工具的實驗結果表明,PSHC算法可以迅速提高測試的語句覆蓋率到100%,有效解決由于深度優先搜索的路徑聚居性導緻的測試代碼的局部性問題,PSHC算法産生的路徑數與循環深度無關,軟件規模越大,該算法的表現越好。