Main Content

プログラムによるモデル メトリクスの収集

モデル メトリクス API を使用して、モデルのアーキテクチャ、複雑度、可読性を評価するのに役立つモデル メトリクスをプログラムによって収集できます。これらのメトリクスの結果は、業界標準やガイドラインに準拠しているかどうかを検証するのに役立ちます。

この例では、モデル メトリクス API を使用して、モデルのサブシステムおよびブロックのカウントのメトリクスをプログラムにより収集する方法を説明します。モデルのメトリクスの収集後、結果にアクセスしてファイルにエクスポートできます。

モデル例

vdp モデルを開きます。

model = 'vdp';
open_system(model);

メトリクスの収集

モデルのメトリクス データを収集するには、slmetric.Engine オブジェクトを作成して execute を呼び出します。

metric_engine = slmetric.Engine();
Warning: The Metrics Dashboard and slmetric.Engine API will be removed in a future release.
For size, architecture, and complexity metrics, use the Model Maintainability Dashboard and metric.Engine API instead.
The Model Maintainability Dashboard and metric.Engine API can identify outdated metric results, analyze dependencies between files, and aggregate metrics across software units and components.
For more information, see <a href="matlab:helpview([docroot '/slcheck/collect-model-metric-data-1.html'])">Collect Model and Testing Metrics</a>
setAnalysisRoot(metric_engine,'Root','vdp','RootType','Model');
execute(metric_engine);
Updating Model Advisor cache...
Model Advisor cache updated. For new customizations, to update the cache, use the Advisor.Manager.refresh_customizations method.

結果へのアクセス

getMetrics メソッドを使用して、収集するメトリクスを指定します。この例では、vdp モデルのブロックおよびサブシステムのカウントのメトリクスを指定します。getMetrics は、slmetric.metric.ResultCollection オブジェクトの配列を返します。

res_col = getMetrics(metric_engine,{'mathworks.metrics.SimulinkBlockCount',...
'mathworks.metrics.SubSystemCount'});

結果の保存と表示

metricData という cell 配列を作成し、メトリクス結果の MetricID プロパティ、ComponentPath プロパティおよび Value プロパティを格納します。MetricID プロパティはメトリクスの識別子です。ComponentPath プロパティはメトリクスが計算されたコンポーネントへのパスです。また、Value プロパティはメトリクス値です。結果を表示するループを記述します。

metricData ={'MetricID','ComponentPath','Value'};
cnt = 1;
for n=1:length(res_col)
    if res_col(n).Status == 0
        results = res_col(n).Results;

        for m=1:length(results)
            disp(['MetricID: ',results(m).MetricID]);
            disp(['  ComponentPath: ',results(m).ComponentPath]);
            disp(['  Value: ',num2str(results(m).Value)]);
            metricData{cnt+1,1} = results(m).MetricID;
            metricData{cnt+1,2} = results(m).ComponentPath;
            metricData{cnt+1,3} = results(m).Value;
            cnt = cnt + 1;
        end
    else
        disp(['No results for:',res_col(n).MetricID]);
    end
    disp(' ');
end
MetricID: mathworks.metrics.SimulinkBlockCount
  ComponentPath: vdp
  Value: 12
 
MetricID: mathworks.metrics.SubSystemCount
  ComponentPath: vdp
  Value: 0
 

結果のエクスポート

MetricIDComponentPath および Value をスプレッドシートにエクスポートするには、writetable を使用して metricData の内容を MySpreadsheet.xlsx に書き込みます。

filename = 'MySpreadsheet.xlsx';
T=table(metricData);
writetable(T,filename);

メトリクス結果を XML ファイルにエクスポートするには、exportMetrics メソッドを使用します。各メトリクス結果について、XML ファイルには ComponentIDComponentPathMetricIDValueAggregatedValue および Measure が含まれます。

filename='MyMetricResults.xml';
exportMetrics(metric_engine,filename)

vdp モデルを閉じます。

bdclose(model);

制限

メトリクス データを収集するときに、そのデータはシミュレーション キャッシュ フォルダー内のデータベース ファイル Metrics.db に格納されます。あるプラットフォームのメトリクス データを収集し、データベース ファイルを別のプラットフォームに移行し、引き続きそのデータベース ファイルに追加のメトリクス データを収集することはできません。たとえば、Windows マシンでメトリクス データを収集してからデータベース ファイルを Linux マシンに移行する場合、追加のメトリクス データをそのデータベース ファイルに収集および格納することはできません。ただし、そのデータをメトリクス ダッシュボードに表示することはできます。

参考

| |

関連するトピック