亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 >
用Cobertura做測試覆蓋率
作者:網絡轉載 發布時間:[ 2013/1/28 13:59:40 ] 推薦標簽:

圖 3. NameFunction 類中的代碼覆蓋率

Cobertura 是 jcoverage 的分支(請參閱 參考資料)。GPL 版本的 jcoverage 已經有一年沒有更新過了,并且有一些長期存在的 bug,Cobertura 修復了這些 bug。原來的那些 jcoverage 開發人員不再繼續開發開放源碼,他們轉向開發 jcoverage 的商業版和 jcoverage+,jcoverage+ 是一個從同一代碼基礎中發展出來的封閉源代碼產品。開放源碼的奇妙之處在于:一個產品不會因為原開發人員決定讓他們的工作獲得相應的報酬而消亡。

確認遺漏的測試

利用 Cobertura 報告,可以找出代碼中未測試的部分并針對它們編寫測試。例如,圖 3 顯示 Jaxen 需要進行一些測試,運用 name() 函數對文字節點、注釋節點、處理指令節點、屬性節點和名稱空間節點進行測試。

如果有許多未覆蓋的代碼,像 Cobertura 在這里報告的那樣,那么添加所有缺少的測試將會非常耗時,但也是值得的。不一定要一次完成它。您可以從被測試的少的代碼開始,比如那些所有沒有覆蓋的包。在測試所有的包之后,可以對每一個顯示為沒有覆蓋的類編寫一些測試代碼。對所有類進行專門測試后,還要為所有未覆蓋的方法編寫測試代碼。在測試所有方法之后,可以開始分析對未測試的語句進行測試的必要性。

(幾乎)不留下任何未測試的代碼

是否有一些可以測試但不應測試的內容?這取決于您問的是誰。在 JUnit FAQ 中,J. B. Rainsberger 寫到“一般的看法是:如果 自身 不會出問題,那么它會因為太簡單而不會出問題。第一個例子是 getX() 方法。假定 getX() 方法只提供某一實例變量的值。在這種情況下,除非編譯器或者解釋器出了問題,否則 getX() 是不會出問題的。因此,不用測試 getX(),測試它不會帶來任何好處。對于 setX() 方法來說也是如此,不過,如果 setX() 方法確實要進行任何參數驗證,或者說確實有副作用,那么還是有必要對其進行測試。”
 

理論上,對未覆蓋的代碼編寫測試代碼不一定會發現 bug。但在實踐中,我從來沒有碰到沒有發現 bug 的情況。未測試的代碼充滿了 bug。所做的測試越少,在代碼中隱藏的、未發現的 bug 會越多。

我不同意。我已經記不清在“簡單得不會出問題”的代碼中發現的 bug 的數量了。確實,一些 getter 和 setter 很簡單,不可能出問題。但是我從來沒有辦法區分哪些方法是真的簡單得不會出錯,哪些方法只是看上去如此。編寫覆蓋像 setter 和 getter 這樣簡單方法的測試代碼并不難。為此所花的少量時間會因為在這些方法中發現未曾預料到的 bug 而得到補償。

一般來說,開始測量后,達到 90% 的測試覆蓋率是很容易的。將覆蓋率提高到 95% 或者更高需要動一下腦筋。例如,可能需要裝載不同版本的支持庫,以測試沒有在所有版本的庫中出現的 bug;蛘咝枰匦聵嫿ùa,以便測試通常執行不到的部分代碼。可以對類進行擴展,讓它們的受保護方法變為公共方法,這樣可以對這些方法進行測試。這些技巧看起來像是多此一舉,但是它們曾幫助我在一半的時間內發現更多的未發現的 bug。

并不總是可以得到完美的、 的代碼覆蓋率。有時您會發現,不管對代碼如何改造,仍然有一些行、方法、甚至是整個類是測試不到的。下面是您可能會遇到的挑戰的一些例子:

    只在特定平臺上執行的代碼。例如,在一個設計良好的 GUI 應用程序中,添加一個 Exit 菜單項的代碼可以在 Windows PC 上運行,但它不能在 Mac 機上運行。

    捕獲不會發生的異常的 catch 語句,比如在從 ByteArrayInputStream 進行讀取操作時拋出的 IOException。

    非公共類中的一些方法,它們永遠也不會被實際調用,只是為了滿足某個接口契約而必須實現。

    處理虛擬機 bug 的代碼塊,比如說,不能識別 UTF-8 編碼。

考慮到上面這些以及類似的情況,我認為一些極限程序員自動刪除所有未測試代碼的做法是不切實際的,并且可能具有一定的諷刺性。不能總是獲得完美的測試覆蓋率并不意味著不會有更好的覆蓋率。

然而,比執行不到的語句和方法更常見的是殘留代碼,它不再有任何作用,并且從代碼基中去掉這些代碼也不會產生任何影響。有時可以通過使用反射來訪問私有成員這樣的怪招來測試未測試的代碼。還可以為未測試的、包保護(package-protected)的代碼來編寫測試代碼,將測試類放到將要測試的類所在那個包中。但好不要這樣做。所有不能通過發布的(公共的和受保護的)接口訪問的代碼都應刪除。執行不到的代碼不應當成為代碼基的一部分。代碼基越小,它越容易被理解和維護。

上一頁123下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 欧美精品成人久久网站 | 性欧美疯狂猛交69hd | 国产区亚洲区 | 欧美在线视频观看 | 丁香综合激情 | 国产免费一级高清淫曰本片 | 亚洲性色永久网址 | 91久久天天躁狠狠躁夜夜 | 成年大片免费播放视频人 | 大片免费播放器 | 成年人视频在线免费观看 | 国产男女猛烈无遮档免费视频网站 | 天天爱天天做久久天天狠狼 | 日韩精品一区二区三区免费观看 | 九九99九九精彩 | m男亚洲一区中文字幕 | 亚洲一区二区免费在线观看 | 一级特黄aaa大片 | 欧美激情视频免费 | 国内不卡1区2区 | 久久天堂夜夜一本婷婷麻豆 | 成人黄激情免费视频 | 77788色淫网站女女免费视频 | 在线观看成年视频 | 最近免费中文字幕大全高清大全1 | 2020国产精品永久在线观看 | 日韩无 | 欧美一区二区三区不卡免费 | 日韩激情小说 | 天天拍天天操 | 欧美 日韩 亚洲另类专区 | 欧美第一夜| 国产三级日本三级美三级 | 18岁以下禁止看很黄的视频 | 国产亚洲免费观看 | 国产在线观看一区二区三区四区 | 精品一区二区免费视频 | 亚洲综合日韩中文字幕v在线 | 欧美日韩ay在线观看 | 一个人在线看的免费视频 | 午夜在线不卡 |