プログラムによるモデル メトリクスの収集
モデル メトリクス 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
結果のエクスポート
MetricID
、ComponentPath
および Value
をスプレッドシートにエクスポートするには、writetable
を使用して metricData
の内容を MySpreadsheet.xlsx
に書き込みます。
filename = 'MySpreadsheet.xlsx';
T=table(metricData);
writetable(T,filename);
メトリクス結果を XML ファイルにエクスポートするには、exportMetrics
メソッドを使用します。各メトリクス結果について、XML ファイルには ComponentID
、ComponentPath
、MetricID
、Value
、AggregatedValue
および Measure
が含まれます。
filename='MyMetricResults.xml';
exportMetrics(metric_engine,filename)
vdp
モデルを閉じます。
bdclose(model);
制限
メトリクス データを収集するときに、そのデータはシミュレーション キャッシュ フォルダー内のデータベース ファイル Metrics.db
に格納されます。あるプラットフォームのメトリクス データを収集し、データベース ファイルを別のプラットフォームに移行し、引き続きそのデータベース ファイルに追加のメトリクス データを収集することはできません。たとえば、Windows マシンでメトリクス データを収集してからデータベース ファイルを Linux マシンに移行する場合、追加のメトリクス データをそのデータベース ファイルに収集および格納することはできません。ただし、そのデータをメトリクス ダッシュボードに表示することはできます。
参考
slmetric.Engine
| slmetric.metric.Result
| slmetric.metric.ResultCollection