以编程方式收集模型可维护性度量
本示例展示了如何收集模型可维护性仪表板中使用的度量数据,生成报告,并使用该报告来评估模型设计工件。
如果工程中的模型很大、很复杂或难以阅读,则该设计可能难以测试和维护。使用度量结果来确定是否要重构设计以识别更小的可测试单元,或者重构模型以提高可读性。
收集和访问度量结果
打开工程
打开一个包含要分析的模型的工程。对于此示例,在 MATLAB® 命令行窗口中输入:
openProject("cc_CruiseControl");有关如何为您的工件创建工程的信息,请参阅 创建工程以使用模型设计和模型测试仪表板。
收集度量结果
创建一个 metric.Engine 对象。您可以使用 metric.Engine 对象来收集当前工程的度量数据。
metric_engine = metric.Engine();
创建用于模型可维护性的度量标识符数组。
maintainabilityMetrics = getAvailableMetricIds(metric_engine,... App="DashboardApp",... Dashboard="ModelMaintainability");
模型可维护性仪表板可以收集工程中 Units 和 组件 的度量结果。要控制仪表板将哪些对象分类为单元或组件,请参阅将模型按层级结构分类为组件或单元。您可以收集工程中每个单元和组件的结果,也可以一次收集一个单元或组件的结果。
例如,假设您想收集单元 cc_ControlMode 的结果。创建一个数组,该数组标识工程中模型文件的路径和模型的名称。
unit = [fullfile(pwd,"models","cc_ControlMode.slx"),"cc_ControlMode"];
使用 execute 函数收集单元 cc_ControlMode 的可维护性度量结果。
execute(metric_engine,maintainabilityMetrics,ArtifactScope=unit);
访问和查看度量结果
使用 getMetrics 函数访问度量结果。在这个示例中,存储度量 slcomp.SimulinkSignalLines 和单位 cc_ControlMode 的结果。
results_SignalLines = getMetrics(metric_engine,"slcomp.SimulinkSignalLines",... ArtifactScope=unit);
模型可维护性度量 slcomp.SimulinkSignalLines 决定模型每一层中 Simulink® 信号线的数量。有关模型可维护性度量的更多信息,请参阅 模型可维护性度量。
getMetrics 函数返回一个 metric.Result 对象,其中包含指定度量的度量结果。
使用 disp 函数显示模型层和信号线数量,它们分别位于 metric.Result 对象的 Artifacts 和 Value 属性中。结果在您的计算机上可能以不同的顺序显示。
for n=1:length(results_SignalLines) disp([' Model Layer: ', results_SignalLines(n).Artifacts.Name]) disp(['Signal Lines: ', num2str(results_SignalLines(n).Value)]) disp(newline); end
Model Layer: Transitions_From_DISABLED
Signal Lines: 11
Model Layer: Target_Speed_Calculator
Signal Lines: 18
Model Layer: Switch Case Action Subsystem
Signal Lines: 1
Model Layer: Switch Case Action Subsystem
Signal Lines: 23
Model Layer: Control_Mode_StateMachine
Signal Lines: 60
Model Layer: Transitions_From_THROTTLE_OVERRIDE
Signal Lines: 14
Model Layer: Switch Case Action Subsystem2
Signal Lines: 1
Model Layer: cc_ControlMode
Signal Lines: 14
Model Layer: wasActiveOnce
Signal Lines: 12
Model Layer: cc_ControlMode_DisableTransition
Signal Lines: 10
Model Layer: Transitions_From_ACTIVE
Signal Lines: 14
Model Layer: Switch Case Action Subsystem1
Signal Lines: 1
Model Layer: Switch Case Action Subsystem2
Signal Lines: 1
Model Layer: cc_ControlMode_DeactivateTransition
Signal Lines: 10
Model Layer: Switch Case Action Subsystem4
Signal Lines: 1
Model Layer: Switch Case Action Subsystem3
Signal Lines: 1
Model Layer: check_speed_range
Signal Lines: 6
Model Layer: Switch Case Action Subsystem1
Signal Lines: 1
Model Layer: isFirstStep
Signal Lines: 2
Model Layer: Transitions_From_ENABLED
Signal Lines: 20
代码输出显示模型层 Control_Mode_StateMachine 包含 60 Simulink 信号线。根据这些结果,考虑重新构建该模型层以提高可读性。
生成报告
生成一个报告文件,其中包含在 metric_engine 中收集的模型可维护性结果。默认情况下,报告文件类型为 PDF。在本例中,请将报告文件类型指定为 HTML。
generateReport(metric_engine,Dashboard="ModelMaintainability",Type="html-file");
将度量结果保存到报告文件中,以便无需打开工程或仪表板即可访问这些结果。
或者,您可以打开模型可维护性仪表板来查看结果并探索工件。要通过编程方式访问模型可维护性仪表板,请输入:
modelDesignDashboard
另请参阅
模型可维护性度量 | metric.Engine | execute | generateReport | getAvailableMetricIds | updateArtifacts