JaCoCoコードカバレッジライブラリの包括的な技術分析

タグ: 開発環境

作成日: 2025年06月18日

音声概要

閲覧データ(過去90日間)

ページビュー数: 29回
ユニークユーザー数: 12人
平均セッション時間: 165.25秒

プロンプト

JaCoCoの技術的な調査を行いたい。どの様にカバレッジを計測しているのか、精度や懸念など多角的に調べて欲しい。

JaCoCoコードカバレッジライブラリの包括的な技術分析

エグゼクティブサマリー

本レポートは、Javaエコシステムにおけるコードカバレッジ計測のデファクトスタンダードであるJaCoCo(Java Code Coverage Library)について、その技術的側面を多角的に掘り下げた包括的な分析を提供する。JaCoCoの核となる技術は、Javaエージェントを利用した「オンザフライ」でのバイトコードインスツルメンテーションであり、これによりソースコードへのアクセスなしにコード実行を追跡する柔軟性と、ビルドプロセスへの容易な統合を実現している。

本分析では、まずJaCoCoがどのようにしてバイトコードを解析し、制御フローグラフを構築し、最小限のプローブを挿入することで実行情報を収集するのか、その精緻な内部メカニズムを解明する。命令(C0)、分岐(C1)、サイクロマティック複雑度といったバイトコードレベルの指標から、行、メソッド、クラスといったソースコードレベルの指標まで、JaCoCoが提供する各カバレッジメトリクスの正確な定義と計算方法を詳述し、特に論理的な網羅性を示す分岐カバレッジの重要性を強調する。

しかし、JaCoCoの強力な低レベルアプローチは、現代のソフトウェア開発がもたらす複雑性と常に緊張関係にある。本レポートでは、その精度と信頼性に関する重要な懸念事項を詳細に検討する。特に、Javaのtry-with-resources構文やKotlinのコルーチン、ラムダ式など、コンパイラが生成する複雑なバイトコードが、どのようにしてカバレッジレポートの「不正確さ」を引き起こすのかをケーススタディを通じて明らかにする。また、PowerMockのような他のバイトコード操作ツールとの深刻な互換性問題や、リフレクション使用時の注意点についても論じる。

さらに、パフォーマンスの観点から、一般的なユースケースでは軽微とされるオーバーヘッドが、高並行性を持つアプリケーションにおいてはCPUのキャッシュコンテンションを引き起こし、実行時間が10倍以上にも悪化しうるという重大なボトルネックを特定する。

最後に、これらの技術的背景を踏まえ、CI/CDパイプラインへの戦略的な統合方法を提案する。単なるカバレッジ率の追求がもたらす「100%カバレッジの幻想」を避け、Pull Requestにおける変更差分のみを対象とする「Diff Coverage」を品質ゲートとして運用することが、現代の開発ワークフローにおいて最も効果的であることを示す。本レポートは、開発者、アーキテクト、品質保証担当者がJaCoCoを最大限に活用し、その潜在的な落とし穴を回避するための技術的指針となることを目指すものである。


1. JaCoCoのコアメカニズム:オンザフライ・バイトコードインスツルメンテーション

JaCoCoの能力と限界を理解するための第一歩は、その根幹をなす技術、すなわちバイトコードインスツルメンテーションの仕組みを解明することである。JaCoCoはソースコードを直接解析するのではなく、コンパイル後のJavaバイトコードを対象とすることで、言語からの独立性と高い柔軟性を獲得している。

1.1. Javaエージェント:オンザフライ vs オフラインインスツルメンテーション

JaCoCoは主に二つのインスツルメンテーション方式を提供するが、その中心的なアプローチは「オンザフライ」方式である 1。

エージェントはテスト実行中にカバレッジ情報を収集し、JVMの終了時、またはTCPサーバーを介した外部からの要求に応じて、その結果をバイナリファイル(通常はjacoco.exec)に出力する 4。

1.2. バイトコード解析:制御フローグラフとプローブ挿入戦略

JaCoCoの解析は、ソースコードではなく、コンパイル済みのJavaバイトコードに対して行われる 9。このアプローチにより、KotlinやScalaなど、JVMバイトコードにコンパイルされるあらゆる言語で利用可能となっている 11。

この最適化により、JaCoCoは一般的に低いパフォーマンスオーバーヘッドを実現している。条件分岐の場合、JaCoCoは条件ジャンプ命令のロジックを反転させ、その直後にプローブを挿入し、その後GOTO命令で元のジャンプ先に飛ぶという手法で分岐を計測する 9。

1.3. プローブの実装:boolean配列による実行記録

プローブは、コードの特定の部分が実行されたことを記録するための、メソッドに挿入される短いバイトコードシーケンスである 9。

