比较模型复杂度和代码复杂度度量
R2026b以后的版本中将会删除度量仪表板、模型度量、slmetric API 以及对应的自定义项。有关详细信息,请参阅Migrating from Metrics Dashboard to Model Design Dashboards。
度量阈值
使用圈复杂度度量来分析系统的复杂度。这些度量通过测量系统中线性无关路径的数量来指示系统的结构复杂度。通过限制系统的圈复杂度,可以使其更具可读性、可维护性和可移植性。您可以同时测量模型以及由模型生成的代码的圈复杂度。请注意,代码与模型之间的差异可能导致不同级别的圈复杂度。要测量模型的圈复杂度,请使用度量仪表板和圈复杂度度量。
代码复杂度阈值
当您通过手写代码来开发算法时,可以通过测量代码的圈复杂度来评估代码的可读性。圈复杂度较高的代码可能更难以理解和维护。为了标准化代码可维护性,您的组织可以选定一个阈值来限制代码的圈复杂度。例如,如果您编写的代码符合HIS 代码复杂度度量 (Polyspace Bug Finder),那么您需要检查代码的圈复杂度是否小于或等于阈值 10。
模型复杂度阈值
当您使用基于模型的设计工作流来对算法进行建模并生成代码时,可以使用模型的圈复杂度度量来评估系统的可读性,而无需测量生成代码的圈复杂度。相比传统手写代码,Simulink® 的图形建模使您能够更好地管理复杂算法。考虑到这一点,模型的默认圈复杂度度量阈值为 30,高于标准的代码复杂度阈值 10。要更改模型度量阈值,请参阅Customize Metrics Dashboard Layout and Functionality。
比较代码和模型复杂度度量结果
模型的圈复杂度可能高于或低于生成代码的圈复杂度。这种差异取决于您的模型以及您的代码生成自定义项。一些会产生不同复杂度测量结果的模式包括:
消除模型所包含的额外逻辑的代码生成优化。这些优化可能会降低代码的复杂度。
模型度量分析未考虑的生成代码中的错误检查。这些错误检查可能增加代码的复杂度。
针对特定目标的生成代码中的附加逻辑。此逻辑可能增加代码的复杂度。
例如,考虑模型 simulinkCruiseErrorAndStandardsExample。打开模型:
打开工程。
openExample("shared_vnv/CruiseControlVerificationProjectExample"); pr = openProject("SimulinkVerificationCruise");
从工程中打开
models文件夹并打开simulinkCruiseErrorAndStandardsExample。
该模型包含 Compute target speed 图。要使用 Polyspace® 为该图生成代码并进行分析,请参阅分析代码并执行软件在环测试。

Polyspace 为代码生成的报告包含代码度量,例如圈复杂度。为该图生成的单步函数的圈复杂度为 20。
要测量模型的圈复杂度,请使用度量仪表板:
打开度量仪表板。在 App 库中,点击度量仪表板。
点击所有度量。
要查看详细的圈复杂度结果,请点击模型复杂度小组件。
模型中图的圈复杂度为 30。对于此图,代码生成器通过合并逻辑来优化代码,因此生成代码的圈复杂度低于模型中该图的圈复杂度。在其他情况下,模型的圈复杂度可能低于其生成代码的圈复杂度。在维护用于代码生成的模型时,请使用模型的圈复杂度来衡量系统的复杂度。