JaCoCo官方教程

      網友投稿 960 2025-03-31

      JaCoCo官方教程

      翻譯自官方文檔

      1 概念

      1.1 任務 - Mission

      JaCoCo應該為基于Java VM的環境中的代碼覆蓋率分析提供標準技術。重點是提供一個輕量級,靈活且文檔齊全的庫,以與各種構建和開發工具集成。

      因此,我們啟動了JaCoCo項目,以為基于Java VM的環境中的代碼覆蓋率分析提供一種新的標準技術。重點是提供一個輕量級,靈活且文檔齊全的庫,以與各種構建和開發工具集成。提供了Ant任務,Maven插件和EclEmma Eclipse插件作為參考使用方案。同樣,許多其他工具供應商和開源項目也將JaCoCo集成到了他們的工具中。

      產品定義

      指令(C0),分支(C1),行,方法,類型和圈復雜度的覆蓋率分析

      基于Java字節碼,因此無需源文件也可以工作

      通過基于 Java-agent 的即時檢測進行簡單集成。其他集成方案(例如自定義類加載器)也可以通過API來實現

      與框架無關的:與基于Java VM的應用程序(如純Java程序,OSGi框架,Web容器或EJB服務器)平滑集成

      與所有已發布的Java類文件版本兼容

      支持不同的JVM語言

      幾種報告格式(HTML,XML,CSV)

      遠程協議和JMX控制可在任何時間點從coverage agent請求執行數據dump

      Ant任務,用于收集和管理執行數據并創建結構化的覆蓋率報告

      Maven插件可收集覆蓋率信息并在Maven構建中創建報告

      簡單的用法以及與現有構建腳本和工具的集成

      良好的性能和最小的運行時開銷,尤其是對于大型項目

      輕量級實現,對外部庫和系統資源的依賴性最小

      全面的文檔

      完整記錄的API(JavaDoc)以及與其他工具集成的示例

      基于JUnit測試用例的功能全面的回歸測試

      1.2 整合矩陣 - Integration Matrix

      目前,JaCoCo已與以下產品和技術集成在一起。

      JaCoCo 提供的集成

      第三方集成

      與往常一樣,上面列出的所有商標均為其各自所有者的財產。

      1.3 覆蓋率計數器 - Coverage Counters

      JaCoCo使用一組不同的計數器來計算覆蓋率指標。所有這些計數器都從Java類文件中包含的信息派生而來,這些信息基本上是Java字節碼指令以及調試信息(可選地嵌入在類文件中)。即使沒有可用的源代碼,這種方法也可以對應用程序進行高效的即時檢測和分析(instrumentation and analysis)。在大多數情況下,可以將收集到的信息映射回源代碼,并可視化到行級粒度。無論如何,這種方法存在局限性。必須使用調試信息編譯類文件,以計算行級覆蓋率并提供源高亮顯示。并非所有Java語言構造都可以直接編譯為相應的字節碼。在這種情況下,Java編譯器會創建所謂的合成代碼,有時會導致意外的代碼覆蓋率結果。

      指令 - Instructions(C0覆蓋率)

      JaCoCo計數的最小單位是單個Java字節代碼指令。指令覆蓋率提供有關已執行或遺漏(executed or missed)的代碼量的信息。該度量完全獨立于源格式,并且即使在類文件中沒有調試信息的情況下也始終可用。

      分支 - Branches(C1覆蓋率)

      JaCoCo還為所有if和switch語句計算分支覆蓋率。此度量標準統計方法中此類分支的總數,并確定已執行或遺漏的分支的數量。分支覆蓋始終可用,即使類文件中沒有調試信息也是如此。請注意,在此計數器定義的上下文中,異常處理不視為分支。

      如果尚未使用調試信息編譯類文件,則可以將決策點映射到源代碼行并高亮:

      無覆蓋范圍:該行沒有分支執行(紅色菱形)

      部分覆蓋:僅執行了該行中的一部分分支(黃色菱形)

      全面覆蓋:該行中的所有分支均已執行(綠色菱形)

      圈復雜度 - Cyclomatic Complexity

      JaCoCo 還為每種非抽象方法計算圈復雜度,并匯總了類,包和組的復雜度。根據 McCabe1996 的定義,圈復雜度是可以(線性)組合生成一種方法的所有可能路徑的最小路徑數。因此,復雜度值可以作為完全覆蓋某個軟件的單元測試用例數量的指示。即使類文件中沒有調試信息,也總是可以計算復雜度數字。

      圈復雜度v(G)的形式定義基于方法的控制流圖作為有向圖的表示:

      v(G)= E- N 2

      1

      其中,E是邊數,N是節點數。 JaCoCo根據分支數(B)和決策點數(D)使用以下等效方程式計算方法的圈復雜度:

      v(G)= B - D + 1

      1

      根據每個分支的覆蓋狀態,JaCoCo還可以計算每種方法的覆蓋和遺漏復雜度。缺少的復雜性再次表明完全覆蓋模塊的測試用例的數量。請注意,由于JaCoCo不考慮異常處理,因為分支try / catch塊也不會增加復雜性。

      對于已使用調試信息編譯的所有類文件,可以計算各個行的覆蓋率信息。當已執行至少一個分配給該源代碼行的指令時,該源代碼行被視為已執行。

      由于單行通常會編譯為多字節代碼指令,因此,源代碼高亮顯示每行包含源代碼的三種不同狀態:

      無覆蓋:該行中沒有指令被執行(紅色背景)

      部分覆蓋:僅執行了該行中的一部分指令(黃色背景)

      全面覆蓋:該行中的所有指令均已執行(綠色背景)

      根據源格式,源代碼的一行可能會引用多個方法或多個類。因此,不能簡單地添加方法的行數以獲得包含類的總數。單個源文件中的多個類的行也是如此。 JaCoCo根據覆蓋的實際源代碼行計算類和源文件的代碼行覆蓋率。

      方法

      每個非抽象方法都包含至少一條指令。當至少一個指令已被執行時,一種方法被視為已執行。由于JaCoCo在字節碼級別上工作,因此構造函數和靜態初始化程序也被視為方法。這些方法中的某些方法在Java源代碼中可能沒有直接的對應關系,例如隱式生成的常量的默認構造函數或初始化器。

      當至少一個類的方法已執行時,該類被視為已執行。 請注意,JaCoCo將構造函數以及靜態初始化程序視為方法。 由于Java接口類型可能包含靜態初始化器,因此此類接口也被視為可執行類。

      Java

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:改善云利潤的建議
      下一篇:wps怎么另一個表的數據快速填到這個表上來(wps怎么從另外一個表格獲取數據)
      相關文章
      亚洲欧洲中文日产| 亚洲国产国产综合一区首页| 亚洲三级电影网站| 国产亚洲一区区二区在线| 97se亚洲综合在线| 久久精品亚洲精品国产色婷| 亚洲妇熟XXXX妇色黄| 国产日产亚洲系列| 国产aⅴ无码专区亚洲av麻豆 | 亚洲美女视频网站| 久久亚洲精品国产精品| 亚洲国产日韩一区高清在线| 亚洲嫩草影院久久精品| 久久精品a亚洲国产v高清不卡| 97久久精品亚洲中文字幕无码 | 亚洲?v无码国产在丝袜线观看| 亚洲VA综合VA国产产VA中| 亚洲成?Ⅴ人在线观看无码| 亚洲精品成人在线| 亚洲AV无码专区在线电影成人| 亚洲日本国产乱码va在线观看| 亚洲国产日产无码精品| 91丁香亚洲综合社区| 亚洲欧美日韩中文字幕一区二区三区 | 亚洲AV无码之国产精品| 婷婷国产偷v国产偷v亚洲| 亚洲av午夜精品一区二区三区 | 亚洲午夜无码久久久久小说| 亚洲黄色在线观看| 亚洲精品一区二区三区四区乱码| 亚洲精品国产福利片| 亚洲AV无码久久久久网站蜜桃| 亚洲最大无码中文字幕| 性色av极品无码专区亚洲| 亚洲成人国产精品| 亚洲精品白浆高清久久久久久| 亚洲电影一区二区三区| 亚洲婷婷天堂在线综合| 亚洲爆乳成av人在线视菜奈实| 国产区图片区小说区亚洲区| 久久亚洲精品无码播放|