JaCoCoのプローブ実装は、効率性とスレッドセーフティを両立させている。各クラスには、インスツルメンテーションによってプライベートかつ静的なboolean型の配列が追加される 9。クラス内の各プローブは、この配列の特定のインデックスに対応付けられる。

プローブが実行されると、以下の4つの単純なバイトコード命令によって、対応する配列要素がtrueに設定される。
ALOAD probearray, xPUSH probeid, ICONST_1, BASTORE
この操作はアトミックではないが、一度trueになった値は変わらないため、複数スレッドから同時に書き込みが発生しても競合状態にはならず、実質的にスレッドセーフである 9。
このプローブ配列への参照を取得するため、すべての非インターフェースクラスには$jacocoinit()という合成静的メソッドが追加され、各メソッドの冒頭で呼び出される 9。

1.4. データ収集とレポート生成

テストが実行されると、通過したプローブに対応するboolean配列のフラグがtrueに設定される。テスト実行後、mvn jacoco:dumpコマンドやJVM終了時のフックによって、JaCoCoエージェントはこれらのプローブ配列の状態をjacoco.execというバイナリファイルに書き出す 2。

人間が読める形式のレポート(HTML, XML, CSV)は、mvn jacoco:reportのような別のゴールで生成される 12。このレポート生成プロセスには、以下の3つの情報が不可欠である。

  1. 実行データ(jacoco.exec)
  2. テスト実行時に使用されたものと全く同じバージョンの、インスツルメントされていない.classファイル
  3. ソースコードの行ごとのハイライト表示を行うための、オリジナルの.javaソースファイル(オプション) 2

ここで重要なのは、ランタイムで使用されたクラスファイルとレポート生成時に提供されるクラスファイルが一致している必要があるという点である。もしクラスのバージョンが異なると、JaCoCoは実行データとクラスファイルを正しくマッピングできず、カバレッジが0%として報告されることになる 15。

このアーキテクチャは、JaCoCoの強力さとその限界の両方を規定している。バイトコードを直接操作することで、言語非依存性とビルドツールへの容易な統合を実現している。しかし、それは同時に、JaCoCoがソースコードのセマンティクスを理解せず、あくまでコンパイラが生成した最終的なバイトコードの構造しか見ていないことを意味する。この「コンパイラに対するブラックボックス」という性質が、JavaやKotlinの現代的な言語機能によって生成される複雑なバイトコードと組み合わさったときに、セクション3で詳述するような「精度の問題」の根本原因となる。開発者のソースコードに対するメンタルモデルと、JaCoCoが観測するバイトコードの実行状態との間に生じるこの乖離こそが、JaCoCoを効果的に利用する上で最も理解すべき核心的な概念である。


2. JaCoCoのカバレッジメトリクスの詳細な解説

JaCoCoは、テストスイートがコードベースのどの部分を実行したかを定量化するために、複数のメトリクスを提供する。これらのメトリクスを正確に理解することは、カバレッジレポートから意味のある洞察を引き出し、品質向上のための具体的なアクションを導き出す上で不可欠である。

2.1. 基本カウンターの定義:命令(C0)、分岐(C1)、サイクロマティック複雑度

JaCoCoのすべてのメトリクスは、バイトコードレベルで収集される基本的なカウンターから派生する。

2.2. ソースコードへのマッピング:行、メソッド、クラスカバレッジ

バイトコードレベルのカウンターは、デバッグ情報が存在する場合、ソースコード上のエンティティに対応付けられる。

2.3. ビジュアルレポートの解釈:色と記号のガイド

JaCoCoが生成するHTMLレポートは、カバレッジの状態を直感的に理解できるよう、色と記号を効果的に使用している 7。

これらの視覚的要素は、テストが不足している箇所を特定するための強力な手がかりとなる。

メトリクス名 定義 計算基盤 実用的な意義・解釈 主要な限界
命令 (C0) 実行されたバイトコード命令の割合。 バイトコード命令 最も正確で基本的な実行の証跡。ソースの書式やコンパイラの挙動に影響されない。 開発者が直接意識する単位ではなく、直感的ではない。
分岐 (C1) 実行された条件分岐(if/switch)の経路の割合。 制御フローグラフのエッジ コードの論理的な網羅性を示す最も重要な指標の一つ。未実行の分岐はテストケースの欠落を直接示す。 JaCoCoの定義では例外処理は分岐に含まれない 16。コンパイラ生成の分岐がノイズになることがある。
サイクロマティック複雑度 コードの構造的な複雑さを示す指標。 分岐数と決定点数 完全にカバーするために必要な最小テストケース数を示唆する。「未カバーの複雑度」は追加すべきテストの目安となる。 カバレッジそのものではなく、あくまでコードの複雑性を示す指標。
実行されたソースコード行の割合。 行番号テーブルと命令 直感的で理解しやすい。多くのチームで目標値として採用される。デバッグ情報が必要 14。 1行に複数の分岐が含まれる場合、行がカバーされても論理的な網羅性は保証されない 22。
メソッド 実行されたメソッドの割合。 命令 どのメソッドがテストによって呼び出されたかを示す。 メソッドが呼び出されただけで、その内部ロジックが完全にテストされたかを保証するものではない。
クラス 実行されたクラスの割合。 メソッド どのクラスがテスト対象となっているかの大まかな指標。 クラスがカバーされていても、そのクラスの重要な機能がテストされているとは限らない。

