主要内容

分析代码并执行软件在环测试

您可以分析代码以检测错误,检查标准合规性,并计算代码长度和圈复杂度等关键度量。当您创建自己的代码时,通常会使用静态代码分析来检查运行时错误,并运行测试用例来评估代码是否符合需求以及计算代码覆盖率。您可以根据结果来改进代码并添加测试。

在此示例中,您将生成代码,并通过使用相同的测试用例和基线结果来证明执行代码会产生与模型等效的结果。然后将代码覆盖率与模型覆盖率进行比较。您可根据测试结果添加测试并修改模型以重新生成代码。

The code analysis and software-in-the-loop testing process. You generate code, analyze your code, perform testing to verify equivalence with your model. Then, you analyze code coverage and report result if they meet your requirements. Otherwise, you refine your code, tests and model.

分析代码缺陷、度量与 MISRA C:2012 合规性

首先,检查模型生成的代码是否符合 MISRA™ C:2012 标准,并分析生成的代码的代码度量和缺陷。要生成符合 MISRA 标准的代码,您可以使用代码生成顾问和模型顾问。要检查代码是否符合 MISRA 标准,您可以使用 Polyspace® MISRA C:2012 检查器。

  1. 打开示例工程。

    openExample("shared_vnv/CruiseControlVerificationProjectExample");
    pr = openProject("SimulinkVerificationCruise");

  2. 打开 simulinkCruiseErrorAndStandardsExample 模型。

    open_system("simulinkCruiseErrorAndStandardsExample");

    The simulinkCruiseErrorAndStandardsExample model has 5 inputs and 2 outputs, and includes an instance of the computeTargetSpeed model.

  3. simulinkCruiseErrorAndStandardsExample 模型包含 computeTargetSpeed 模型的实例。打开 computeTargetSpeed 模型。

    open_system("computeTargetSpeed");

运行代码生成器检查

使用代码生成顾问检查模型。配置代码生成参数,以生成更符合 MISRA C 标准且与 Polyspace 兼容性更佳的代码。

  1. 打开 Embedded Coder®。在 App 选项卡中,点击 Embedded Coder

  2. C 代码选项卡中,点击 C/C++ 代码顾问

  3. 在左窗格中,展开代码生成顾问文件夹。在右窗格中的可用目标下,选择 Polyspace,然后点击向右箭头。MISRA C:2023 规范目标已被选定。MISRA C:2023 规范与 MISRA C:2012 保持兼容。

    Code Generation Objectives dialog box

  4. 点击运行所选检查

    代码生成顾问会检查模型是否包含不建议用于 MISRA C:2012 合规性检查和 Polyspace 代码分析的模块或配置设置。对于此模型,模块兼容性检查通过了,但一些配置设置与 MISRA 合规性和 Polyspace 检查不兼容。

    Code Generation Advisor results

  5. 点击对照代码生成目标检查模型配置设置。点击修改参数接受参数更改。

  6. 要重新运行检查,请点击运行此检查

  7. 点击修改参数接受其他参数更改,并重新运行失败的检查。

运行模型顾问检查

在从模型生成代码之前,请使用模型顾问来检查您的模型是否符合 MISRA C 标准和 Polyspace 标准。

  1. 在“代码生成顾问”窗口底部,点击模型顾问

  2. 在模型顾问的按任务文件夹下,选择 MISRA C:2023 建模标准。清除高完整性系统选项。

  3. 点击运行并查看结果。

  4. 如果任何任务失败,请进行建议的修改并重新运行检查,直到 MISRA 建模规范检查通过为止。

生成和分析代码

检查模型是否合规后,即可生成代码。生成代码后,您可以使用 Polyspace 检查代码是否符合 MISRA C:2012 标准,并生成报告以证明它符合 MISRA C:2012 标准。

  1. 在 Simulink® 模型中,点击生成代码

  2. 生成代码后,在 Simulink 编辑器中,右键点击模型并指向选择 App。然后,点击 Polyspace Code Verifier 按钮 polyspace code verifier button

  3. Polyspace 部分中,点击设置 > 工程设置

  4. 在 Polyspace 平台窗口的配置选项卡中,选择静态分析

  5. 在左窗格中,选择缺陷和编码标准

  6. 选择使用自定义检查项文件

  7. 在“检查项选择”对话框的左窗格中,选择 MISRA C:2012。然后,选择强制必需。点击保存更改,输入文件名,然后点击保存

  8. 选择使用符合 MISRA C:2012 的生成代码要求

  9. 保存并关闭 Polyspace 窗口。

    Polyspace Defects and Coding Standards pane

  10. 在模型中右键点击,然后在 Polyspace Code Prover 部分选择在模型代码中查找 Bug,并点击“对此模型运行 Polyspace 分析”图标。

    Polyspace Bug Finder™ 会分析生成的代码,以进行部分 MISRA 检查。您可以在 MATLAB® 命令行窗口中查看分析进度。分析完成后,Polyspace 环境将会打开。

