一般的なカバレッジ統計ツール
- エマ
- 屋根
- ジャココ
emma と cobertura は単体テスト用に設計されたカバレッジ統計です。jacoco と emma は同じ会社に属していますが、より広範なカバレッジ統計用に設計されたツールです。
ジャココ
jacoco のドキュメントにはミッションの章があり、jacoco の位置付けが非常によく説明されています。原文の一般的な考え方は、他のツールは積極的かつ効果的に保守されておらず、他のツールは単一のタスクのために設計されており、「統合」のために生まれたものではないというものです。ここからjacocoのデザインコンセプトが見えてきます。
jacoco の設計コンセプトと優れた API 設計のおかげで、既存のツールと簡単に統合でき、プラットフォーム化することもできます。単体テストと結合テストを同時に行うこともできるため、非常に優れたカバレッジ統計ツールであり、多くの企業が正確なテストのために jacoco に大きく依存しています。
カバレッジ分析の原則
コードカバレッジの統計原理を理解するには、jvm のメカニズムを深く理解する必要があります。この知識は Java 分野におけるハイエンドの高度な知識です。紙面の都合上、一般原則のみ説明します。全内容については、VM 仮想マシン シリーズの書籍や newrelic が公開しているコード挿入資料を参照してください。初期の頃。
簡単に説明すると、Javaのソースコードはjavacによってクラスファイルにコンパイルされ、クラスファイルにはクラスの基本情報やjvmの命令セットが保存されます。Java の基礎となるランタイム、つまり、jvm がクラスを解析するときに、クラスをファイル形式でメモリに読み込んで実行します。Android もこの一連の設計概念を活用しており、Android 上のランタイムは実際には dalvik であり芸術です。
コード カバレッジをカウントしたい場合は、コード実行パスにプローブ分析を追加する必要があります。通常、クラスを読み取るときは、主要な命令ブロックの出口と入り口にタグを追加します。命令ブロックを実行するとプローブがヒットし、記録が完了します。
最下位の jvm バイトコードを変更するのは面倒な場合が多く、さまざまな jvm 命令と Java クラス構造に習熟する必要があります。現在、この側面に対処するために拡張できる非常に成熟したオープン ソース プロジェクトがあり、以下にいくつかのよく知られたバイトコード変更ツールを示します。
- ASM
- JavaAssist
- ByteBuddy、BTrace、JVM-Sandbox その中で、ASM はすべてのバイトコード操作の基礎であり、最も重要なバイトコード変更ツールです。他のツールは、その上にある高レベルのラッパーです。これらのツールと JVM 自体のいくつかのデバッグ機能を利用すると、JVM コードやプロセスを簡単に操作できます。
挿入方法
杭の挿入方法は数多くありますが、一般的な方法は次のとおりです。
- ソースコード計測: オフライン計測、Android のサポート
- バイトコード計測: オフライン計測、Android のサポート
- javaagent モード: コードを使用しないランタイム インストルメンテーション、オンザフライ モード jacoco は、バイトコード インストルメンテーションと javaagent の 2 つのインストルメンテーション メソッドをサポートします。つまり、ソースコードがなくてもカバレッジデータをカウントすることはできますが、より詳細なカバレッジデータを取得するには、最終的にはソースコードを組み合わせる必要があります。結局のところ、カバレッジ統計は、単にカバレッジ データそのもののレベルを示すものではありません。
ジャココの仕組み
jacoco は 4 つの作業モードをサポートします
- file: プロセス終了時にローカルにファイルを生成します。
- tcpserver: ポートを開き、クライアントがカバレッジを取得するのを待ちます。
- tcpclient: カバレッジ データをアクティブに送信する
- none: カバレッジを生成しません 多くの人はファイル モードを使用しますが、tcp サーバー モードが最も使いやすいです。サーバー上でファイルアクセス許可を申請する必要がないため、カバレッジデータを制御できます。企業の導入状況に応じて、適切な作業モードを選択できます。
オンザフライ計測モードが最もよく使用されます。まず、テスト対象の Java プログラムの開始時に、jvm の javaagent パラメータをいくつか追加する必要があります。
-javaagent:[yourpath/]jacocoagent.jar=[option1]=[value1],[option2]=[value2]
destfile
output:file、tcpserver、tcpclient、none
address
port
適切な動作モードを自分で設定できます。オフラインインスツルメンテーションモードはAndroidのカバレッジ統計に適しており、mavenやgradleなどの構築ツールのインストルメンテーション命令が必要です。
jacoco-cli は jacoco のコンポーネントであり、Maven や Gradle ビルド ツールに依存せずにコード分析を完了できます。これは主に tcpserver 動作モードで使用されます。使い方は以下の通りです
java -jar jacococli.jar dump [--address <address>] --destfile <path> [--help] \
[--port <port>] [--quiet] [--reset] [--retry <count>]
これは、jmeter ツールのスタートアップ カバレッジをカウントする、アカデミーでの実践演習の小さなシーンです。
project_root=/Users/seveniruby/temp/java_2/jacoco/apache-jmeter-5.2.1
jacoco_cli_jar=org.jacoco.cli-0.8.6-20200329.124045-45-nodeps.jar
java -javaagent:org.jacoco.agent-0.8.6-20200329.124039-45-runtime.jar \
-jar $project_root/bin/ApacheJMeter.jar
#退出jmeter
#生成覆盖率报告
java -jar $jacoco_cli_jar report jacoco.exec \
--classfiles "$project_root/bin/ApacheJMeter.jar" \
--classfiles $project_root/lib/ext/ApacheJMeter_http.jar \
--html jmeter_coverage/
#生成带有源代码的覆盖率报告
java -jar $jacoco_cli_jar report jacoco.exec \
--classfiles "$project_root/bin/ApacheJMeter.jar" \
--classfiles $project_root/lib/ext/ApacheJMeter_http.jar \
--html jmeter_coverage/ --sourcefiles ~/projects/jmeter/src/
#生成xml报告
java -jar $jacoco_cli_jar report jacoco_tcpserver2.exec \
--classfiles "$project_root/bin/ApacheJMeter.jar" \
--classfiles $project_root/lib/ext/ApacheJMeter_http.jar \
--xml jmeter_coverage_tcpserver2/jacoco.xml
Sonarqube は、jacoco の実行ファイルと XML ファイルを解析し、カバレッジを自動的にインポートできます。exec ファイルの解析は今後廃止され、主に xml ファイルの解析がサポートされます。
sonar-scanner \
-Dsonar.host.url=http://sonarqube.testing-studio.com:9000 \
-Dsonar.login=$SONARQUBE_TOKEN \
-Dsonar.projectKey=jmeter \
-Dsonar.projectVersion=1.0 \
-Dsonar.coverage.jacoco.xmlReportPaths=$PWD/jmeter_coverage_tcpserver2/jacoco.xml \
-Dsonar.projectBaseDir=/Users/seveniruby/projects/jmeter/ \
-Dsonar.java.binaries=/Users/seveniruby/projects/jmeter/
輸入範囲
分析するコードの範囲は次のパラメータによって制限でき、通常は対象となるパッケージの範囲を指定します。
- ソナーソース
- ソナー.インクルージョン
輸入範囲
Sonarqube は、古いバージョンと新しいバージョンの間で新しいコードのカバレッジをインテリジェントに分析できます。これは非常に優れており、コードの差分を分析する以前の作業の一部が保存されます。彼のコード分析もよりスマートであり、単純な改行はコード diff の分析範囲を妨げません。
カバレッジデータによる
sonarqube は 2 つの一般的なテスト データのインポートをサポートします
- 一般的なカバレッジ データ: sonar.coverageReportPaths
- 一般的なテスト実行データ: sonar.testExecutionReportPaths これにより、さまざまなフレームワークとの統合が容易になり、テスト エンジニアによる二次カスタマイズが容易になります。一般的なテスト データ テンプレート。
一般的なカバレッジ データ テンプレート
sonarqube のスキャナー分析では、対応する設定パラメーターを追加することで一般的なテスト データをインポートできます。汎用テスト データ インポートの一般的な使用法
- さまざまなテストツールのテストレポートをsonarqubeがサポートする形式に変換し、プラットフォームにインポートします
- 各種カバレッジツールのカバレッジレポートを標準フォーマットに変換してプラットフォームにインポート
- 要件に応じて差分差分カバレッジをカスタマイズします。たとえば、新しいコードをカバーするだけでなく、新しいコードを使用する依存コードも解析する必要があります。
コードの差分分析は比較的大きなトピックです。差分はコードの最も単純な分析戦略にすぎません。コードを深く理解するには、コードの呼び出しチェーンをさらに分析する必要があります。まずは最も単純なコード差分分析ツールを見てみましょう。コード差分解析ツール
- JGit: git 分析ツール
- JavaParser: 構文解析
- ASM: バイトコードの読み取り
- javap: jdkにはバイトコード分析ツールが付属しています
最後に: 以下はサポート学習教材です。[ソフトウェア テスト] を行う友人にとって、これは最も包括的で完全な準備倉庫となるはずです。この倉庫は、最も困難な旅を私に同行させてくれました。あなたにも役立つことを願っています。
ソフトウェアテストインタビューアプレット
ソフトウェア テストの質問バンクには、何百万人もの人が参加しました。!!誰が知っているのか!!!ネットワーク全体で最も包括的なクイズ ミニ プログラムです。携帯電話を使用して、地下鉄やバスの中でもクイズに答えることができます。
次の面接の質問セクションが取り上げられます。
1. ソフトウェアテストの基礎理論、2. Web、アプリ、インターフェース機能テスト、3. ネットワーク、4. データベース、5. Linux
6. Web、アプリ、インターフェイスの自動化、7. パフォーマンス テスト、8. プログラミングの基本、9. 時間面接の質問、10. 公開テストの質問、11. セキュリティ テスト、12. コンピューターの基本