これらのメトリクスの中で、一般的に目標とされるのは「行カバレッジ」であるが、ソフトウェアの品質を保証するという観点からは「分岐カバレッジ」がより深い洞察を提供する。行カバレッジが100%であっても、if (a && b)のような条件式でaが常にfalseのテストケースしかない場合、bの評価部分は実行されず、潜在的なバグを見逃す可能性がある。分岐カバレッジは、このような論理的な欠陥を明確に可視化する。したがって、開発チームは単に行カバレッジの数値を追うのではなく、レポート内の黄色や赤色のひし形記号を解消し、分岐カバレッジを向上させることに注力すべきである。


3. 精度と正確性:JaCoCoの既知の限界と非互換性の克服

JaCoCoは強力なツールであるが、そのバイトコード中心のアプローチは、特定の状況下で「不正確」または紛らわしいカバレッジレポートを生成する可能性がある。これらの限界を理解し、適切に対処することは、JaCoCoを効果的に活用する上で不可欠である。

3.1. コンパイラ生成アーティファクトという課題

JaCoCoの精度の問題の多くは、JavaやKotlinのコンパイラが言語機能を実装するために生成する、開発者が直接記述していない「合成コード」に起因する 16。JaCoCoはこれらの合成コードも忠実にインスツルメントするため、開発者の直感と異なるカバレッジ結果が生じる。

3.1.1. ケーススタディ:try-with-resourcesと到達不能な分岐

Java 7で導入されたtry-with-resources構文は、リソースの自動クローズを保証する便利な機能だが、その裏側ではコンパイラが複雑なtry-finallyブロックを生成している 24。

3.1.2. ケーススタディ:Kotlinのコルーチン、ラムダ、そしてステートマシン

Kotlinの強力な言語機能、特にラムダとコルーチンは、コンパイラによる大幅なバイトコード変換によって実現されている。

3.1.3. kotlinx-koverの台頭とJaCoCoバックエンドへの移行

Kotlin特有のカバレッジ問題をより効果的に解決するため、JetBrainsはkotlinx-koverという専用ツールを開発した 36。

当初、Koverは独自のIntelliJベースのカバレッジエージェントを使用していた。しかし、戦略的な方針転換により、Koverはその独自エージェントを非推奨とし、JaCoCoをデフォルトのバックエンドとして採用することを決定した 38。この移行の動機は、IntelliJエージェントの機能がJaCoCoの機能と収束し、互換性のない実行ファイル形式を持つ2つの異なるインフラを維持することが非効率になったためである 38。業界標準であるJaCoCoに統合することで、ユーザーは既存のツールエコシステム(SonarQubeなど)との連携を維持しつつ、Kotlinに特化した追加機能の恩恵を受けることができる。

この動きは、KotlinエコシステムがJaCoCoのサポートに大きく依存することを意味し、JetBrainsとJaCoCoコミュニティ間の協力関係を強化する。結果として、Kotlinに関するカバレッジの問題は、将来的により体系的に対処されることが期待され、JaCoCoをKotlinプロジェクトで利用する際の長期的な信頼性を高めている 38。

3.2. 他のバイトコード操作ツールとの競合

JaCoCoのインスツルメンテーションは、同じくバイトコードを操作する他のツールと深刻な競合を引き起こす可能性がある。

3.2.1. PowerMock/Mockitoとのインスツルメンテーション競合

PowerMockやmockito-inlineのようなモックライブラリは、staticメソッドやfinalクラスのモック化を実現するために、JaCoCoと同様にバイトコードを書き換える 39。

3.2.2. リフレクションと合成メンバーの影響

JaCoCoはインスツルメンテーションの過程で、すべてのクラスにprivate staticなフィールド($jacocoData)とメソッド($jacocoInit)を追加する 14。これらのメンバーは

syntheticフラグが付与される。

3.3. フィルタリングと除外のベストプラクティス

意味のあるカバレッジレポートを得るためには、テストの価値が低いコードや自動生成されたコードを適切に除外することが重要である。

