您可以分析代码以检测错误、检查标准符合性,并评估关键指标,如长度和圈复杂度。对于手写代码,通常使用静态代码分析检查运行时错误,并运行测试用例,根据需求评估代码并评估代码覆盖率。根据结果,您可以优化代码并添加测试。
在本例中,您将生成代码并演示代码执行通过使用相同的测试用例和基线结果生成与模型等效的结果。然后比较代码覆盖率和模型覆盖率。根据测试结果,添加测试并修改模型以重新生成代码。
此工作流描述如何检查模型是否生成MISRA®C:2012兼容代码以及如何检查生成的代码的代码度量和缺陷。要从模型中生成更多符合MISRA的代码,可以使用代码生成和模型顾问。要检查代码是否符合MISRA,请使用Polyspace®MISRA C:2012检查程序和报告生成功能。对于本例,您将使用模型金宝appSimulinkCruiseError和StandardsExample
.打开模型:
打开项目。
路径= fullfile (matlabroot,“工具箱”,“共享”,“例子”,…“验证”、“src”,“巡航”)运行(fullfile(路径,slVerificationCruiseStart))
从项目中,打开模型金宝appSimulinkCruiseError和StandardsExample
.
在您从模型生成代码之前,请使用代码生成顾问检查您的模型,以便它生成更符合MISRA C和更兼容Polyspace的代码。
右击计算目标速度选择C/C++代码>代码生成的顾问.
选择代码生成顾问文件夹。在右侧窗格中,移动多空间
到选定目标-按优先顺序排列.的MISRA C:2012指南
目标已选定。
点击运行选定的检查.
代码生成顾问检查模型是否包含不建议用于MISRA C:2012合规性和Polyspace代码分析的块或配置设置。对于此模型,不兼容块的检查通过,但某些配置设置与MISRA合规性和Polyspace检查不兼容。
单击未通过的检查。通过选择接受参数更改修改参数.
通过选择重新运行检查检查一下.
从模型生成代码之前,请使用模型顾问检查模型是否符合MISRA C和Polyspace。此示例演示如何使用ModelAdvisor在生成代码之前检查模型。
在“代码生成顾问”窗口的底部,选择模特顾问.
在按任务文件夹中,选择MISRA C的建模标准:2012顾问检查。
点击运行选定的检查并检查结果。
如果任何任务失败,进行建议的修改并重新运行检查,直到MISRA建模指南通过。
完成模型符合性检查后,可以生成代码。使用Polyspace,您可以检查代码是否符合MISRA C:2012,并生成报告以证明符合MISRA C:2012。
在Simuli金宝appnk中®编辑器,右键单击计算目标速度选择C/C++代码>构建这个子系统.
使用可调参数的默认设置,然后选择建筑.
生成代码后,在Simulink编辑器中,单击鼠标右键金宝app计算目标速度选择多空间>选择权.
点击配置在“多边形空间配置”窗口中选择更高级的多边形空间分析选项。
在左侧窗格中,单击编码标准和编码度量,然后选择计算代码度量为生成的代码启用代码度量计算。
保存并关闭Polyspace配置窗口。
从模型中,单击鼠标右键计算目标速度选择多空间>验证>为所选子系统生成的代码.
多空间Bug查找器™分析MISRA检查子集的生成代码。您可以在MATLAB命令窗口中看到分析的进度。分析完成后,将打开多边形空间环境。
Polyspace环境向您显示静态代码分析的结果。
展开规则8.7的树并单击不同的结果。
规则8.7规定,如果函数或对象是局部的,则函数和对象不应是全局的。当您单击8.7冲突时,您可以看到这些结果引用了其他组件也使用的变量,例如巡洋舰
. 您可以对代码或模型进行注释,以证明每个结果的合理性。由于此模型是大型程序中的一个单元,因此您还可以更改分析的配置,以仅检查MISRA规则的子集。
在您的模型中,右键单击计算目标速度选择多空间>选择权.
设定设置来自选项项目配置
在Polyspace配置中选择MISRA规则的子集。
点击配置.
在“多边形空间”窗口的左侧窗格上,单击编码标准和编码度量. 然后选择检查MISRA C:2012然后,从下拉列表中选择单一单位规则
.现在Polyspace只检查适用于单个单位的MISRA C:2012规则。
保存并关闭Polyspace配置窗口。
使用新配置重新运行分析。
找到之前显示的规则Polyspace是因为模型是自己分析的。当您将检查的规则Polyspace限制为单个单位子集时,Polyspace仅发现两个冲突。
当您将此模型与其父模型集成时,可以添加MISRA C:2012规则的其余部分。
为了证明符合MISRA C:2012并报告生成的代码度量,您必须导出结果。如果要在每次运行分析时生成报告,请参阅生成报告
(多空间Bug查找器).
如果它们尚未打开,请在Polyspace环境中打开结果。
从工具栏中选择报告>运行报告.
选择BugFinderSummary作为您的报告类型。
点击运行报告.
报告与结果保存在同一文件夹中。
要打开报告,请选择报告>公开报告.
您之前已经展示了模型功能通过基于这些需求运行测试用例来满足其需求。现在,在生成的代码上运行相同的测试用例,以显示代码生成了等效的结果并满足了需求。然后将代码覆盖率与模型覆盖率进行比较,以查看测试执行生成代码的程度。
在MATLAB中的“项目”窗口中,打开测验
文件夹,然后打开粉砂岩
. 该文件将在测试管理器中打开。
检查测试用例。上测试浏览器窗格中,导航到SIL等效测试用例
.这个等价测试用例运行两个模拟金宝appSimulinkCruiseError和StandardsExample
使用测试线束进行建模。
模拟1是正常模式下的模型模拟。
仿真2是一种软件在环(SIL)仿真。对于SIL模拟,测试用例运行从模型生成的代码,而不是运行模型。
等效测试记录一个输出信号,并比较模拟结果。测试用例还收集两个模拟的覆盖率度量。
运行等价性测试。选择测试用例并单击跑.
在测试管理器中查看结果结果和伪影窗格中,选择SIL等效测试用例查看测试结果。测试用例通过了,结果显示代码产生了与这个测试用例的模型相同的结果。
扩展覆盖率结果结果的第二部分。覆盖率度量显示了测试用例执行模型和代码的程度。当您运行多个测试用例时,您可以在整个运行的结果中查看聚合的覆盖率度量。使用覆盖率结果添加测试并满足覆盖率要求,如中所示执行功能测试并分析测试覆盖率(金宝app同步链路检查).
您还可以通过运行处理器在环(PIL)模拟,在目标硬件上测试生成的代码。通过向测试用例中添加PIL模拟,您可以将模型中的测试结果和覆盖率结果与在目标硬件上运行时生成的代码中的结果进行比较。有关详细信息,请参阅处理器在环仿真(嵌入式编码器).