Didi オープンソース Super-jacoco: Java コード カバレッジ収集プラットフォームのドキュメント

Jumei のガイド: Super-Jacoco は、Jacoco と git の二次開発に基づいたワンストップの JAVA コード フル/差分カバレッジ収集プラットフォームで、低コストで侵入なしでコード カバレッジ データを収集できます。Super-Jacoco は、JVM の実行をサポートするだけではありません期間のカバレッジ収集に加えて、環境とシームレスに接続し、サーバー側のカスタム期間コードの完全/増分カバレッジを収集し、視覚的な HTML カバレッジ レポートを提供してカバレッジ分析を支援し、正確なデータをサポートすることもできます。テスト中。

モバイル端末での操作動作は特に重要であり、うまく活用すれば効率が向上し、ユーザー価値やビジネス価値を生み出すことができます。彼らはどう

0. 

背景

ソフトウェアの製造・納品の過程では、単体テスト、インターフェーステスト、機能テストなどによりソフトウェアの品質を確保しますが、どのようなテスト手段であっても、ケース設計が包括的かつ効率的に行われているかが特に重要となります。実際のプロジェクトのテスト プロセスでは、ケースの設計に次の問題が発生することがよくあります。

1.開発学生は多くの単体テストを作成し、コード ロジックの一部が繰り返し実行されましたが、いくつかのシナリオや異常なコード ロジックは実行されませんでした。

2.受験者が設計したテスト ケースは繰り返しレビューされていますが、依然としてカバーされていない異常なシナリオがあり、テスト漏れが存在します。

3.インターフェイス自動化テストケースは日常回帰手法として使用されており、すべてのコードロジックがカバーされているかどうかを判断することができず、その信頼性を評価することはできません。

では、最も合理的なケースを使用してテストの包括性を確保するにはどうすればよいでしょうか? 現在、業界では、変更されたコードのカバレッジ率を分析することで対応ケースを補足する方法であるという認識が高まっています。業界のオープンソース Java コード カバレッジ統計ツールである jacoco と EMMA を調査したところ、jacoco と EMMA の両方のみが検出されたことがわかりました。完全なコード カバレッジの収集はサポートされませんが、増分コード カバレッジの正確な分析の要求を満たすことはできません。したがって、変更のコード カバレッジを収集できるツールが緊急に必要です。

1. 

スーパージャココのご紹介

Super-Jacoco は、Jacoco と git の二次開発をベースとしたワンストップの JAVA コードフル/差分カバレッジ収集プラットフォームであり、低コストかつ侵入なしでコードカバレッジデータを収集できます。JVM 実行時のカバレッジ収集のサポートに加えて、Super-Jacoco は環境とシームレスに連携して、サーバー側のカスタム期間コードの完全/増分カバレッジを収集することもできます。また、視覚的なカバレッジ レポートを HTML 形式で提供し、カバレッジの正確な分析を支援し、正確なテストの実装をサポートします。

単一のテスト コードの完全/増分カバレッジ コレクション:

オンザフライ モードでは、開発コードを変更することなくカバレッジ データを収集できます。

機能テストの完全/増分カバレッジ収集:

環境展開プラットフォーム ebase と統合されているため、JAVA 起動コマンドに -javaagent:jacocoagent.jar=includes=com.* を追加するだけで、機能テスト カバレッジ データを収集できます。

ビジュアルレポート:

視覚化されたHTMLカバレッジ率レポートにより、カバレッジ状況を正確に分析し、精密なテストの実施をサポートします。

2. 

スーパージャココ原理

2.1 .全体的 なプロセス

増分カバレッジ収集をサポートするには、2 つのことを行う必要があります: 1)異なるバージョン コード diff ファイルを取得する; 2)増分メソッド リスト パラメーターをサポートするための jacoco の二次開発。

2.2.  インクリメンタルコードの取得

主なプロセス: マスター コード (参照ブランチ) とフィーチャー コード (テスト ブランチ) をプルし、JGit を使用して 2 つのブランチのソース コードを比較して増分コードを取得します。以下にコードの一部を示します。

2.3. jacoco の 2 番目の変換は、増分メソッドリストパラメータをサポートします。  

JaCoCo の exec の分析は、主に Analyzer クラスのanalyzeClass(final byte[] source) メソッドで行われます。createAnalyzingVisitor メソッドが呼び出され、解析用の ASM クラス ビジターが生成されます。引き続きコードをたどると、メソッド レベルのプローブ計算ロジックが ClassProbesAdapter クラスの visitMethod メソッドにあることがわかります。したがって、抽出された各クラスの新しく追加または変更されたメソッドのみを分析し、指定されていないクラスやメソッドは処理しないように、visitMethod メソッドを変更するだけで済みます。変更されたコア コード スニペットは次のとおりです。 

