Qacoverは、Javaまたは.NETアプリケーションで実行されるSQLクエリに関連して、テストデータカバレッジを評価するコンポーネントです。カバレッジは、SQLクエリに合わせたMCDCのバリアントであるSQLフルプレッキスカバレッジ(SQLFPC)基準に従って測定されます。基準により、テストデータベースに対するSQLクエリをテストするために、関心のある状況(テストカバレッジ項目)が決定されます。これらの状況は、一連のカバレッジルールとして表されます。また、 SQLクエリ(SQLMutation Criterion)の変異体のカバレッジを測定するオプションもあります。
アプリケーションがクエリを実行するたびに、Qacoverはクエリの実行を傍受し、カバレッジルールを生成および評価し、結果をローカル開発環境に保存します。
テストの最後に、テストデータカバレッジの要約と詳細レポートを取得できます。これは、テストセッションの要約レポートの例です。

Javaの例:
qacover-coreを追加しますqacover.properties and spy.properties qacover-coreフォルダーからプロジェクトのルートまで。:p6spy afer jdbc (接続文字列がjdbc:sqlite:./target/TestDB.dbの場合、 jdbc:p6spy:sqlite:./target/TestDB.dbになる必要があります)。これにより、カバレッジ評価に関する内部データを含むフォルダーtarget/qacover/rulesが作成されます。 HTMLレポートを生成するには:
qacover-model-<VERSION>-report.jarをMaven Centralからダウンロードします(バージョンに移動してから、選択したバージョンを閲覧してダウンロードします)。java -jar qacover-model- < VERSION > -report.jar target/qacover/rules target/qacover/reportstarget/qacover/reportsフォルダーで見つかったindex.html開きます。クラス名がクエリを実行する相互作用ポイントにない場合がある場合は、パッケージの除外を含めるように構成を微調整し、 target/qacoverフォルダーを削除して再び繰り返します。
テストパッケージのフォルダーQacoversampleには、カバレッジ情報を使用してテストデータとテストケースを改善して隠されたバグを表示する方法の例が含まれています。 3つのシーケンシャルシナリオが含まれています。
Javaアーティファクト(Java 8以降)のリリースは、グループID io.github.giis-unioviの下でMaven Centralで公開されています。 2つの異なるアーティファクトがあります。
qacover-core :アプリケーションのAA依存関係として使用するメインアーティファクト(クイックスタートに示されているように)。qacover-model :報告を行い、カバレッジルールを検査するモデルとクラスのみが含まれます。以前に生成されたカバレッジルールにのみアクセスする必要がある場合(たとえば、プログラムからレポートを生成するため)、それを使用してください。それらのそれぞれには、追加の予選を含む別のダウンロード可能な瓶があります。
qacover-core Uber Jar。必要なすべての依存関係( slf4jを除く)が含まれ、それらは覆われています(つまり、依存関係の競合を避けるために別の名前空間で変更されました):-uber予選でアーティファクトをダウンロードします(たとえば、アプリケーションサーバーに展開するため)。 JARをサーバーライブラリに配置し、Qacoverを使用するように構成を設定するだけです。<qualifier>uber</qualifier>実験する場合、pom.xmlで宣言された依存関係としてUber JARを使用します。qacover-model Standalone Reporter:クイックスタートに示すように、コマンドラインからレポートを生成するために、 -report予選でアーティファクトをダウンロードします。.NETプラットフォームのリリースはNUGETで公開されています。 Javaと同じように、2つの異なるパッケージがあります。
QACover :メインパッケージ(NetStandard2.9)は、プロジェクト構成にパッケージリファレンスとして含める(C#を使用している場合は.csprojファイルなど)。QACoverReport :dotnetツール(netcore2.0)コマンドラインからレポートを生成する: dotnet tool install QACoverReport 、コマンドQACoverReport <rules folder> <reports folder>としてコマンドとして実行します。 Javaでは、カバレッジを評価するために2つの構成ファイルが必要です: qacover.propertiesとspy.propertiesとJDBCドライバーをカスタマイズする必要があります。 .NETでは、クエリを傍受するためのいくつかの追加コードと一緒に最初のもののみが必要です。
Qacoverは、この順序でqacover.propertiesを探します。
このレポのqacover-coreモジュールで利用可能なqacover.propertiesには、一般的なシナリオに適した一般的な構成が含まれていますが、カスタマイズする必要がある場合があります。各構成パラメーターの詳細については、ファイルを参照してください。次に、包含および除外基準である最も重要なものを強調します。
アプリケーション内のメソッドの行がSQLクエリ(インタラクションポイント)を実行すると、フレームワークのメソッドへの呼び出しチェーンが、実際にクエリを実行するドライバーメソッドに到達するまで実行されます。クエリの実際の実行が検出されるポイントは次のとおりですが、アプリケーションの相互作用ポイントを決定することです。これを達成するために、Qacoverは実際の実行のポイントでコールスタックをチェックし、メソッドのデータベースインタラクションのポイントを見つけるまで、任意のフレームワークパッケージで行われたすべてのコールを連続的に除外します。
Qacoverは、Java、System、P6Spy、Qacoverパッケージなどのシステムパッケージを除外しますが、フレームワークに応じて、ファイルqacover.propertiesにqacover.stack.exclusionsプロパティを設定して追加の除外を構成する必要があります。
例:Folder it/spring-petclinic-mainには、Spring Bootの典型的なサンプルが含まれています。除外は次のように宣言されます。
qacover.stack.exclusions=org.springframework.,org.hibernate.,com.zaxxer.hikari.,com.sun.,sun.reflect.
これにより、スキップしたいフレームワーククラスが削除され、 org.springframework.samples.petclinic.PetclinicIntegrationTestsクラスにあるインタラクションポイントを見つけます。
ただし、この特定のケースでは、相互作用ポイントはorg.springframeworkの下にあります。 inclusionsパラメーターを追加して、 org.springframework.samples.除外されていません:
qacover.stack.inclusions=org.springframework.samples.
パッケージの包含基準を構成する他のパラメーター、およびクラス名またはテーブル名の除外基準があります。詳細については、 qacover.properties参照してください。
このレポのqacover-coreフォルダーで利用可能なspy.propertiesには、p6spyが必要とする最小構成が含まれています。
modulelist=giis.qacover.driver.InterceptorFactory p6spyがコントロールをqacoverに渡す点を示すために常に存在する必要があります詳細については、 spy.propertiesファイルまたはP6Spy documentationを参照してください。
.NETプロジェクトの構成Javaと同じqacover.propertiesを使用しますが、 spy.propertiesを使用しません。代わりに、いくつかのコーディングが必要です。
DbContextから継承するカスタムコンテキスト、例:ef2interceptorcontext.csを参照してくださいロギングはgiis.qacover. :
標準ログに加えて、他のフォルダーlog-*がrulesフォルダーに作成され、評価されているクエリ、データベーススキーマ、およびカバレッジルールに関する追加のデバッグ情報を表示します。
レポート生成は、指定されたフォルダーに一連の静的HTMLファイルを作成し、カバレッジデータの要約と詳細を簡単に検査します。
レポートを生成するには、3つのオプションがあります。
qacover-model Standaloneレポーターをダウンロードしてください。 java -jar qacover-model- < VERSION > -report.jar target/qacover/rules target/qacover/reportsqacover-modelを含むプログラムまたはテストから: new giis . qacover . report . ReportManager (). run ( "target/qacover/rules" , "target/qacover/rules" );qacover-model依存関係として宣言されている場合、 exec-maven-pluginを使用してReportMainメソッドを実行します。 < plugin >
< groupId >org.codehaus.mojo</ groupId >
< artifactId >exec-maven-plugin</ artifactId >
< version >1.6.0</ version >
< executions >
< execution >
< id >qacover-report</ id >
< phase >post-integration-test</ phase >
< goals >
< goal >java</ goal >
</ goals >
< configuration >
< classpathScope >test</ classpathScope >
< classpath />
< mainClass >giis.qacover.report.ReportMain</ mainClass >
< arguments >
< argument >target/qacover/rules</ argument >
< argument >target/qacover/reports</ argument >
</ arguments >
</ configuration >
</ execution >
</ executions >
</ plugin >index.htmlファイルには、各クラスのテストデータカバレッジの概要が含まれています。
どこ:
各クラス名はクリック可能です。評価されたクエリの詳細を含むレポートを表示します。クラスのレポートは次のように見えます:
... 
評価されたクエリでの割合のカバレッジ近くのダウン矢印をクリックすると、各カバレッジルールの詳細が拡張されます(緑色で覆われ、黄色で覆われています):
レポートジェネレーターの一般的な構文には4つのパラメーターがあります(テスト中のクラスのソースコードを含めない場合、2つの最初のパラメーターのみが必要です):
<rules-folder> <reports-folder> [<source-folders> [<project-folder>]]
Javaでは、レポートにソースコードを含めたい場合は、3番目のパラメーター<source-folders>の値を設定して、ソースを見つけるためのパスのコンマ分離リストを含める必要があります。例えば:
src/main/javaを設定します。module1/src/main/java,module2/src/main/javaを設定します。 .NETでは、3番目と4番目のパラメーターの両方の値を設定する必要があります: <source-folders>および<project-folder> 。その理由は、.NETソースファイルの場所が名前空間と正確に一致しないため、FPCカバレッジルールは、レポート生成の前に相対パスに解決する必要があるクラスソースファイルの絶対パスを保存するためです。例えば:
.../../../..に設定します(テストが実行されるデフォルトのディレクトリがソリューションフォルダーの4つのレベルにあるため)/appフォルダーの下でサーバーアプリケーションを実行するコンテナ内で生成されたレポートがパラメーターを設定します. /app ( /app値により、プロジェクトフォルダーから各ソースファイルの相対パスを解決できます)。 Contributing.mdのGIIS-Unioviの一般的な貢献ポリシーとガイドラインを参照してください。
次に、いくつかの追加の背景技術情報を含めます。
Qacoverは、P6SPYを使用してJDBCコール、TDRULESをインターセプトしてデータベーススキーマを取得し、SQLRULESサービスを呼び出してカバレッジルールを生成します。すべての実行は、接続文字列で構成されたデータベースに対してローカルで行われます。
メインQacoverパッケージの内部構造(プレフィックスgiis.qacover. )を以下に示します(シンプルさのためにプレフィックスは省略されています):
coreモジュール: driver 、 core 、 core.sevicesパッケージが含まれています。modelモジュール: model 、 storage 、 reader 、 reportパッケージが含まれています。これらは、パッケージ間の依存関係です。
フローチャートTD
ドライバー - >コア
core-> services(core.services)
サービス - >ストレージ
ストレージ - >モデル
コア - >モデル
サービス - >モデル
レポート - > Reader
レポート - >モデル
読者 - >モデル
読者 - >ストレージ