比较模型复杂度和代码复杂度度量
注意
如果您目前仅使用度量仪表板来分析模型大小、架构和复杂性,则可以改用模型维护仪表板。有关信息,请参阅从度量盘迁移到模型可维护性仪表盘。
使用圈复杂度度量分析系统的复杂度。这些度量通过测量系统中线性无关路径的数量来表示系统的结构复杂性。通过限制系统的圈复杂度,可以使其更易读、更易维护、更易移植。您可以测量模型和由模型生成的代码的圈复杂度。请注意,代码和模型之间的差异可能会导致不同的圈复杂度级别。要衡量模型的圈复杂度,请使用度量仪表板和 圈复杂度度量。
度量阈值
代码复杂度阈值
当您手写代码开发算法时,您可以通过测量代码的圈复杂度来评估代码的可读性。具有较高圈复杂度的代码可能更难理解和维护。为了规范代码的可维护性,您的组织可以选择一个阈值来限制代码的圈复杂度。例如,如果您编写的代码符合 HIS 代码复杂度度量 (Polyspace Bug Finder),则检查代码的圈复杂度是否等于或低于阈值 10。
模型复杂度阈值
当您使用基于模型的设计工作流程来模型算法并生成代码时,您可以使用模型的圈复杂度度量来评估系统的可读性,而不是测量生成的代码的圈复杂度。Simulink® 的图形化建模使您能够比传统的手工代码更好地管理复杂的算法。为了解决这个问题,该模型的默认圈复杂度度量阈值为 30,高于标准代码复杂度阈值 10。要更改模型度量阈值,请参阅 自定义度量盘布局和功能。
比较代码和模型复杂度度量结果
模型的圈复杂度可能高于或低于生成代码的圈复杂度。此差异取决于您的模型和代码生成自定义设置。一些会产生不同复杂度测量结果的模式包括:
代码生成优化,可以消除模型中包含的额外逻辑。这些优化可以降低代码的复杂度。
模型度量分析未考虑的生成代码中的错误检查。这些错误检查会增加代码的复杂性。
针对特定目标生成的代码中添加了额外的逻辑。这种逻辑会增加代码的复杂性。
例如,考虑模型 simulinkCruiseErrorAndStandardsExample。打开模型:
打开工程。
openExample("shared_vnv/CruiseControlVerificationProjectExample"); pr = openProject("SimulinkVerificationCruise");
从工程中,打开
models文件夹,然后打开simulinkCruiseErrorAndStandardsExample文件夹。
该模型包含计算目标速度的图。要使用 Polyspace® 生成和分析图的代码,请参阅 分析代码并执行软件在环测试。

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