ブラックボックステストでしか学べないコードカバレッジと精度テスト

一般的なカバレッジ統計ツール

  • エマ
  • 屋根
  • ジャココ

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. コンピューターの基本

  完全なマテリアルセットの入手方法: 下の小さなカードをクリックして自分で入手してください

おすすめ

転載: blog.csdn.net/weixin_57794111/article/details/132714082