既然測試覆蓋率不能證明代碼是正確的,那么它存在又有什么意義了?有過開發(fā),測試經(jīng)驗的同學(xué)都能體會到,覆蓋率能夠幫助我們發(fā)現(xiàn)代碼的一些問題,如下:

  1、被測系統(tǒng)中有沒有存在代碼,沒有被當(dāng)前的測試用例集所覆蓋的

  2、找出冗余的代碼,提高開發(fā)質(zhì)量

  3、可以及時反饋當(dāng)前系統(tǒng)的測試質(zhì)量,間接衡量測試的質(zhì)量。

  HOW

  介紹一個工具:

  1、Cobertura的使用步驟:

    a)插樁: 通過修改指定class文件的字節(jié)碼來插入統(tǒng)計標簽,插樁信息會保存在cobertura.ser中

    b)部署 :  將插樁完的jar包重新打包,替換掉原來的包

    c)執(zhí)行測試件 : 需確保所調(diào)用服務(wù)與所部署環(huán)境的正確對應(yīng)

    d)生成報告 : 通過腳本結(jié)束服務(wù), 讀取cobertura.ser生成報告

  2、需要掌握的插樁命令

    ?includeClasses     需要包括的類名

    ?excludeClasses    需要排除的類名

    ?ignoreTrivial         將set方法,get方法,構(gòu)造方法排除在統(tǒng)計范圍之外

  3、覆蓋率報告

  生成報告的命令: sh cobertura_war.sh report

  4、使用工具前,應(yīng)該知道的事

    A)你要統(tǒng)計的應(yīng)用類型: jar包,war包或者是ear包?

    B)如果是web應(yīng)用,那么所用的java容器是jetty還是jboss? 啟動目錄在哪里?

    C)閱讀應(yīng)用的啟動腳本,確定它是如何工作的,使用的是哪個包

    D)請確定你需要統(tǒng)計覆蓋率的范圍

    E)是否需要忽略掉對一些模型的無關(guān)代碼的統(tǒng)計,例如模型的set,get,構(gòu)造方法

  當(dāng)然還有很多其他的工具,不過目前在用的是Cobertura,相關(guān)的工具可以去google去搜搜!