Main Content

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

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

プロジェクトを開く

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

openExample("slcheck/ExploreTestingMetricDataInModelTestingDashboardExample");
openProject("cc_CruiseControl");

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

また、プロジェクト例では、プロジェクト設定 [ツールの出力を追跡して期限切れの結果を検出] が有効になっています。メトリクスをプログラムによって収集する前に、プロジェクトの [ツールの出力を追跡して期限切れの結果を検出] 設定が有効になっていることを確認します。詳細については、デジタル スレッドを使用したアーティファクト トレーサビリティの監視と古くなった結果の検出を参照してください。

メトリクス結果の収集

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

metric_engine = metric.Engine();

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

updateArtifacts(metric_engine);

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

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

モデル テストのメトリクスの一覧については、モデル テストのメトリクスを参照してください。

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

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

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

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

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

unit = {fullfile(pwd,'models','cc_DriverSwRequest.slx'),'cc_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 レポートが自動的に開きます。

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

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

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

modelTestingDashboard

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

results_TestCasesPerReqDist = getMetrics(metric_engine, 'TestCasesPerRequirementDistribution');
results_TestStatus = getMetrics(metric_engine, 'slcomp.mt.TestStatus');

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

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

fprintf('Unit: %s\n', results_TestCasesPerReqDist(4).Scope(1).Name)
fprintf('Number of Tests:\t')
fprintf('%d\t', results_TestCasesPerReqDist(4).Value.BinEdges)
fprintf('\n   Requirements:\t')
fprintf('%d\t', results_TestCasesPerReqDist(4).Value.BinCounts)
Unit: cc_ControlMode
Number of Tests:	0	1	2	3	4	1.844674e+19	
   Requirements:	0      15      10      4	1	

ご使用のマシンでは、結果のユニットの順序が異なる可能性があるため、異なる結果になることがあります。

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

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

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

  • 0 — 失敗

  • 1 — パス

  • 2 — 無効

  • 3 — 未テスト

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

for n=1:length(results_TestStatus)

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

end

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

参考

| | | | |

関連するトピック