資源描述:
《追求代碼質(zhì)量(1)-不要被覆蓋報(bào)告所迷惑-java開發(fā)java經(jīng)驗(yàn)技巧》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、追求代碼質(zhì)雖(1):不要被覆蓋報(bào)告所迷惑-編程開發(fā)技術(shù)追求代碼質(zhì)量(1):不要被覆蓋報(bào)告所迷惑原文出處:IBM中國您述記得以前大多數(shù)開發(fā)人員是如何追求代碼質(zhì)量的嗎。在那時,冇技巧地放置?main()?方法被視為靈活口適當(dāng)?shù)臏y試方法。經(jīng)歷了漫t的道路以后,現(xiàn)在自動測試已經(jīng)成為高質(zhì)量代碼開發(fā)的基木保證,對此我很感謝。但是這還不是我所要感謝的全部。Java?開發(fā)人員現(xiàn)在擁有很多通過代碼度量、靜態(tài)分析等方法來度量代碼質(zhì)量的工具。我們甚至已經(jīng)設(shè)法將重構(gòu)分類成一系列便利的模式!要獲得有關(guān)代碼質(zhì)量問題的答案,您可以訪問由AndrewGlover主持的?CodeQ
2、uality?論壇。所有的這些新的工具使得確保代碼質(zhì)量比以前簡單-得多,不過您還需要知道如何使用它們。在這個系列中,我將重點(diǎn)闡述冇關(guān)保證代碼質(zhì)量的一些冇時看上去冇點(diǎn)神秘的東西。除了帶您一起熟悉有關(guān)代碼質(zhì)量保證的眾多工具和技術(shù)Z外,我還將為您說明:?定義并有效度量最影響質(zhì)量的代碼方面。?設(shè)定質(zhì)量保證目標(biāo)并照此規(guī)劃您的開發(fā)過程。?確定哪個代碼質(zhì)蜃工具和技術(shù)可以滿足您的需要。?實(shí)現(xiàn)最佳實(shí)踐(清除不好的),使確保代碼質(zhì)魚及早并經(jīng)常地I成為開發(fā)實(shí)踐中輕松且有效的方面。在這個月,我將首先看看Java開發(fā)人員中最流行也是最容易的質(zhì)量保證工具包:測試覆蓋度量。謹(jǐn)防
3、上當(dāng)這是一個晚上塵戰(zhàn)后的早晨,大家都站在飲水機(jī)邊上。開發(fā)人員和管理人員們了解到一些經(jīng)過良好測試的類可以達(dá)到超過90%的覆蓋率,正在高興地互換著NFL風(fēng)格的點(diǎn)心。團(tuán)隊(duì)的集體信心空前高漲。從遠(yuǎn)處可以聽到“放任地重構(gòu)吧”的聲音,似乎缺陷已成為遙遠(yuǎn)的記憶,響應(yīng)性也已微不足道。但是一個很小的反對聲在說:女士們,先生們,不要被覆蓋報(bào)告所愚弄?,F(xiàn)在,不要誤解我的意思:并不是說使用測試覆蓋工具是愚蠢的。對單元測試范例,它是很重要的。不過更重要的是您如何理解所得到的信息。許多開發(fā)團(tuán)隊(duì)會在這兒犯第一個錯。高覆蓋率只是表示執(zhí)行了很多的代碼,并不意味著這些代碼被絃馳?執(zhí)行
4、。如果您關(guān)注的是代碼的質(zhì)量,就必須精確地理解測試覆蓋工具能做什么,不能做什么。然后您才能知道如何使用這些工具去獲取有用的信息。而不是像許多開發(fā)人員那樣,只是滿足于高覆蓋率。測試覆蓋度量測試覆蓋工具通??贘以很容易地添加到確定的單元測試過程中,而且結(jié)果口J靠。卜'載一個可用的工貝,對您的Ant和Maven構(gòu)建腳木作一些小的改動,您和您的同事就冇了在飲水機(jī)邊上談?wù)摰囊环N新報(bào)告:測試覆蓋報(bào)告。當(dāng)?foo?和?bar?這樣的程序包令人驚奇地顯示崗?覆蓋率時,您可以得到不小的安慰。如果您相信至少您的部分代碼可以保證是“沒有BUG”的,您會覺得很安心。但是這樣
5、做是一個錯誤。存在不同類型的覆蓋度量,但是絕大多數(shù)的工具會關(guān)注行療競也叫做語句覆蓋。此外,有些工具會報(bào)告分支覆濫。通過用一個測試工具執(zhí)行代碼庫并捕獲整個測試過程中與被“觸及”的代碼對應(yīng)的數(shù)據(jù),就可以獲得測試覆蓋度量。然后這些數(shù)據(jù)被合成為覆蓋報(bào)告。在Java世界中,這個測試工具通常是JUnit以及名為Cobertura>Emma或Clover等的覆蓋工具。行療蠱只是指出代碼的哪些行被執(zhí)行。如杲一個方法有10行代碼,其中的8行在測試屮被執(zhí)行,那么這個方法的行覆蓋率是80%。這個過程在總體層次上也工作得很好:如果一個類有100行代碼,其中的45行被觸及,
6、那么這個類的行覆蓋率就是45%。同樣,如果一個代碼庫包含10000個非注釋性的代碼行,在特定的測試運(yùn)行中有3500行被執(zhí)行,那么這段代碼的行覆蓋率就是35%。報(bào)告g-愛蠱?的工具試圖度量決策點(diǎn)(比如包含邏輯?AND?或?0R?的條件塊)的覆蓋率。與行覆蓋一樣,如呆在特定方法中冇兩個分支,并且兩個分支在測試屮都被覆蓋,那么您可以說這個方法有100%的分支覆蓋率。問題是,這些度量有什么用?很明顯,很容易獲得所有這些信息,不過您需耍知道如何使用它們。一些例子可以闡明我的觀點(diǎn)。代碼覆蓋在活動我在清單1中創(chuàng)建了一個簡單的類以具體表述類層次的概念。一個給定的類
7、可以有一連串的父類,例如?Vector,它的父類是AbstractList,AbstractList?的父類又是"bstractCollection,AbstractCollection?的父類又是?0bject:清單1.表現(xiàn)類層次的類packagecom.vanward,adana.hierarchy;importjava,utiLArrayList;importjava.util.Collection;importjava.util.Iterator;publicclassHierarchy{privateCollectionclasses;p
8、rivateClassbaseClass;publicHierarchy(){super();this.classes=n