モデル テスト アーティアクトに関するメトリクスをプログラムによって収集
この例では、プロジェクト内の要件に基づくテスト アクティビティのステータスおよび品質をプログラムによって評価する方法を示します。モデルベース デザインを使用してソフトウェア ユニットを開発するときに、要件に基づくテストを使用してモデルを検証します。メトリクス 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);
コンテンツのテーブルを開き、各ユニットの結果に移動するには、レポートの左上隅にあるメニュー アイコンをクリックします。レポート内のユニットごとに、ユニットのサイズと構造体を表示するアーティファクト サマリー テーブルがあります。
メトリクス結果をレポート ファイルに保存すると、プロジェクトやダッシュボードを開かずに結果にアクセスできます。あるいは、モデル テスト ダッシュボードを開いて結果を表示し、アーティファクトを確認できます。
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
を返します。
参考
モデル テストのメトリクス | metric.Engine
| execute
| generateReport
| getAvailableMetricIds
| updateArtifacts
関連するトピック
- モデル テスト ダッシュボードを使用してテスト アクティビティのステータスと品質を調査
- 要件に対するモデルのテストと結果のレポート (Requirements Toolbox)
- 機能テストの実行とテスト カバレッジの解析 (Simulink Test)