Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

モデル テスト アーティアクトに関するメトリクスをプログラムによって収集

この例では、プロジェクト内の要件に基づくテスト アクティビティのステータスおよび品質をプログラムによって評価する方法を示します。モデルベース デザインを使用してソフトウェア ユニットを開発するときに、要件に基づくテストを使用してモデルを検証します。メトリクス API を使用して要件とテスト ケース間のトレーサビリティ、およびテスト結果のステータスに関するメトリクス データを収集することで、1 つのユニット モデルのテスト ステータスを評価することができます。メトリクスは、ISO 26262 および DO-178 などの業界標準を反映する要件に基づくテストの完全性および品質の特性を測定します。メトリクス結果の収集後、結果にアクセスするか、結果をファイルにエクスポートできます。これらのメトリクスを収集するスクリプトを実行することで、プロジェクトのテスト ステータスを自動的に解析して、継続的インテグレーション システムの設計などを行うことができます。この結果を使用して、テストの完全性を監視したり、プロジェクト内のアーティファクトを変更したときにダウンストリーム テストの影響を検出することができます。

プロジェクトを開く

モデルとテスト アーティファクトを含むプロジェクトを開きます。この例では、MATLAB® コマンド ウィンドウで次のように入力します。

dashboardCCProjectStart('incomplete')

プロジェクトには、モデル、要件、およびモデルのテスト ケースが含まれます。一部の要件にはモデルおよびテスト ケースへのトレーサビリティ リンクがあり、モデルの機能が要件を満たすことを検証するのに役立ちます。

メトリクス結果の収集

現在のプロジェクトの metric.Engine オブジェクトを作成します。

metric_engine = metric.Engine();

metric_engine のトレース情報を更新して、保留中のアーティファクトの変更を反映し、テスト結果が追跡されるようにします。

updateArtifacts(metric_engine);

収集するメトリクスのメトリクス識別子の配列を作成します。この例では、要件に基づくバージョンのモデル テスト ダッシュボード アプリで使用されるメトリクス識別子のリストを作成します。詳細については、getAvailableMetricIdsを参照してください。

metric_Ids = getAvailableMetricIds(metric_engine,...
'App','DashboardApp',...
'Dashboard','RequirementsBasedModelUnitTesting');

モデル テストのメトリクスとその識別子の一覧については、Model Testing Metricsを参照してください。

メトリクス結果を収集するときは、一度に 1 つのユニットの結果、またはプロジェクト内の各ユニットの結果を収集できます。

1 つのユニットの結果の収集

ユニットの結果を収集および表示するときに、メトリクスはモデルまでトレースするアーティファクトのデータを返します。

db_DriverSwRequest のメトリクス結果を収集します。

プロジェクト内のモデル ファイルへのパスとモデルの名前を特定する配列を作成します。

unit = {fullfile(pwd,'models','db_DriverSwRequest.slx'),'db_DriverSwRequest'};

エンジンを実行し、'ArtifactScope' を使用して、結果収集の対象となるユニットを指定します。エンジンは、指定したモデルまでトレースするアーティアクトに対してのみメトリクスを実行します。これらのメトリクスの結果を収集するには、Simulink® Test™ のライセンス、Requirements Toolbox™ のライセンス、および Simulink Coverage™ のライセンスが必要です。

execute(metric_engine, metric_Ids, 'ArtifactScope', unit)

プロジェクト内の各ユニットの結果の収集

プロジェクト内の各ユニットの結果を収集するには、'ArtifactScope' の引数を指定せずにエンジンを実行します。

execute(metric_engine, metric_Ids)

メトリクス結果の収集の詳細については、関数 execute を参照してください。

結果へのアクセス

プロジェクト内のすべてのユニットの結果を含むレポート ファイルを生成します。この例では、HTML ファイル形式を指定し、pwdを使用して現在のフォルダーのパスを指定して、レポートに 'MetricResultsReport.html' という名前を付けます。

reportLocation = fullfile(pwd, 'MetricResultsReport.html');
generateReport(metric_engine,'Type','html-file','Location',reportLocation);

HTML レポートを開きます。レポートはプロジェクトのルートにある現在のフォルダーにあります。

web('MetricResultsReport.html')

コンテンツのテーブルを開き、各ユニットの結果に移動するには、レポートの左上隅にあるメニュー アイコンをクリックします。レポート内のユニットごとに、ユニットのサイズと構造体を表示するアーティファクト サマリー テーブルがあります。

Artifact Summary table listing the Number of Artifacts for each Artifact Type

メトリクス結果をレポート ファイルに保存すると、プロジェクトやダッシュボードを開かずに結果にアクセスできます。あるいは、モデル テスト ダッシュボードを開いて結果を表示し、アーティファクトを確認できます。

modelTestingDashboard

プログラムによって結果にアクセスするには、関数 getMetrics を使用します。この関数は、指定されたユニットとメトリクスの結果データが含まれる metric.Result オブジェクトを返します。この例では、対応する配列内のメトリクス TestCaseStatus および TestCasesPerRequirementDistribution の結果を保存します。

results_TestCasesPerReqDist = getMetrics(metric_engine, 'TestCasesPerRequirementDistribution');
results_TestStatus = getMetrics(metric_engine, 'TestCaseStatus');

要件あたりのテスト ケース リンク数の分布を表示

メトリクス TestCasesPerRequirementDistribution は、ユニットの各機能要件にリンクされているテスト ケース数の分布を返します。関数 disp を使用して分布のビン エッジとビンのカウント数を表示します。これらは、metric.Result オブジェクトの Value フィールドにあるフィールドです。各ビンの左側のエッジはテスト ケース リンクの数を示し、ビンのカウント数はその数のテスト ケースにリンクされている要件の数を示します。6 番目のビンのエッジは 18446744073709551615 です。これは要件あたりのテスト ケース数の上限であり、5 番目のビンに 4 つ以上のテスト ケースをもつ要件が含まれていることを示しています。

disp(['Unit:  ', results_TestCasesPerReqDist(1).Scope(1).Name])
disp(['  Tests per Requirement:  ', num2str(results_TestCasesPerReqDist(1).Value.BinEdges)])
disp(['  Requirements:  ', num2str(results_TestCasesPerReqDist(1).Value.BinCounts)])
Unit:  db_DriverSwRequest
  Tests per Requirement:  0  1  2  3  4  18446744073709551615
  Requirements:  3  6  0  0  2

この結果は、ユニット db_DriverSwRequest に関して、テスト ケースにリンクされていない要件が 3 個、1 つのテスト ケースにリンクされている要件が 6 個、4 つ以上のテスト ケースにリンクされている要件が 2 個あることを示しています。各要件は、モデルが要件を満たすことを検証する少なくとも 1 つのテスト ケースにリンクされる必要があります。この分布を使用することで、要件が他の要件より多くのテスト ケースをもっているかどうかを確認することもできます。これは、要件の汎用性が高過ぎるため、より細かい要件に分割する必要があることを示している可能性があります。

テスト ケース ステータスの結果を表示

メトリクス TestCaseStatus は、ユニットの各テスト ケースのテスト ステータスを評価し、以下のいずれかの数値結果を返します。

  • 0 — 失敗

  • 1 — パス

  • 2 — 無効

  • 3 — 未テスト

各テスト ケースの名前とステータスを表示します。

for n=1:length(results_TestStatus)

   disp(['Test Case: ', results_TestStatus(n).Artifacts(1).Name])
   disp([' Status: ', num2str(results_TestStatus(n).Value)])

end

この例では、テストが実行されていないため、各テスト ケースはステータス 3 を返します。

参考

| | | | |

関連するトピック