主要内容

本页采用了机器翻译。点击此处可查看英文原文。

自定义度量盘布局和功能

使用模型度量编程接口自定义度量仪表板。自定义仪表板可以扩展您使用模型度量来评估您的模型和代码是否符合大小、复杂性和可读性需求的能力。您可以对度量仪表板进行以下自定义设置:

  • 配置合规性度量,以获取模型顾问配置的合规性和问题度量数据。

  • 通过添加自定义度量、删除小组件和配置现有小组件来自定义仪表板布局。

  • 通过指定度量阈值,将度量数据分类为合规、警告和不合规。

配置合规性度量

使用度量仪表板和度量 API 获取模型顾问配置或现有检查组(例如 MISRA™ 检查)的合规性和问题度量数据。有关如何创建自定义配置文件的信息,请参阅 使用模型顾问配置编辑器来自定义模型顾问。设置模型顾问配置后,按照以下步骤指定要获取合规性和问题度量数据的检查组:

1.要打开模型,请在 MATLAB® 命令提示符下输入以下命令:

vdp

2.打开默认配置,并将相应的 slmetric.config.Configuration 对象保存到基础工作区。

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

3.创建一个元胞数组 values,指定 MAAB、高完整性和 MISRA 检查组的模型顾问检查组 ID

  • 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.要设置配置,请将 values 元胞数组传递给 setMetricFamilyParameterValues 方法。'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 对象包含以下对象:

在图中,红色数字 1、2、3 和 4 表示它们在 layoutWidget 数组中的顺序。

9.建模规范合规组包含两个容器。顶部容器包含高完整性MAAB 合规性及检查问题小组件。红色数字 3.1.1、3.1.2 和 3.1.3 表示第一个容器中三个小组件的顺序。第二个容器包含代码分析器警告诊断警告小组件。

删除高完整性合规性小组件。

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 显示在信息选项卡中。有关模型顾问配置编辑器的更多信息,请参阅 使用模型顾问配置编辑器来自定义模型顾问

有关已配置合规性度量的更多信息,请参阅 模型度量

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检查组 IDmaab 是 MAAB 检查子集对应的检查组 ID

要获取一组检查项的模型顾问检查组 ID,请打开模型顾问配置编辑器,然后选择包含所需检查项组的文件夹。检查组 ID 显示在信息选项卡中。有关模型顾问配置编辑器的更多信息,请参阅 使用模型顾问配置编辑器来自定义模型顾问

有关已配置合规性度量的更多信息,请参阅 模型度量

13.在本示例中,要运行和查看度量仪表板,请在 MATLAB 命令行窗口中输入以下代码行。save 命令将 API 信息序列化为 XML 文件。slmetric.config.setActiveConfigurationslmetric.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® 模块计数度量的小组件。该组件是该尺寸组中的第一个组件。尺寸组在 layoutWidget 数组中排名第二。

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.setActiveConfigurationslmetric.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 度量,指定度量阈值。指定这些值后,您可以通过按如下方式对度量数据进行分类来评估模型的质量:

  • Compliant - 在可接受范围内的度量数据。

  • Warning - 需要审核的度量数据。

  • Noncompliant - 需要您修改模型的度量数据。

1.访问 slmetric.config.Configuration 对象 metricconfig 中的 slmetric.config.ThresholdConfiguration 对象。在基础工作区中创建相应的 slmetric.config.ThresholdConfiguration 对象 (TC)。

TC = getThresholdConfigurations(metricconfig);

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.向 TC 添加第三个 slmetric.config.Threshold 对象。为该 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)。不合规范围大于 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
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/ug/when-and-how-to-migrate-to-model-maintainability-dashboard.html'])">Migrating from Metrics Dashboard to Model Maintainability Dashboard</a>

对于 MISRA 检查合规性问题,仪表盘显示为黄色,因为只有 77.8% 的检查通过。低于 100% 的百分比会发出警告。条形图还显示黄色,因为该模型包含三个 MISRA 检查问题。大于零的数字会生成警告。

非虚拟模块计数小组件在合规范围内,因为有 11 个非虚拟块。

8.要重置配置并取消注册度量,请在 MATLAB 命令行窗口中输入以下代码行。

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

另请参阅

|

主题