Main Content

メトリクス ダッシュボードのレイアウトおよび機能のカスタマイズ

モデル メトリクス プログラミング インターフェイスを使用してメトリクス ダッシュボードをカスタマイズします。ダッシュボードをカスタマイズすることで、モデル メトリクスを使用して、サイズ、複雑度、可読性の要件にモデルとコードが準拠しているかどうかを評価できるようになります。次のメトリクス ダッシュボードのカスタマイズを実行できます。

  • モデル アドバイザー構成で、準拠および問題のメトリクス データを取得するための準拠メトリクスを設定します。

  • カスタム メトリクスの追加、ウィジェットの削除、既存のウィジェットの設定を行うことで、ダッシュボードのレイアウトをカスタマイズします。

  • メトリクスのしきい値を指定して、メトリクス データを準拠、警告、および非準拠に分類します。

準拠メトリクスの設定

モデル アドバイザー構成で、または MISRA チェックなどの既存のチェック グループで、メトリクス ダッシュボードおよびメトリクス API を使用して、準拠および問題のメトリクス データを取得します。カスタム構成ファイルの作成方法については、モデル アドバイザー構成エディターを使用したモデル アドバイザーのカスタマイズを参照してください。モデル アドバイザーの設定後、次の手順に従って、準拠および問題のメトリクス データを取得するチェック グループを指定します。

1.モデルを開くには、MATLAB コマンド プロンプトで次のコマンドを入力します。

vdp

2.既定の構成を開いて、対応するslmetric.config.Configurationオブジェクトをベース ワークスペースに保存します。

metricconfig = slmetric.config.Configuration.openDefaultConfiguration();

3.MAAB、高信頼性、および MISRA の各チェック グループに対してモデル アドバイザーの "チェック グループ ID" を指定する cell 配列 values を作成します。

  • maab は、MAAB チェックのサブセットに対応します。

  • hisl_do178 は、高信頼性システム チェックのサブセットに対応します。

  • _SYSTEM_By Task_misra_c は MISRA チェック グループ Modeling Standards for MISRA C:2012"チェック グループ ID" です。

values = {'maab', 'hisl_do178', '_SYSTEM_By Task_misra_c'};

チェックのグループに対してモデル アドバイザーの "チェック グループ ID" を取得するには、モデル アドバイザー構成エディターを開いて、目的のチェックのグループが含まれるフォルダーを選択します。[チェック グループ ID][情報] タブに表示されます。モデル アドバイザー構成エディターの詳細については、モデル アドバイザー構成エディターを使用したモデル アドバイザーのカスタマイズを参照してください。

4.構成を設定するには、cell 配列 valuessetMetricFamilyParameterValues メソッドに渡します。'ModelAdvisorStandard' という文字列は、setMetricFamilyParameterValues メソッドに渡さなければならない標準的な文字列です。

setMetricFamilyParameterValues(metricconfig,'ModelAdvisorStandard', values);

5.メトリクス ダッシュボードのレイアウトの既定の構成 (メトリクス ダッシュボードの出荷時の構成) を開きます。

dashboardconfig = slmetric.dashboard.Configuration.openDefaultConfiguration();

6.slmetric.dashboard.Configurationオブジェクトからslmetric.dashboard.Layoutオブジェクトを取得します。

layout = getDashboardLayout(dashboardconfig);

7.レイアウト オブジェクト内のウィジェット オブジェクトを取得します。

layoutWidget = getWidgets(layout);

8.レイアウトから準拠グループを取得します。

complianceGroup = layoutWidget(3);

slmetric.dashboard.Layout オブジェクトには以下のオブジェクトが含まれています。

  • SystemInfo 型の slmetrics.dashboard.Widget オブジェクトをもつslmetric.dashboard.Containerオブジェクト。以下の図で、赤の番号 1 は、SystemInfo ウィジェットを示します。

  • [サイズ] というタイトルをもつslmetric.dashboard.Groupオブジェクト。

  • [モデリング ガイドラインの準拠] というタイトルをもつ slmetrics.dashboard.Group オブジェクト。

  • [アーキテクチャ] というタイトルをもつ slmetrics.dashboard.Group オブジェクト。

図の中で、赤の番号 1、2、3 および 4 は、配列 layoutWidget 内での順序を示します。

9.モデリング ガイドラインの準拠グループには 2 つのコンテナーが含まれています。1 番目のコンテナーには、[高信頼性] および [MAAB] の準拠チェックにおける問題を示すウィジェットが表示されます。赤の番号 3.1.1、3.1.2 および 3.1.3 は、1 番目のコンテナー内の 3 つのウィジェットの順序を示します。2 番目のコンテナーには、[コード アナライザーの警告] ウィジェットと [診断の警告] ウィジェットが含まれています。

