主要内容

分析代码并测试软件在循环

代码分析和测试软件在环概述

您可以分析代码以检测错误、检查标准遵从性,并评估长度和圈复杂度等关键指标。对于手写代码,您通常使用静态代码分析检查运行时错误,并运行测试用例,根据需求评估代码并评估代码覆盖率。根据结果,可以细化代码并添加测试。

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

代码分析和软件在循环测试的工作流程

分析代码的缺陷、度量和MISRA - C: 2012

这个工作流描述了如何检查您的模型是否产生MISRA®C:2012兼容代码,以及如何检查生成的代码的代码度量和缺陷。为了从您的模型中生成更多符合MISRA的代码,您可以使用代码生成和model Advisor。要检查代码是否符合MISRA,可以使用Polyspace®MISRA C:2012检查器和报告生成功能。对于本例,您将使用模型万博1manbetxsimulinkCruiseErrorAndStandardsExample.打开模型:

  1. 打开项目。

    Path = fullfile(matlabroot,'toolbox','shared','examples',…“验证”、“src”,“巡航”)运行(fullfile(路径,slVerificationCruiseStart))

  2. 从项目中打开模型万博1manbetxsimulinkCruiseErrorAndStandardsExample

运行代码生成器检查

在从您的模型生成代码之前,使用代码生成顾问检查您的模型,以便它生成更符合MISRA C和更兼容Polyspace的代码。

  1. 右键单击计算目标速度并选择C / c++代码>代码生成顾问

  2. 选择“代码生成顾问”文件夹。在右侧窗格中,移动Polyspace选定目标-优先级.的MISRA C:2012指南目标已经选定。

    “代码生成目标”对话框

  3. 点击运行选定检查

    代码生成顾问检查模型是否包含不推荐用于MISRA C:2012遵从性和Polyspace代码分析的块或配置设置。对于这个模型,不兼容块的检查通过了,但是一些配置设置与MISRA遵从性和Polyspace检查不兼容。

    代码生成顾问结果

  4. 单击未通过的检查。通过选择接受参数更改修改参数

  5. 通过选择重新运行检查运行此检查

运行Model Advisor检查

在您从模型生成代码之前,使用model Advisor检查您的模型是否符合MISRA C和Polyspace。这个例子向您展示了如何在生成代码之前使用Model Advisor检查您的模型。

  1. 在“代码生成顾问”窗口的底部,选择模型的顾问

  2. 按照任务文件夹,选择MISRA C:2012建模标准顾问检查。

  3. 点击运行检查并回顾结果。

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

生成和分析代码

在您完成模型遵从性检查之后,您可以生成代码。使用Polyspace,您可以检查代码是否符合MISRA C:2012,并生成报告以证明符合MISRA C:2012。

  1. 在Simuli万博1manbetxnk中®编辑器,右键单击计算目标速度并选择C / c++代码>构建这个子系统

  2. 使用可调参数的默认设置并选择构建

  3. 代码生成后,在Simulink Editor中,右键单击万博1manbetx计算目标速度并选择Polyspace>选项

  4. 点击配置在Polyspace配置窗口中选择更高级的Polyspace分析选项。

    Polyspace配置对话框

  5. 在左侧窗格中,单击编码标准和代码度量,然后选择计算代码度量为生成的代码启用代码度量计算。

  6. 保存并关闭Polyspace配置窗口。

  7. 从您的模型中,右键单击计算目标速度并选择Polyspace>验证>为所选子系统生成的代码

    Polyspace Bug Finder™分析MISRA检查子集的生成代码。你可以在MATLAB中看到分析的进展®命令窗口。分析完成后,Polyspace环境将打开。

审查结果

Polyspace环境向您显示静态代码分析的结果。

  1. 展开规则8.7的树并单击不同的结果。

    规则8.7指出,如果函数或对象是局部的,函数和对象不应该是全局的。当您单击8.7中的违规项时,您可以看到这些结果引用了其他组件也使用的变量,例如CruiseOnOff.您可以注释您的代码或模型来证明每个结果。因为这个模型是一个较大程序中的单元,所以您还可以更改分析的配置,以只检查MISRA规则的一个子集。

    “Polyspace Bug查找器”对话框

  2. 在您的模型中,右键单击计算目标速度并选择Polyspace>选项

  3. 设置设置从选项项目配置在Polyspace配置中选择MISRA规则的子集。

  4. 点击配置

  5. 在Polyspace窗口的左侧窗格中,单击编码标准和代码度量.然后选择查看MISRA C:2012从下拉列表中选择single-unit-rules.现在Polyspace只检查适用于单个单元的MISRA C:2012规则。

  6. 保存并关闭Polyspace配置窗口。

  7. 使用新配置重新运行分析。

    Polyspace之前显示的规则是由模型本身分析而发现的。当您将Polyspace检查的规则限制为单个单元子集时,Polyspace只发现了两个违规项。

    代码覆盖率分析仪表板

当您将该模型与其父模型集成时,您可以添加MISRA C:2012规则的其余部分。

生成报告

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

  1. 如果它们还没有打开,请在Polyspace环境中打开结果。

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

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

  4. 点击运行报告

    报告保存在与结果相同的文件夹中。

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

使用软件在环测试根据模型测试代码

您先前通过运行基于这些需求的测试用例来展示模型功能满足其需求。现在在生成的代码上运行相同的测试用例,以显示代码产生了相同的结果并满足了需求。然后将代码覆盖率与模型覆盖率进行比较,以查看测试执行生成代码的程度。

  1. 在MATLAB中,在项目窗口中,打开测试文件夹,打开SILTests.mldatx.该文件在Test Manager中打开。

  2. 检查测试用例。在测试浏览器窗格,导航到SIL等价性测试用例.的等价测试用例运行两个模拟万博1manbetxsimulinkCruiseErrorAndStandardsExample使用测试工具建模。

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

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

    等效性测试记录了一个输出信号,并比较了模拟的结果。测试用例还为两个模拟收集覆盖度量。

  3. 运行等效性测试。选择测试用例并单击运行

  4. 在Test Manager中检查结果。在结果和工件窗格中,选择SIL等价性测试用例看看测试结果。测试用例通过了,结果表明代码产生的结果与该测试用例的模型相同。

    测试管理器显示通过的测试用例、模型和代码覆盖结果。

  5. 扩大覆盖率结果部分结果。覆盖度量显示了测试用例执行模型和代码的程度。当您运行多个测试用例时,您可以在整个运行的结果中查看聚合的覆盖率度量。使用覆盖率结果添加测试并满足覆盖率需求,如执行功能测试并分析测试覆盖率

您还可以通过运行处理器在循环(PIL)模拟在目标硬件上测试生成的代码。通过向您的测试用例中添加PIL模拟,您可以将来自您的模型的测试结果和覆盖率结果与在目标硬件上运行时生成的代码的结果进行比较。有关更多信息,请参见通过软件在环和处理器在环执行的代码验证(嵌入式编码)

相关的话题