代碼覆蓋率統計神器-jacoco工具實戰

每天進步一點點,關註我們哦,每天分享測試技術文章

本文章出自【碼同學軟件測試】

碼同學公眾號:自動化軟件測試

碼同學抖音號:小碼哥聊軟件測試

代碼覆蓋(英語:Code coverage)是軟件測試中的一種度量,描述程序中源代碼被測試的比例和程度,所得比例稱為代碼覆蓋率。

測試覆蓋率

測試覆蓋率是對測試完全程度的評測。測試覆蓋率是由測試需求和測試用例的覆蓋或已執行代碼的覆蓋的表示結果。一方面可以衡量測試工作本身的有效性,提升測試效率,一方面可以提升代碼質量,減少bug,提升產品的可靠性,穩定性。

代碼覆蓋率的意義

· 分析未覆蓋部分的代碼,從而反推3在前期測試設計是否充分,沒有覆蓋到的代碼是否是測試設計的盲點,為什麼沒有考慮到?需求/設計不夠清晰,測試設計的理解有誤,工程方法應用後的造成的策略性放棄等等,之後進行補充測試用例設計。

· 檢測出程序中的廢代碼,可以逆向反推在代碼設計中思維混亂點,提醒設計/開發人員理清代碼邏輯關系,提升代碼質量。

· 代碼覆蓋率高不能說明代碼質量高,但是反過來看,代碼覆蓋率低,代碼質量不會高到哪裡去,可以作為測試自我審視的重要工具之一。

JaCoCo是一個免費的Java代碼覆蓋率庫工具,由EclEmma團隊根據多年來使用和集成現有庫的經驗創建的,其官網地址為http://www.eclemma.org/jacoco/。不論開發和測試都會有針對自己寫的單元測試用例,統計覆蓋瞭多少業務代碼這樣的訴求,另外一個訴求就是統計結果能夠自動生成HTML報告,下面我就通過maven、junit、jacoco來實現以上這兩點訴求。

首先需要在maven的pom配置文件中增加如下3個插件:

maven-surefire-plugin、jacoco-maven-plugin、maven-compiler-plugin。

這3個插件分別對應的功能是:

maven-surefire-plugin這個插件是執行junit、testng框架單元測試用例時使用的;

jacoco-maven-plugin這個插件是統計單元測試用例覆蓋業務代碼率時使用的;

maven-compiler-plugin這個插件是按照其配置的jdk版本來編譯java源碼時使用的。

以下3張截圖是具體的配置內容,大傢也可以根據最近的版本更新替換版本號。

接下來需要對業務代碼編寫單元測試用例,分別對應如下兩張截圖,

需要註意的是,測試用例的包名要和業務代碼的包名要保持一致,否則JaCoCo無法統計覆蓋率。

免費領取 碼同學軟件測試 課程筆記+超多學習資料+完整視頻+最新面試題,可以轉發文章 + 私信「碼同學666」獲取資料哦

然後執行如下3條maven命令進行清除、插件安裝、測試

88d59e23b4b77f465ed4ffed973d37d7

然後在targetsitejacoco目錄下可見本輪次單元測試結果報告的HTML格式結果。

打開JaCoCo的html格式報告如下所示,統計整體的覆蓋率信息,單擊包名鏈接,可以看到統計的詳情信息。

450e6f9a0bf26f1e9855db1165b9ffe8

值得註意的是App這個業務代碼類中隻有1個main方法,但是統計的方法數是2個,

f8f0470fc9209b197a9726e19188b6e5

這個統計是不是不準確?統計是準確的,App這個類中還有一個默認構造函數,雖然沒有展示出來,如何證明那另外1個方法是構造函數呢?我們可以在App的測試類AppTest中增加構造函數的測試用例,具體如下截圖所示。

再次執行單元測試,生成的JaCoCo單測覆蓋率報告如下所示,Missed錯失數由之前的2個變成0個。證明JaCoCo統計的方法中涵蓋自動生成的默認構造函數。Cov.這列是統計指定業務的單元測試用例整體覆蓋率的;而Missed Branches Cov.這列是針對有分支情況下統計的單元測試用例覆蓋業務代碼分支的覆蓋率,如果某個業務類的Missed Branches Cov.分支覆蓋率為n/a則說明這個業務類中沒有分支情況,才會出現n/a這樣結果,如下截圖中App、CoCo這兩個業務類中就沒有分支代碼,因此Missed Branches Cov.覆蓋率統計結果為n/a,可以理解為這兩個業務類不需要統計分支覆蓋率;其他各個列,在實際工作過程中不是重點關註的覆蓋率統計項。

免費領取碼同學軟件測試課程筆記+超多學習資料+學習完整視頻,可以關註我們公眾號哦:自動化軟件測試

本文著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並註明出處。

发表回复

相关推荐

全球及中國內窺鏡儲存櫃行業發展現狀調研及投資前景分析報告(2015-2026)

2019年全球內窺鏡儲存櫃市場規模達到瞭xx億元,預計2026年將達到xx億元,年復合增長率(CAGR)為xx%。本報告研究全球與中國內窺...

· 1秒前

巴旦木和杏仁的区别是什么?巴旦木的功效有哪些?巴旦木推荐

巴旦木又名巴旦杏俗称薄壳杏仁,是新疆维吾尔人民最珍视的干果。许多人会把杏仁和巴旦木搞混,这里给大家一个的办法区分。杏 ...

· 3秒前

黃鱔的養殖技術!其實很簡單!

農村長大的人想必都對黃鱔不會陌生,這種長得像蛇一樣的水生物,其實肉質十分鮮美,而且營養豐富,還具有一定的藥用價值,是...

· 6秒前

古卷食遺——魚片的藝術

唐朝有個姓南的舉人,一手斫魚片的功夫聞名遐邇。他每每將魚架起,引刀削斫,賓客眼花繚亂之際,一尾大魚頃刻見骨。碟子委積...

· 10秒前

【科普】外存被叫内存,内存被用来称呼外存:手机行业为计算机系统带来的乱象

智能手机、电脑、智能电视、笔记本、PS5游戏机等等都是计算机系统,而计算机系统需要存储空间,目前其中的内存和外存的定义 ...

· 10秒前

Copyright 2015-2025 www.icpchaxun.com ©All Rights Reserved.