查看结果

Polyspace 环境显示静态代码分析的结果。例如,滚动浏览结果列表,选择检查规则 8.7 的结果。规则 8.7 规定,如果函数和对象是本地的,则不应将其定义为全局函数或全局对象。这些结果引用了其他组件也在使用的变量,例如 CruiseOnOff。您可以为代码或模型添加注解,以对每个结果进行申述。

Polyspace Bug Finder dialog box

要配置分析以仅检查 MISRA 规则的子集,请执行以下操作:

  1. 在您的模型中,点击设置 > Polyspace 设置。将设置来源设置为 Project configuration

  2. 点击设置 > 工程设置

  3. 在 Polyspace 平台中,在配置选项卡中选择静态分析

  4. 在左窗格中,选择缺陷和编码标准

  5. 在“检查项选择”对话框的左窗格中,选择 MISRA C:2012。清除强制必需,并选择单一单元。点击保存更改。现在,Polyspace 只检查适用于单一单元的 MISRA C:2012 规则。

  6. 使用新配置重新运行分析。查看单一单元检查的结果。

生成报告

要证明符合 MISRA C:2012 标准并报告生成的代码度量,您必须导出结果。如果您要在每次运行分析时都生成报告,请参阅生成报告 (Polyspace Bug Finder)

  1. 如果您的结果尚未打开,请在 Polyspace 环境中将其打开。

  2. 从工具栏中选择报告 > 运行报告

  3. 选择 BugFinderSummary 作为报告类型。

  4. 点击运行报告。报告与您的结果保存在同一文件夹中。

  5. 要打开报告,请选择报告 > 打开报告

使用软件在环测试针对模型测试代码

接下来,对生成的代码运行相同的测试用例,以证明该代码产生的结果与原始模型等效,并满足需求。然后将代码覆盖率与模型覆盖率进行比较,以查看测试对生成的代码的执行程度。

  1. 在 MATLAB 的工程窗格的 tests 文件夹中,打开 SILTests.mldatx。该文件在测试管理器中打开。

  2. 查看测试用例。在测试浏览器窗格中,点击 SIL Equivalence Test Case。此等效性测试用例使用测试框架对 simulinkCruiseErrorAndStandardsExample 模型运行两次仿真:

    • 仿真 1 是正常模式下的模型仿真。

    • 仿真 2 是软件在环 (SIL) 仿真。对于 SIL 仿真,测试用例运行从模型生成的代码而不是运行模型。

    等效性测试记录一个输出信号,并将结果与仿真结果进行比较。测试用例还会收集两次仿真的覆盖率测量值。

  3. 要运行等效性测试,请选择测试用例并点击运行

  4. 在测试管理器中查看结果。在结果和工件窗格中,选择 SIL Equivalence Test Case。测试用例通过,并且对于此测试用例,代码产生的结果与模型相同。

    Test Manager showing passed test cases and model and code coverage results.

  5. 在右窗格中,展开覆盖率结果部分。覆盖率测量值显示了测试用例对模型和代码的执行程度。

运行多个测试用例时,您可以在整个运行结果中查看聚合的覆盖率测量值。可使用覆盖率结果添加测试并满足覆盖率需求,如执行功能测试并分析测试覆盖率 (Simulink Check)所示。

您还可以通过运行处理器在环 (PIL) 仿真,在目标硬件上测试生成的代码。通过向测试用例添加 PIL 仿真,您可以将模型的测试结果和覆盖率结果与生成的代码在目标硬件上运行时产生的结果进行比较。有关详细信息,请参阅Code Verification Through Software-in-the-Loop and Processor-in-the-Loop Execution (Embedded Coder)

另请参阅

主题