軟件測試覆蓋率之五——提高測試覆蓋率 軟件測試工具
在上一篇文章中,簡單的而介紹了一些測試覆蓋率相關的工具,由于大部分工具筆者并沒有使用的經驗,因此只是簡單地從網絡搜索了一下相關資料并將其整理出來,關于上篇文章的詳細內容,參見:測試覆蓋率之四——測試覆蓋率工具匯總。
這篇文章中,主要討論的是如何提高測試覆蓋率的相關問題。其實,提高測試覆蓋率最基本,甚至是唯一的辦法就是增加測試用例,但是怎樣通過增加測試用例而幫助我們“迅速”提高我們的測試覆蓋率呢?
代碼走查 對于代碼的不熟悉造成了我們的代碼覆蓋率遲遲上不去,我們需要了解到代碼里面究竟有多少條件分支,多少怎樣的循環,分支和循環向來是導致我們代碼覆蓋率比較低的原因,另外,是不是存在一些過時的代碼,沒有運行過代碼監測工具的代碼中很可能存在一些沒有被引用的死代碼,而代碼走查,尤其是對于覆蓋率低的模塊的代碼走查將有助于你增加相關的用例而提高代碼覆蓋率。
工具 這里倒不是說有些工具可以幫助你直接提高代碼覆蓋率,這樣的工具至少我還沒有就見過。這里提到的工具主要包括兩種,一是代碼分析工具另外一種就是上篇文章中提到的代碼覆蓋率工具。代碼分析工具可以幫助我們分析代碼中的冗余部分,這樣可以幫助我們干掉那些總是不可能覆蓋到的死函數,有的編譯器已經提供了類似的功能。使用代碼覆蓋率工具則可以幫助我們快速監測代碼覆蓋率低的地方,這樣我們可以快速定位我們測試的薄弱環節,通過代碼走查或其他方式可以快速增加用例。一般來講,某一模塊的代碼覆蓋率從30%提高到50%所需的時間遙遠小于從60%提高到80%的時間。
規則 這里所指的規則其實是指一些基本測試方法,如等價類劃分,邊界值分析。我們有時候需要通過這些手段來逐一檢查我們那些方面的測試用例沒有考慮到,從而幫助我們增加相關的測試用例。
經驗 這個看起來有點像廢話,因為一般都知道測試經驗豐富有助于測試用例的設計,寫出別人沒有想到的測試用例。我在這里把這句話提出來的主要意圖是告訴大家注意平時的積累,某些時候的靈光一現可能成為日后的一個重要用例。以前的失敗教訓也可以幫助我們從中學到經驗,畢竟“經驗是人為其錯誤而找的代名詞”。
注意 有一點我想有必要再次提醒大家:單方面的提高測試覆蓋率并不能有效的幫助測試質量的提升,尤其是在代碼質量低劣的情況下。就拿一個經典的三角形測試用例來講,開發人員的代碼可能僅僅判斷了“兩邊之和大于第三邊”然后就返回“這是三角形”。在測試用例中,我們可能考慮了很多的問題,考慮了輸入數據的類型,合法性等等的問題,但是這并無助于增加測試覆蓋率。運行這些測試結果是萬里江山一片紅,記住在你的測試用例沒有運行通過的時候考慮測試覆蓋率是沒有意義的,我目前想到了兩條理由:一是這些測試用例可能在代碼的中間部分就已經出了問題,所以用例本該覆蓋到語句沒有覆蓋到,這降低了代碼覆蓋率數據;第二個理由測試用例沒有通過可能就如剛才提到的三角形問題中一樣,開發人員壓根就沒有那么多語句給你去覆蓋,這時候的代碼覆蓋率數據顯然是沒有多大作用的。這也印證了前面文章中提到的“高代碼覆蓋率比低代碼覆蓋率更加‘沒用’”。
寫到這里,我的觀點已經表達完畢了。這一系列文章也差不多可以做個了結了。當然我們還留了一些重要的"尾巴"——測試覆蓋率工具。在昨天的文章中提到,筆者將實際學習使用一些工具,并將整理相關的資料,當然我是不會爽約的,不過這些內容恐怕要等一段時間才能開始了。
測試覆蓋率系列中文章均為作者個人觀點,如有問題或者建議請聯系
文章來源于領測軟件測試網 http://www.kjueaiud.com/