シナリオ 問題の概要 推奨される解決策 設定例(lombok.configまたはpom.xml/build.gradle)
Lombok生成コード get/set, equals, hashCode等の自動生成コードがカバレッジ率を不当に下げる。 lombok.configファイルを使用し、Lombokに@Generatedアノテーションを付与させ、JaCoCoにそれを無視させる。 lombok.config: lombok.addLombokGeneratedAnnotation = true
DTO/モデルクラス ビジネスロジックを含まない単純なデータ保持クラス。 ビルド設定で特定のパッケージやクラスパターンをカバレッジ計測から除外する。 pom.xml: <excludes><exclude>**/model/**</exclude></excludes>
try-with-resources(旧バージョン) コンパイラが到達不能な分岐を生成し、100%カバレッジが不可能だった。 JaCoCoのバージョンを上げる。0.8.2以降では、コンパイラ生成パターンを検出する内部フィルターが搭載されている。 N/A (JaCoCoのバージョンアップで対応)
Kotlinコルーチン コンパイラが生成するステートマシン(invokeSuspendメソッド内の分岐)が未カバレッジとして報告される。 JaCoCoのバージョンを上げることで一部フィルタリングされる。完全な解決は進行中。問題のある箇所を特定し、除外設定を追加する。 build.gradle: classDirectories.setFrom(files(classDirectories.files.collect { fileTree(dir: it, exclude: ‘**/coroutines/**’) }))
リフレクション利用コード JaCoCoが挿入する合成メンバー($jacocoData)をリフレクションコードが誤って処理し、エラーを引き起こす。 リフレクションを使用するコード側で、Field.isSynthetic()やMethod.isSynthetic()をチェックし、合成メンバーをスキップする。 N/A (アプリケーションコード側での対応)

4. パフォーマンス分析と最適化

JaCoCoは一般的に低オーバーヘッドであるとされているが、特定の条件下では深刻なパフォーマンス低下を引き起こす可能性がある。このセクションでは、その原因を技術的に分析し、最適化のための具体的な戦略を提示する。

4.1. JaCoCoのパフォーマンスオーバーヘッドの理解

4.2. 高並行環境におけるキャッシュコンテンション・ボトルネック

この劇的なパフォーマンス低下の根本原因は、単純な命令追加によるオーバーヘッドではなく、より深く、ハードウェアレベルに起因するCPUキャッシュコンテンションである可能性が指摘されている 52。

この分析は、JaCoCoの公称パフォーマンスが、特定の(しかし現代的なサーバーサイドアプリケーションでは一般的な)ワークロードにおいて、いかに誤解を招く可能性があるかを示している。パフォーマンスが重要な並列処理をテストする場合、JaCoCoによる計測行為自体がパフォーマンスのボトルネックとなり、測定結果を歪める可能性があることをアーキテクトは認識する必要がある。

4.3. パフォーマンスチューニング:エージェント設定とベストプラクティス

キャッシュコンテンションのような根本的な問題はユーザー側で解決困難だが、エージェントの設定を最適化することで、オーバーヘッドを大幅に削減することは可能である。


5. 戦略的インテグレーションとベストプラクティス

これまでの技術的な分析を踏まえ、本セクションではJaCoCoを現代のソフトウェア開発プロセスに効果的に組み込むための実践的な戦略とベストプラクティスを提示する。

5.1. 数値の先へ:行動可能な洞察を得るための効果的なレポート解釈

カバレッジレポートは、単なる数値目標の達成度を確認するためだけのものではない。品質向上のための具体的なアクションを導き出すためのツールとして活用すべきである。

5.2. 「100%カバレッジ」の幻想:意味のある品質目標の設定

ソフトウェアテストの専門家やコミュニティの間では、100%のカバレッジを目指すことは非現実的であり、しばしば逆効果であるというコンセンサスが形成されている 22。

5.3. 成功のための構成:マルチモジュールプロジェクトにおける単体・結合テストカバレッジ

現代的なアプリケーションは複数のモジュールで構成されることが多く、テストもその性質に応じて分離することが推奨される。

5.4. CI/CDインテグレーション:効果的な品質ゲートの実装

JaCoCoの最も強力な利用法の一つは、CI/CDパイプラインに品質ゲートを組み込み、コード品質基準を自動的に強制することである 58。

5.4.1. 全体カバレッジ vs 変更ファイルカバレッジ(Diff Coverage)

従来の品質ゲートは、プロジェクト全体のカバレッジ率にしきい値を設けるものだった。しかし、大規模なレガシープロジェクトではこのアプローチは機能しにくい。より効果的で現代的な戦略は、Pull Requestで新規に追加または変更されたコード(差分)に対してのみ高いカバレッジ率(例:80%)を要求する「Diff Coverage」である。この「Clean as You Code」アプローチは、既存のコードベース全体に手を入れることなく、新たな技術的負債の発生を防ぎ、コード品質を漸進的に向上させることができる 58。JenkinsやGitHub Actionsのプラグインは、この差分カバレッジをベースラインとした品質ゲートを強力にサポートしている 75。

5.4.2. JenkinsとGitHub Actionsにおける実装パターン

CI/CDプラットフォーム 設定スニペット例 主要パラメータ 説明  
Jenkins (Pipeline) recordCoverage(tools: [[parser: ‘JACOCO’]], qualityGates:]) metric: LINE, BRANCH等 baseline: MODIFIED_FILES, MODIFIED_LINES threshold: 80.0 Jenkins Coverage Plugin 75 を使用。 baselineパラメータでMODIFIED_FILES(変更ファイル)やMODIFIED_LINES(変更行)を指定することで、差分カバレッジを品質ゲートの基準にできる。
GitHub Actions uses: madrapps/jacoco-report@v1.7.2 with: paths: ‘**/build/reports/jacoco/**/*.xml’ token: $ min-coverage-changed-files: 80 paths: レポートXMLへのパス token: GitHubトークン min-coverage-changed-files: 変更ファイルの最小カバレッジ率 madrapps/jacoco-report 76 のようなActionを使用。 min-coverage-changed-files入力で差分カバレッジのしきい値を設定し、PRにコメントを投稿したり、しきい値未達の場合にワークフローを失敗させたりできる。