[高信頼性] 準拠ウィジェットを削除します。

complianceContainers = getWidgets(complianceGroup);
complianceContainerWidgets = getWidgets(complianceContainers(1));
complianceContainers(1).removeWidget(complianceContainerWidgets(1));

10.構成された MISRA チェック準拠メトリクスの "メトリクス ID"'mathworks.metrics.ModelAdvisorCheckCompliance._SYSTEM_By Task_misra_c' です。

misraComplianceMetricID = 'mathworks.metrics.ModelAdvisorCheckCompliance._SYSTEM_By Task_misra_c';

構成されたチェック準拠メトリクスの "メトリクス ID" は、<"ファミリ ID">.<モデル アドバイザーの"チェック グループ ID"> の形式になります。

  • モデル アドバイザーの準拠のために構成されたメトリクスは <"ファミリ ID"> mathworks.metrics.ModelAdvisorCheckCompliance を使用します。構成されたチェック準拠メトリクスは、選択されたモデル アドバイザーの "チェック グループ ID" でパスするモデル アドバイザー チェックの割合を計算します。

  • モデル アドバイザーの "チェック グループ ID" である _SYSTEM_By Task_misra_c は、MISRA チェック グループ Modeling Standards for MISRA C:2012"チェック グループ ID" です。

チェックのグループに対してモデル アドバイザーの "チェック グループ ID" を取得するには、モデル アドバイザー構成エディターを開いて、目的のチェックのグループが含まれるフォルダーを選択します。[チェック グループ ID][情報] タブに表示されます。モデル アドバイザー構成エディターの詳細については、モデル アドバイザー構成エディターを使用したモデル アドバイザーのカスタマイズを参照してください。

構成された準拠メトリクスの詳細については、Model Metricsを参照してください。

11.MISRA チェックの準拠メトリクスを可視化するためのカスタム ウィジェットを作成します。

misraWidget = complianceContainers(1).addWidget('Custom', 1);
misraWidget.Title = ('MISRA');
misraWidget.VisualizationType = 'RadialGauge';
misraWidget.setMetricIDs(misraComplianceMetricID);
misraWidget.setWidths(slmetric.dashboard.Width.Medium);

12.現在、棒グラフのウィジェットは、高信頼性および MAAB のチェック グループを可視化します。このウィジェットが MISRA チェック問題と MAAB チェック問題の "メトリクス ID" を指し示すようにします。

misraIssuesMetricID = 'mathworks.metrics.ModelAdvisorCheckIssues._SYSTEM_By Task_misra_c';
maabIssuesMetricID = 'mathworks.metrics.ModelAdvisorCheckIssues.maab';

setMetricIDs(complianceContainerWidgets(3),...
({misraIssuesMetricID,maabIssuesMetricID}));
complianceContainerWidgets(3).Labels = {'MISRA', 'MAAB'};

構成されたチェック準拠メトリクスの "メトリクス ID" は、<"ファミリ ID">.<モデル アドバイザーの"チェック グループ ID"> の形式になります。

  • モデル アドバイザーの準拠問題のために構成されたメトリクスは、<"ファミリ ID"> mathworks.metrics.ModelAdvisorCheckIssues を使用します。構成されたチェック準拠問題メトリクスは、選択されたモデル アドバイザーの "チェック グループ ID" によって報告される問題の数を計算します。

  • モデル アドバイザーの "チェック グループ ID" である _SYSTEM_By Task_misra_c は、MISRA チェック グループ Modeling Standards for MISRA C:2012"チェック グループ ID" です。maab は、MAAB チェックのサブセットに対応する "チェック グループ ID" です。

チェックのグループに対してモデル アドバイザーの "チェック グループ ID" を取得するには、モデル アドバイザー構成エディターを開いて、目的のチェックのグループが含まれるフォルダーを選択します。[チェック グループ ID][情報] タブに表示されます。モデル アドバイザー構成エディターの詳細については、モデル アドバイザー構成エディターを使用したモデル アドバイザーのカスタマイズを参照してください。

構成された準拠メトリクスの詳細については、Model Metricsを参照してください。

13.例のこの時点でメトリクス ダッシュボードを実行して表示するには、MATLAB コマンド ウィンドウにコードの次の行を入力します。save コマンドは API 情報を XML ファイルにシリアル化します。slmetric.config.setActiveConfiguration コマンドおよび slmetric.dashboard.setActiveConfiguration コマンドはアクティブ構成オブジェクトを設定します。

