測(cè)試覆蓋率导俘,簡(jiǎn)單的說(shuō)峦耘,就是評(píng)價(jià)測(cè)試活動(dòng)覆蓋產(chǎn)品代碼的指標(biāo)。測(cè)試的目的旅薄,是確認(rèn)產(chǎn)品代碼按照預(yù)期一樣工作辅髓,也可以看作是產(chǎn)品代碼工作方式的說(shuō)明文檔泣崩。進(jìn)一步考慮,測(cè)試覆蓋率可以看作是產(chǎn)品代碼質(zhì)量的間接指標(biāo)--之所以說(shuō)是間接指標(biāo)洛口,因?yàn)闇y(cè)試覆蓋率評(píng)價(jià)的是測(cè)試代碼的質(zhì)量矫付,并不是產(chǎn)品代碼的質(zhì)量。代碼覆蓋率是一種白盒測(cè)試第焰,因?yàn)闇y(cè)試覆蓋率是評(píng)價(jià)產(chǎn)品代碼類(lèi)內(nèi)部的指標(biāo)买优,而不是評(píng)價(jià)系統(tǒng)接口或規(guī)約。測(cè)試覆蓋率尤其用于評(píng)價(jià)測(cè)試代碼是否已經(jīng)覆蓋了產(chǎn)品代碼所有的路徑挺举。
1杀赢、EclEmma coverage安裝
有兩種方法:1、eclipse中點(diǎn)擊工具欄的 help--install new software 顯示如下截圖
點(diǎn)擊Add湘纵,彈出如下
在name中填寫(xiě)安裝軟件的名字(自己命名)脂崔,location中填寫(xiě)如下網(wǎng)址:
http://update.eclemma.org/
接下來(lái),只要一路next就OK了梧喷,安裝成功后eclipse工具欄會(huì)添加一個(gè)新圖標(biāo)
如果出現(xiàn)上面截圖表示成功
2脱篙、第二種方法更簡(jiǎn)單
eclipse中點(diǎn)擊工具欄的 help-- Eclipse marketplace 如下圖
按照紅線標(biāo)注的操作,安裝完后eclipse工具欄出現(xiàn)第一種安裝說(shuō)明最后截圖中的圖標(biāo)伤柄,表示安裝成功。
2文搂、coverage使用
首選選擇你要測(cè)試的Test測(cè)試類(lèi)适刀,右擊,右鍵菜單里面多了一個(gè)Coverage as的選項(xiàng)煤蹭,選擇JUNIT笔喉,這時(shí)測(cè)試程序會(huì)在JUNIT中執(zhí)行一遍,如果代碼有多種情況硝皂,可以多次執(zhí)行常挚,吧多次統(tǒng)計(jì)的測(cè)試代碼覆蓋路進(jìn)行整合,生成覆蓋率統(tǒng)計(jì)結(jié)果稽物。(java application 程序也可以直接用 coverage as 執(zhí)行)
實(shí)例
百度中看到一個(gè)很好的例子奄毡,這里借用一下:
public class HelloWorld {
public static void main(String[] args) {
new HelloWorld();
int rand = (int) (Math.random() * 100);
if (rand % 2 == 0) {
System.out.println("Hello, world! 0");
} else
System.out.println("Hello, world! 1");
int result = rand % 2 == 0 ? rand + rand : rand * rand;
System.out.println(result);
}
}
按照上面說(shuō)的coverage使用,執(zhí)行一下贝或, 可以看到如下截圖
綠色:代碼被執(zhí)行過(guò)
黃色:代碼部分被執(zhí)行過(guò)
紅色:代碼沒(méi)有被執(zhí)行過(guò)
在下面的Coverage視窗中吼过,可以看到代碼測(cè)試覆蓋率∵浣保看代碼盗忱,是取得隨機(jī)數(shù),if判斷可能出現(xiàn)不滿足羊赵,可能滿足的情況趟佃, 需要多次執(zhí)行該代碼,得到多次的代碼覆蓋率,然后吧多次得到的覆蓋率合并闲昭,得到這個(gè)類(lèi)總的代碼測(cè)試覆蓋率罐寨。
(其中有一句:new HelloWorld(); 該行代碼是為了調(diào)用,該類(lèi)默認(rèn)的構(gòu)造器汤纸。我認(rèn)為:每個(gè)類(lèi)都有默認(rèn)的構(gòu)造器衩茸,只是沒(méi)有顯示的代碼而已,如果這里不寫(xiě)贮泞,代碼覆蓋率會(huì)降低楞慈,第一行public class HelloWorld 綠色也會(huì)變成紅色 )
總的統(tǒng)計(jì)如下:
箭頭所指為合并多次執(zhí)行后的覆蓋率百分比
3、總結(jié)
1)啃擦、coverage 可以測(cè)試java application程序囊蓝,也可以測(cè)試JUnit 測(cè)試類(lèi)
2)、如果要測(cè)試整個(gè)項(xiàng)目中代碼的測(cè)試覆蓋率令蛉,可能比較麻煩聚霜,至少需要吧所有代碼的測(cè)試類(lèi)執(zhí)行一遍,并且把所有代碼執(zhí)行的路徑都考慮到才準(zhǔn)確(不知道有沒(méi)有對(duì)整個(gè)項(xiàng)目測(cè)試的好方法珠叔,最起碼我還不知道 -.-)
3)蝎宇、別忘記測(cè)試異常情況,空指針祷安,或者其他異常后姥芥,執(zhí)行異常代碼,也會(huì)增加代碼測(cè)試覆蓋率的
4)汇鞭、如果得到代碼測(cè)試覆蓋率比較高凉唐,顯而易見(jiàn)能看出代碼安全性會(huì)比較能保證(最起碼測(cè)試無(wú)誤)