品質ゲートの考え方は、「プロジェクト全体のカバレッジはいくつか?」という問いから、「このPull Requestはコードの品質を悪化させていないか?」という、より実践的で開発者にとって行動可能な問いへと進化している。この変化は、大規模なコードベースを維持しながら漸進的な改善を促すための、ソフトウェア品質管理におけるプラグマティックな進化である。現代の開発チームがJaCoCoを導入する際には、最初からこの差分カバレッジ戦略を採用することが、最も効果的で持続可能なアプローチと言える。


結論と戦略的提言

JaCoCoは、Javaエコシステムにおいて成熟し、広く採用されている堅牢なコードカバレッジツールである。その中核をなすオンザフライ・バイトコードインスツルメンテーションは、ビルドプロセスを簡素化し、多様なJVM言語に対応する柔軟性をもたらす。しかし、その技術的基盤は、現代のソフトウェア開発におけるいくつかの重要な課題も浮き彫りにする。

JaCoCoの強みと弱みの要約

行動喚起と提言

これらの分析に基づき、異なる役割を持つチームメンバーに対して以下の戦略的提言を行う。

JaCoCoは、その技術的特性と限界を深く理解し、現代的なベストプラクティスに沿って戦略的に活用することで、依然としてJavaエコシステムにおけるソフトウェア品質を維持・向上させるための非常に価値のあるツールであり続ける。