save(metricconfig,'FileName','MetricConfig.xml');
save(dashboardconfig,'Filename','DashboardConfig.xml');
slmetric.config.setActiveConfiguration(fullfile(pwd,'MetricConfig.xml'));
slmetric.dashboard.setActiveConfiguration(fullfile(pwd,'DashboardConfig.xml'));

14.メトリクス ダッシュボードを開くには、MATLAB コマンド ウィンドウに次のコードを入力します。

metricsdashboard vdp

15.[すべてのメトリクス] ボタンをクリックして各メトリクスを実行します。メトリクス ダッシュボードには、高信頼性チェックではなく、MISRA チェックの結果が表示されます。

16.メトリクス ダッシュボードを閉じます。

ダッシュボードへのカスタム メトリクスの追加

非バーチャル ブロック数をカウントするカスタム メトリクスを作成します。このメトリクスをメトリクス ダッシュボードに表示するには、ウィジェットを指定します。それをサイズ グループに追加します。

1.関数 createNewMetricClass を使用して、nonvirtualblockcount という名前の新しいメトリクス クラスを作成します。この関数はファイル nonvirtualblockcount.m を現在の作業フォルダー内に作成します。このファイルには、コンストラクターと空のメトリクス アルゴリズム メソッドが含まれています。この例では、現在のフォルダーが書き込み可能であることを確認してください。

className = 'nonvirtualblockcount';
slmetric.metric.createNewMetricClass(className);

2.メトリクス アルゴリズムを書き込むには、nonvirtualblockcount.m ファイルを開いてメトリクスをそのファイルに追加します。この例では、ファイル nonvirtualblockcount_orig.m に非バーチャル ブロックをカウントするメトリクスを作成するロジックが含まれています。このファイルを nonvirtualblockcount.m にコピーします。

copyfile nonvirtualblockcount_orig.m nonvirtualblockcount.m f

3.この新しいメトリクスをメトリクス リポジトリに登録します。

[id_metric,err_msg] = slmetric.metric.registerMetric(className);

新しい非バーチャル ブロックをカウントするメトリクスにはメトリクス ID nonvirtualblockcount があります。

メトリクス エンジンに利用可能なメトリクスを表示するには、slmetric.metric.getAvailableMetricsを使用します。

availableMetricIDs = slmetric.metric.getAvailableMetrics

4.Simulink ブロックをカウントするメトリクスを表現するウィジェットを削除します。これは、サイズ グループの 1 番目のウィジェットです。サイズ グループは、配列 layoutWidget の 2 番目です。

sizeGroup = layoutWidget(2);
sizeGroupWidgets = sizeGroup.getWidgets();
sizeGroup.removeWidget(sizeGroupWidgets(1));

5.非バーチャル ブロックをカウントするメトリクスを表示するウィジェットを追加します。カスタム ウィジェットの場合、既定の可視化タイプは単一値です。これ以外の可視化タイプを使用する場合、VisualizationType プロパティに別の値を指定してください。

newWidget = sizeGroup.addWidget('Custom', 1);
newWidget.Title = ('Nonvirtual Block Count');
newWidget.setMetricIDs('nonvirtualblockcount');
newWidget.setWidths(slmetric.dashboard.Width.Medium);
newWidget.setHeight(70);

6.グループ内でカスタム ウィジェットと他のウィジェットを区切るラインを表示するかどうかを指定します。次のコマンドは、ウィジェットの右側にラインが表示されることを指定します。

s.top = false;
s.bottom = false;
s.left = false;
s.right = true;
newWidget.setSeparators([s, s, s, s]);

7.例のこの時点でメトリクス ダッシュボードを実行して表示するには、MATLAB コマンド ウィンドウにコードの次の行を入力します。save コマンドは API 情報を XML ファイルにシリアル化します。slmetric.config.setActiveConfiguration コマンドおよび slmetric.dashboard.setActiveConfiguration コマンドはアクティブ構成オブジェクトを設定します。

save(metricconfig,'FileName','MetricConfig.xml');
save(dashboardconfig,'Filename','DashboardConfig.xml');
slmetric.config.setActiveConfiguration(fullfile(pwd,'MetricConfig.xml'));
slmetric.dashboard.setActiveConfiguration(fullfile(pwd,'DashboardConfig.xml'));

8.メトリクス ダッシュボードを開くには、MATLAB コマンド ウィンドウに次のコードを入力します。

metricsdashboard vdp

9.[すべてのメトリクス] ボタンをクリックして各メトリクスを実行します。メトリクス ダッシュボードには、Simulink ブロックをカウントするメトリクスではなく、非バーチャル ブロックをカウントするメトリクスの結果が表示されます。

