Main Content

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

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

この例では、プロジェクト内の要件に基づくテスト アクティビティのステータスおよび品質をプログラムによって評価する方法を示します。モデルベース デザインを使用してソフトウェア コンポーネントを開発するときに、要件に基づくテストを使用してモデルを検証します。メトリクス API を使用して要件とテスト ケース間のトレーサビリティ、およびテスト結果のステータスに関するメトリクス データを収集することで、1 つのコンポーネントのテスト ステータスを評価することができます。メトリクスは、ISO 26262 および DO-178 などの業界標準を反映する要件に基づくテストの完全性および品質の特性を測定します。メトリクス結果の収集後、結果にアクセスしてファイルにエクスポートできます。

プロジェクトを開く

モデルとテスト ファイルを含むプロジェクトを開きます。コマンド プロンプトで、dashboardCCProjectStart と入力します。プロジェクトには、モデル、要件、およびモデルのテスト ケースが含まれます。一部の要件にはモデルおよびテスト ケースへのトレーサビリティ リンクがあり、モデルの機能が要件を満たすことを検証するのに役立ちます。

dashboardCCProjectStart

メトリクス結果の収集

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

metric_engine = metric.Engine();

収集するメトリクスを指定するには、メトリクス識別子をリストする配列を作成します。この例では、メトリクス TestCasesPerRequirementDistribution および TestCaseStatus の結果を収集します。メトリクスとその識別子の一覧については、Model Testing Metricsを参照してください。

metric_IDs = {'TestCasesPerRequirementDistribution','TestCaseStatus'};

メトリクス結果を収集するときに一度に収集できるのは、プロジェクト内の各コンポーネントの結果または 1 つのコンポーネントの結果です。モデル テスト ダッシュボードは、プロジェクト内の各モデルを考慮して、コンポーネントのアルゴリズムを表します。コンポーネントの結果を収集および表示するときに、メトリクスはモデルまでトレースするアーティファクトのデータを返します。この例では、db_DriverSwRequest のメトリクスを収集します。プロジェクト内のモデル ファイルへのパスとモデルの名前を特定する配列を作成します。

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

エンジンを実行することで、メトリクスの結果を収集します。引数 ArtifactScope を使用して、結果収集の対象となるコンポーネントを指定します。エンジンは、指定したモデルまでトレースするアーティアクトに対してのみメトリクスを実行します。以下のメトリクスの結果を収集するには、Simulink® Test™ のライセンスと Simulink Requirements™ のライセンスが必要です。

execute(metric_engine, metric_IDs, 'ArtifactScope', component)

結果へのアクセス

エンジンの関数 getMetrics を使用して、メトリクス結果にアクセスします。この関数は、指定されたコンポーネントとメトリクスの結果データが含まれる metric.Result オブジェクトを返します。メトリクス用に収集済みの結果にアクセスするために必要なのは、Simulink Check™ のライセンスのみです。この例では、各メトリクスの結果を配列に格納します。

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

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

disp(['Component:  ', results_TestCasesPerReqDist(1).Artifacts(1).Name])
disp(['  Tests per Requirement:  ', num2str(results_TestCasesPerReqDist(1).Value.BinEdges)])
disp(['  Requirements:  ', num2str(results_TestCasesPerReqDist(1).Value.BinCounts)])
Component:  db_DriverSwRequest
  Tests per Requirement:  0   1   2   3  4  18446744073709551615
  Requirements:  12   9   0   0   0

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

データをスプレッドシートにエクスポートするには、ビンのエッジとカウント数を格納する cell 配列 traceabilityData を作成します。次に、writetable を使用してデータをエクスポートします。

traceabilityData = {'Test Cases per Requirement', 'Number of Requirements'};

for n = 1:length(results_TestCasesPerReqDist(1).Value.BinCounts)
   
   traceabilityData{n+1, 1} = results_TestCasesPerReqDist(1).Value.BinEdges(n);
   traceabilityData{n+1, 2} = results_TestCasesPerReqDist(1).Value.BinCounts(n);

end

filename = 'TestCasesPerRequirementDist.xlsx';
distTable = table(traceabilityData);
writetable(distTable, filename);

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

  • 0 — 失敗

  • 1 — パス

  • 2 — 無効

  • 3 — 未テスト

各テスト ケースの名前とステータスを表示します。次に、名前とステータスを cell 配列に格納し、データをスプレッドシートにエクスポートします。

testStatusData = {'Test Case', 'Status'};

for n=1:length(results_TestStatus)

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

   testStatusData{n+1,1} = results_TestStatus(n).Artifacts(1).Name;
   testStatusData{n+1,2} = results_TestStatus(n).Value;

end

filename = 'TestCaseStatus.xlsx';
distTable = table(testStatusData);
writetable(distTable, filename);
Test Case: Set button
 Status: 3
Test Case: Decrement button hold
 Status: 3
Test Case: Cancel button
 Status: 3
Test Case: Resume button
 Status: 3
Test Case: Decrement button short
 Status: 3
Test Case: Increment button short
 Status: 3
Test Case: Enable button
 Status: 3
Test Case: Increment button hold
 Status: 3

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

これらのメトリクスを収集するスクリプトを実行することで、プロジェクトのテスト ステータスを自動的に監視できます。この結果を使用して、テストの完全性に向けた進行状況を監視したり、プロジェクト内のアーティファクトを変更したときにダウンストリーム テストの影響を検出することができます。モデル テスト ダッシュボードで結果をさらに詳しく調べるには、コマンド ラインで modelTestingDashboard と入力します。

参考

|

関連するトピック