• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • JaCoCo官方教程

    標簽: Jacoco

    1 概念

    1.1 任務 - Mission

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

    有幾種適用于Java的開源覆蓋技術。在實現Eclipse插件EclEmma時,觀察到它們都不是真正為集成而設計的。它們中的大多數特別適合特定工具(Ant任務,命令行,IDE插件),并且不提供允許在不同上下文中嵌入的文檔化API。 EMMA和Cobertura是最好的和廣泛使用的兩個開源工具。這兩個工具都不再由原始作者積極維護,并且不支持當前的Java版本。由于缺乏回歸測試,因此很難進行維護和添加功能。

    因此,我們啟動了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 提供的集成

    Technology Documentation Remarks
    Java API JaCoCo JavaDoc
    Java Agent JaCoCo Manual
    Command Line Tools JaCoCo Manual Since version 0.8.0
    Apache Ant JaCoCo Manual
    Apache Maven JaCoCo Manual Since version 0.5.3
    Eclipse EclEmma Project Since version 2.0

    第三方集成

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

    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
    

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

    v(G)= B - D + 1
    

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

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

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

    • 無覆蓋:該行中沒有指令被執行(紅色背景)
    • 部分覆蓋:僅執行了該行中的一部分指令(黃色背景)
    • 全面覆蓋:該行中的所有指令均已執行(綠色背景)

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

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

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

    版權聲明:本文為qq_33589510原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_33589510/article/details/105223687

    智能推薦

    [譯] SwiftUI 官方教程 (一)

    SwiftUI 簡介 SwiftUI 是一種為任何 Apple 平臺聲明用戶界面的現代化方式。以前所未有的速度,創建漂亮、動態的應用程序。 只需要描述一次的布局 為你的視圖聲明任何狀態的內容和布局,一旦狀態發生改變, SwiftUI 會自動更新視圖的渲染。   構建可復用的組件 將小型、獨立視圖組合到更大,更復雜的界面中。在任何為 Apple 平臺所設計的應用之間,共享您的自定義視圖。 ...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    猜你喜歡

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

    styled-components —— React 中的 CSS 最佳實踐

    https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...

    基于TCP/IP的網絡聊天室用Java來實現

    基于TCP/IP的網絡聊天室實現 開發工具:eclipse 開發環境:jdk1.8 發送端 接收端 工具類 運行截圖...

    精品国产乱码久久久久久蜜桃不卡