2.4.実行  


実行された mvn コマンドに -Djacoco.diffFile=change メソッド リストを追加するだけで、変更メソッドのコード カバレッジを収集できます。-Djacoco.diffFile が渡されないか、Djacoco.diffFile パラメーターが空の場合、デフォルトで完全なカバレッジが収集されます。

2.5.レポート出力  


カバレッジレポートは下図のとおりで、図ではあるサービスの実装クラスとなっていますが、最新のコードには23個のメソッドがありますが、変更・追加された5個のメソッドのみが対象となって表示されます。

3. 

特性

  • 一般: 単体テスト カバレッジ収集と手動テスト カバレッジ収集の両方をサポートし、完全カバレッジ収集と差分カバレッジ収集の両方をサポートします。

  • 侵入なし: オンザフライ モードが採用されており、開発コードを変更することなくカバレッジ データを収集できます。

  • 高可用性: 分散アーキテクチャにより、タスク マシンを無限に拡張できるため、タスク マシンがダウンしている場合やタスクが多すぎる場合のパフォーマンスのボトルネックを回避できます。

  • 視覚化: カバレッジ レポートを、可読性の高い HTML 形式で提供します。

4. 

建築

5. 

使い方

▍5.1. データベースのインストールと初期化

5.1.1 mysql データベースをインストールし、データベース作成後に sql/db.sql ファイル内のテーブル構築 SQL を実行する

▍5.2. コンパイルとパッケージ化

5.2.1 JDK1.8、mavan3のインストール

5.2.2 コードをクローンし、application.properties ファイル内のデータベースと gitlab 構成を変更します。

spring.datasource.url=jdbc:mysql://IP:ポート/データベース名?useUnicode=true&characterEncoding=utf8

    spring.datasource.username=

    pring.datasource.password=

    gitlab.ユーザー名=

    gitlab.password=

5.2.3 mvn package -Dmaven.test.skip=true を実行して super-jacoco.jar を生成する

▍5.3.導入 

5.3.1 「nohup java -jar super-jacoco.jar &」を実行してコードカバレッジサービスを開始します。デフォルトのポートは8899です。

▍5.4.カバレッジ収集インターフェース 

5.4.1 単一のテストカバレッジインターフェイス

1)启动覆盖率收集
URL:/cov/triggerUnitCover
调用方法:POST
参数(body方式传入):{"uuid":"uuid","type":1,"gitUrl":"git@git","subModule":"","baseVersion":"master","nowVersion":"feature","envType":"-Ptest"}
返回:{"code":200,"data":true,"msg":"msg"}
备注:


2)获取覆盖率结果
URL:/cov/getUnitCoverResult
调用方法:GET
参数:uuid(String)
返回:
{"code":200,"data":{"coverStatus":1,"errMsg":"msg","lineCoverage":100.0,"branchCoverage":100.0,"logFile":"file content","reportUrl":"http://"},"msg":"msg"}
备注:

5.4.2環境カバレッジインターフェイス

1)启动覆盖率收集
URL:/cov/triggerEnvCov
调用方法:POST
参数(body方式传入):{"uuid":"uuid","type":1,"gitUrl":"git@git","subModule":"","baseVersion":"master","nowVersion":"feature","address":"127.0.0.1","port":"8088"}
返回:{"code":200,"data":true,"msg":"msg"}
备注:IP和port为模块部署服务器的IP和端口,在dump jacoco.exec时使用,需要提前把org.jacoco.agent-0.8.5-runtime.jar包拷贝到服务器:/home/xxx/目录,服务启动时需要添加启动参数:-javaagent:/home/xxx/org.jacoco.agent-0.8.5-runtime.jar=includes=*,output=tcpserver,address=*,port=18513


2)获取覆盖率结果
URL:/cov/getEnvCoverResult
调用方法:GET
参数:uuid(String)
返回:{"code":200,"data":{"coverStatus":1,"errMsg":"msg","lineCoverage":100.0,"branchCoverage":100.0,"logFile":"file content","reportUrl":"http://"},"msg":"msg"}
备注:

6. 

要約する

ビジネスの迅速な反復において、正確なテストは効率的なテストの開発トレンドとなり、コードカバレッジはその重要な部分を占めます。Super-jacoco は、正確なテストに役立つ Java コードカバレッジ統計を便利かつ高速に作成します。 、参加歓迎!

7。 

GitHub プロジェクトのアドレス

https://github.com/didi/super-jacoco

オープンソースチーム

チームメンバーは全員Didi Car Serviceの技術チームの出身です。

参考文献


内容编辑 | Teeo联系我们 | [email protected]

おすすめ

転載: blog.csdn.net/DiDi_Tech/article/details/111399149#comments_27749267