10.メトリクス ダッシュボードを閉じます。

メトリクスのしきい値の追加

非バーチャル ブロックをカウントするメトリクスと MISRA メトリクスに関して、メトリクスのしきい値を指定します。これらの値を指定することで、メトリクス データを次のように分類してモデルの品質を確認できます。

  • 準拠 — 許容範囲内のメトリクス データ。

  • Warning — 確認が必要なメトリクス データ。

  • 非準拠 — モデルの変更が必要なメトリクス データ。

1.slmetric.config.Configuration オブジェクト、metricconfig 内のslmetric.config.ThresholdConfigurationオブジェクトにアクセスします。対応する slmetric.config.ThresholdConfiguration オブジェクト (TC) をベース ワークスペース内に作成します。

TC = getThresholdConfigurations(metricconfig);

2.2 つのslmetric.config.Thresholdオブジェクトを TC に追加します。各 slmetric.config.Threshold オブジェクトには、準拠とされた既定のslmetric.config.Classificationオブジェクトが含まれています。準拠のメトリクス範囲を指定します。

T1 = addThreshold(TC, misraIssuesMetricID,'AggregatedValue');
C = getClassifications(T1);
C.Range.Start = -inf;
C.Range.End = 0;
C.Range.IncludeStart = 0;
C.Range.IncludeEnd = 1;

T2 = addThreshold(TC,misraComplianceMetricID,'AggregatedValue');
C = getClassifications(T2);
C.Range.Start = 1;
C.Range.End = inf;
C.Range.IncludeStart = 1;
C.Range.IncludeEnd = 0;

3.各 slmetric.config.Threshold オブジェクトについて、警告の範囲を指定します。

C = addClassification(T1,'Warning');
C.Range.Start = 0;
C.Range.End = inf;
C.Range.IncludeStart = 0;
C.Range.IncludeEnd = 1;

C = addClassification(T2,'Warning');
C.Range.Start = -inf;
C.Range.End = 1;
C.Range.IncludeStart = 0;
C.Range.IncludeEnd = 0;

これらのコマンドは、モデルに MISRA チェックの問題があった場合にモデル ステータスを警告として指定します。モデルに MISRA チェックの問題がなければ、モデル ステータスは準拠となります。

4.3 番目の slmetric.config.Threshold オブジェクトを TC に追加します。この slmetric.config.Threshold オブジェクトについて、準拠、警告、および非準拠の範囲を指定します。

T3 = addThreshold(TC,'nonvirtualblockcount', 'AggregatedValue');
C = getClassifications(T3); 
C.Range.Start = -inf;
C.Range.End = 20;
C.Range.IncludeStart = 1;
C.Range.IncludeEnd = 1;

C = addClassification(T3, 'Warning');
C.Range.Start = 20;
C.Range.End = 30;
C.Range.IncludeStart = 0;
C.Range.IncludeEnd = 1;

C = addClassification(T3, 'NonCompliant');
C.Range.Start = 30;
C.Range.End = inf;
C.Range.IncludeStart = 0;
C.Range.IncludeEnd = 1;

これらのコマンドは、準拠範囲を 20 以下として指定します。警告範囲は 20 以上 30 未満です。30 を超えると非準拠範囲となります。

5.構成オブジェクトを保存します。これらのコマンドは API 情報を XML ファイルにシリアル化します。

save(metricconfig,'FileName','MetricConfig.xml');
save(dashboardconfig,'Filename','DashboardConfig.xml');

6.アクティブな構成を設定します。

slmetric.config.setActiveConfiguration(fullfile(pwd, 'MetricConfig.xml'));
slmetric.dashboard.setActiveConfiguration(fullfile(pwd, 'DashboardConfig.xml'));

7.モデルに対し、メトリクス ダッシュボードを開きます。

metricsdashboard vdp

MISRA チェックの準拠に関する問題では、86.1% のチェックがパスしたため、ゲージは黄色です。割合が 100% に満たない場合は警告が生成されます。モデルには MISRA チェックの問題が 3 つ含まれるため、棒グラフにも黄色が表示されています。数がゼロより大きい場合は警告が生成されます。

Nonvirtual Block Count ウィジェットは、非バーチャル ブロックが 11 個であるため、準拠範囲内となります。

8.構成をリセットし、メトリクスの登録を解除するには、MATLAB コマンド ウィンドウにコードの次の行を入力します。

slmetric.metric.unregisterMetric(className);
slmetric.dashboard.setActiveConfiguration('');
slmetric.config.setActiveConfiguration('');

参考

|

関連するトピック