引用文献

  1. how to prevent jacoco instrumenting production code? - Stack Overflow, 6月 18, 2025にアクセス、 https://stackoverflow.com/questions/49296416/how-to-prevent-jacoco-instrumenting-production-code
  2. How to Measure Code Coverage in a Running Java Application Using JaCoCo, 6月 18, 2025にアクセス、 https://dev.to/arturmkr/how-to-measure-code-coverage-in-a-running-java-application-using-jacoco-5b13
  3. JaCoCo - Implementation Design, 6月 18, 2025にアクセス、 https://www.jacoco.org/jacoco/trunk/doc/implementation.html
  4. Java Agent - JaCoCo - EclEmma, 6月 18, 2025にアクセス、 https://www.eclemma.org/jacoco/trunk/doc/agent.html
  5. Code Coverage Tools (JaCoCo, Cobertura, Emma) Comparison in Sonar, 6月 18, 2025にアクセス、 https://onlysoftware.wordpress.com/2012/12/19/code-coverage-tools-jacoco-cobertura-emma-comparison-in-sonar/
  6. 7. カバレッジツール, 6月 18, 2025にアクセス、 https://docs.nec.co.jp/sites/default/files/webotx_manual_v96/WebOTX/96/html/dev_devstudio_common/7_coverage.html
  7. JaCoCo Test Report Generation - Coding Shuttle, 6月 18, 2025にアクセス、 https://www.codingshuttle.com/spring-boot-handbook/ja-co-co-test-report-generation
  8. JaCoCo+Tomcat+Jenkinsを使って手動テストのカバレッジレポートを出力する TECHSCORE BLOG, 6月 18, 2025にアクセス、 https://www.techscore.com/blog/2015/06/26/jacocotomcatjenkins%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E6%89%8B%E5%8B%95%E3%83%86%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AB%E3%83%90%E3%83%AC%E3%83%83%E3%82%B8%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88/
  9. JaCoCo - Control Flow Analysis, 6月 18, 2025にアクセス、 https://www.jacoco.org/jacoco/trunk/doc/flow.html
  10. Incorrect Jacoco code coverage for Kotlin coroutine - Stack Overflow, 6月 18, 2025にアクセス、 https://stackoverflow.com/questions/53485360/incorrect-jacoco-code-coverage-for-kotlin-coroutine
  11. 8 Of The Best Code Coverage Tools, 6月 18, 2025にアクセス、 https://www.goretro.ai/post/code-coverage-tools
  12. JaCoCo - Maven Plug-in - EclEmma, 6月 18, 2025にアクセス、 https://www.eclemma.org/jacoco/trunk/doc/maven.html
  13. How To Generate Code Coverage Report Using JaCoCo-Maven Plugin LambdaTest, 6月 18, 2025にアクセス、 https://www.lambdatest.com/blog/reporting-code-coverage-using-maven-and-jacoco-plugin/
  14. JaCoCo - FAQ, 6月 18, 2025にアクセス、 https://www.jacoco.org/jacoco/trunk/doc/faq.html
  15. How to get JaCoCo instrumentation code coverage while executing webApplication on server - Stack Overflow, 6月 18, 2025にアクセス、 https://stackoverflow.com/questions/42133100/how-to-get-jacoco-instrumentation-code-coverage-while-executing-webapplication-o
  16. Coverage Counter - JaCoCo - EclEmma, 6月 18, 2025にアクセス、 https://www.eclemma.org/jacoco/trunk/doc/counters.html
  17. Understanding the JaCoCo coverage XML report - Stack Overflow, 6月 18, 2025にアクセス、 https://stackoverflow.com/questions/60803055/understanding-the-jacoco-coverage-xml-report
  18. Code Coverage with JaCoCo - Blue Acorn iCi, 6月 18, 2025にアクセス、 https://www.blueacornici.com/blog/code-coverage-with-jacoco
  19. Intro to JaCoCo Baeldung, 6月 18, 2025にアクセス、 https://www.baeldung.com/jacoco
  20. Mastering Test Coverage with JaCoCo: Insights and Best Practices - Neova Solutions, 6月 18, 2025にアクセス、 https://www.neovasolutions.com/2024/04/09/mastering-test-coverage-with-jacoco-insights-and-best-practices/
  21. How To Generate Code Coverage Report Using JaCoCo-Maven Plugin - DZone, 6月 18, 2025にアクセス、 https://dzone.com/articles/how-to-generate-code-coverage-report-jacoco-maven
  22. unit testing - Pitfalls of code coverage - Stack Overflow, 6月 18, 2025にアクセス、 https://stackoverflow.com/questions/695811/pitfalls-of-code-coverage
  23. Jacoco code coverage: non-existent Static block shows only 75% coverage - Stack Overflow, 6月 18, 2025にアクセス、 https://stackoverflow.com/questions/63560283/jacoco-code-coverage-non-existent-static-block-shows-only-75-coverage
  24. 8 branches for try with resources - jacoco coverage possible? - Stack Overflow, 6月 18, 2025にアクセス、 https://stackoverflow.com/questions/17354150/8-branches-for-try-with-resources-jacoco-coverage-possible
  25. try-with-resources Statement: wrong coverage · Issue #82 · jacoco/jacoco - GitHub, 6月 18, 2025にアクセス、 https://github.com/jacoco/jacoco/issues/82
  26. JaCoCo branch coverage try with resources - Stack Overflow, 6月 18, 2025にアクセス、 https://stackoverflow.com/questions/41334555/jacoco-branch-coverage-try-with-resources
  27. TryWithResourcesJavacFilter.java - JaCoCo, 6月 18, 2025にアクセス、 https://www.jacoco.org/jacoco/trunk/coverage/org.jacoco.core/org.jacoco.core.internal.analysis.filter/TryWithResourcesJavacFilter.java.html
  28. TryWithResourcesEcjFilter.java - JaCoCo, 6月 18, 2025にアクセス、 https://www.jacoco.org/jacoco/trunk/coverage/org.jacoco.core/org.jacoco.core.internal.analysis.filter/TryWithResourcesEcjFilter.java.html
  29. FilteringOptions · jacoco/jacoco Wiki - GitHub, 6月 18, 2025にアクセス、 https://github.com/jacoco/jacoco/wiki/FilteringOptions
  30. JaCoCo - Change History, 6月 18, 2025にアクセス、 https://www.jacoco.org/jacoco/trunk/doc/changes.html
  31. Code coverage of lambda expression shows only one line · Issue #885 - GitHub, 6月 18, 2025にアクセス、 https://github.com/jacoco/jacoco/issues/885
  32. jacoco showing filtered code in the coverage report - Stack Overflow, 6月 18, 2025にアクセス、 https://stackoverflow.com/questions/72747532/jacoco-showing-filtered-code-in-the-coverage-report
  33. Lambda Expression Body was not covered in Jacoco 0.8.4 · Issue #929 - GitHub, 6月 18, 2025にアクセス、 https://github.com/jacoco/jacoco/issues/929
  34. Kotlin 1.9.2, jdk 21 (Spring boot) Jacoco (plugin 0.8.12) is complaining about missing branches - Stack Overflow, 6月 18, 2025にアクセス、 https://stackoverflow.com/questions/78468280/kotlin-1-9-2-jdk-21-spring-boot-jacoco-plugin-0-8-12-is-complaining-about-m
  35. JaCoCo reports coverage on invalid line=”0” when using … - GitHub, 6月 18, 2025にアクセス、 https://github.com/Kotlin/kotlinx.coroutines/issues/3911
  36. Implementing Test Coverage in a Multi-module Android Project with Sonar and JaCoCo/Kover - Testableapple, 6月 18, 2025にアクセス、 https://testableapple.com/implementing-test-coverage-multi-module-android-project-sonar-jacoco-kover/
  37. Kover : Code Coverage plugin for Kotlin - Julien’s DevRel corner, 6月 18, 2025にアクセス、 https://lengrand.fr/kover-code-coverage-plugin-for-kotlin/
  38. Switching to using the JaCoCo JVM Agent · Issue #720 · Kotlin/kotlinx-kover - GitHub, 6月 18, 2025にアクセス、 https://github.com/Kotlin/kotlinx-kover/issues/720
  39. jacoco offline instrumentation incompatibility with powermock byte …, 6月 18, 2025にアクセス、 https://github.com/powermock/powermock/issues/645
  40. Java Programming Skills – Writing Process of Unit Test Case - Alibaba Cloud Community, 6月 18, 2025にアクセス、 https://www.alibabacloud.com/blog/java-programming-skills-writing-process-of-unit-test-case_598057
  41. Use ByteBuddy to instrument classes instead Javassist · Issue #727 - GitHub, 6月 18, 2025にアクセス、 https://github.com/powermock/powermock/issues/727
  42. java - Unable to get Jacoco to work with Powermockito using offline …, 6月 18, 2025にアクセス、 https://stackoverflow.com/questions/23983740/unable-to-get-jacoco-to-work-with-powermockito-using-offline-instrumentation
  43. coverage problem with powermockito - Google Groups, 6月 18, 2025にアクセス、 https://groups.google.com/g/powermock/c/ZHPpkdVcIyg
  44. Reflections with Jacoco · Issue #64 · ronmamo/reflections - GitHub, 6月 18, 2025にアクセス、 https://github.com/ronmamo/reflections/issues/64
  45. maven - Java annotation capturing with reflection will not work when …, 6月 18, 2025にアクセス、 https://stackoverflow.com/questions/41542187/java-annotation-capturing-with-reflection-will-not-work-when-execuete-jacoco-pre
  46. JaCoCo can’t test certain uses of reflection? What are the workarounds? - Google Groups, 6月 18, 2025にアクセス、 https://groups.google.com/g/jacoco/c/jz9APFSELIs
  47. junit code coverage for branch is not 100% for lombok @Data - Stack Overflow, 6月 18, 2025にアクセス、 https://stackoverflow.com/questions/79491106/junit-code-coverage-for-branch-is-not-100-for-lombok-data
  48. Exclude lombok generated code from test coverage (JaCoCo/SonarQube), 6月 18, 2025にアクセス、 https://dev.to/derlin/exclude-lombok-generated-code-from-test-coverage-jacocosonarqube-4nh1
  49. JaCoCo: exclude generated methods (using it with Lombok) - Stack Overflow, 6月 18, 2025にアクセス、 https://stackoverflow.com/questions/29520912/jacoco-exclude-generated-methods-using-it-with-lombok
  50. java - How would I add an annotation to exclude a method from a …, 6月 18, 2025にアクセス、 https://stackoverflow.com/questions/47824761/how-would-i-add-an-annotation-to-exclude-a-method-from-a-jacoco-code-coverage-re
  51. [java code coverage] Reasons for huge performance impact - jacoco@googlegroups.com, 6月 18, 2025にアクセス、 https://jacoco.narkive.com/adoFZzfD/java-code-coverage-reasons-for-huge-performance-impact
  52. Remove Instrumentation · Issue #782 · jacoco/jacoco · GitHub, 6月 18, 2025にアクセス、 https://github.com/jacoco/jacoco/issues/782
  53. Jacoco Agent Measures Code Coverage for Any Test - InfoQ, 6月 18, 2025にアクセス、 https://www.infoq.com/news/2023/09/jacoco-agent-code-coverage/
  54. The Trouble with JaCoCo: Lessons Learned - Teamscale, 6月 18, 2025にアクセス、 https://teamscale.com/blog/en/news/blog/profiling-with-jacoco
  55. Beyond the Basics: Code Coverage and Test Coverage explained - Diffblue, 6月 18, 2025にアクセス、 https://www.diffblue.com/resources/code-coverage-and-test-coverage-explained/
  56. What Is JaCoCo? Understanding the JaCoCo Code Coverage Tool - Diffblue, 6月 18, 2025にアクセス、 https://www.diffblue.com/resources/what-is-jacoco-understanding-the-jacoco-code-coverage-tool/
  57. JaCoCo vs Cobertura: A Comprehensive Comparison - Graph AI, 6月 18, 2025にアクセス、 https://www.graphapp.ai/blog/jacoco-vs-cobertura-a-comprehensive-comparison
  58. Best practices for increasing code coverage - SonarQube Server / Community Build, 6月 18, 2025にアクセス、 https://community.sonarsource.com/t/best-practices-for-increasing-code-coverage/21423
  59. Why reaching 100% Code Coverage must NOT be your testing goal (with examples in C#) : r/programming - Reddit, 6月 18, 2025にアクセス、 https://www.reddit.com/r/programming/comments/1beg654/why_reaching_100_code_coverage_must_not_be_your/
  60. ThinkingLabs:: Thierry de Pauw - The Fallacy of the 100% Code Coverage, 6月 18, 2025にアクセス、 https://thinkinglabs.io/articles/2022/03/19/the-fallacy-of-the-100-code-coverage.html
  61. What is a reasonable code coverage % for unit tests (and why)? [closed] - Stack Overflow, 6月 18, 2025にアクセス、 https://stackoverflow.com/questions/90002/what-is-a-reasonable-code-coverage-for-unit-tests-and-why
  62. What is Code Coverage & How to Calculate It? +6 Tips to Get Started - Testlio, 6月 18, 2025にアクセス、 https://testlio.com/blog/code-coverage/
  63. What is Code Coverage? Atlassian, 6月 18, 2025にアクセス、 https://www.atlassian.com/continuous-delivery/software-testing/code-coverage
  64. Stop Bad Code: 5 Quality Gates Your Jenkins Pipeline Needs - Java Tech Blog, 6月 18, 2025にアクセス、 https://javanexus.com/blog/stop-bad-code-5-quality-gates-jenkins-pipeline
  65. Separating Unit from Integration tests in Java using Gradle, 6月 18, 2025にアクセス、 http://stuartingram.com/2016/09/15/separating-unit-from-integration-tests-in-java-using-gradle/
  66. Unit Testing vs Integration Testing: Key Differences and Best Practices - Harness, 6月 18, 2025にアクセス、 https://www.harness.io/harness-devops-academy/unit-testing-vs-integration-testing
  67. Should I separate unit tests and integration tests? - Software Engineering Stack Exchange, 6月 18, 2025にアクセス、 https://softwareengineering.stackexchange.com/questions/340347/should-i-separate-unit-tests-and-integration-tests
  68. Code coverage reports with Maven in multi-module projects - Business - doubleSlash Blog, 6月 18, 2025にアクセス、 https://blog.doubleslash.de/en/software-technologies/code-coverage-reports-with-maven-in-multi-module-projects
  69. Merging Integration and Unit test reports with JaCoCo - Stack Overflow, 6月 18, 2025にアクセス、 https://stackoverflow.com/questions/33349864/merging-integration-and-unit-test-reports-with-jacoco
  70. Maven Surefire, Failsafe plugins with Jacoco for unit and integration testing with code coverage. https://natritmeyer.com/howto/reporting-aggregated-unit-and-integration-test-coverage-with-jacoco/ · GitHub, 6月 18, 2025にアクセス、 https://gist.github.com/mikybars/e2a6b75f1e2377b9613bfb273d617cfa
  71. The JaCoCo Report Aggregation Plugin - Gradle User Manual, 6月 18, 2025にアクセス、 https://docs.gradle.org/current/userguide/jacoco_report_aggregation_plugin.html
  72. [Jacoco] Aggregating Jacoco Reports for Multi-Module Projects HARIL, 6月 18, 2025にアクセス、 https://haril.dev/en/blog/2022/07/29/jacoco-aggregation-report
  73. The JaCoCo Plugin - Gradle User Manual, 6月 18, 2025にアクセス、 https://docs.gradle.org/current/userguide/jacoco_plugin.html
  74. Add SonarQube quality gates to your Jenkins build pipeline Tom Gregory, 6月 18, 2025にアクセス、 https://tomgregory.com/jenkins/sonarqube-quality-gates-in-jenkins-build-pipeline/
  75. Coverage - Jenkins Plugins, 6月 18, 2025にアクセス、 https://plugins.jenkins.io/coverage/
  76. JaCoCo Report · Actions · GitHub Marketplace, 6月 18, 2025にアクセス、 https://github.com/marketplace/actions/jacoco-report
  77. Code Coverage Guide Venice, 6月 18, 2025にアクセス、 http://venicedb.org/docs/dev_guide/how_to/code_coverage_guide
タグ: 開発環境