评估软件单元背靠背测试的现状
在设计软件单元时,您可以针对不同类型的仿真来测试模型,例如正常模式、软件在环和处理器在环 (PIL) 仿真。行业认可的软件开发标准,例如 ISO 26262,建议您将正常模式仿真结果与对您生成的代码进行仿真的结果进行比较。运行和比较这些仿真结果的过程称为背靠背测试。背靠背测试可以帮助您验证您的模型和生成的代码在功能上是否等效。
您可以在 SIL 代码测试和 PIL 代码测试仪表板中自动比较背靠背测试结果。背靠背测试度量通过在每个时间步比较正常模式模型仿真的输出和在 SIL 或 PIL 模式下执行的代码的输出,返回每次测试的状态。通过使用这些度量,您可以确保运行必要的测试来验证您的需求,识别问题,并评估您的模型和生成的代码之间的转换验证。
在这个示例中,您将在正常模式和 SIL 模式下运行测试,识别并修复问题,并确认这两个测试是等效的。本示例展示了如何使用 SIL 代码测试仪表板评估 SIL 测试的状态,但您也可以按照相同的步骤在 PIL 代码测试仪表板中分析 PIL 测试。
有关测试编写和不同仿真类型的信息,请参阅 测试计划和策略 (Simulink Test) 和 SIL 和 PIL 仿真 (Embedded Coder)。
查看模型测试状态
示例工程 cc_CruiseControl 包含一个软件组件和几个软件单元。要打开示例工程,请在 MATLAB® 命令行窗口中输入:
openProject("cc_CruiseControl"); scenario = "incomplete"; loadScenario();
要查看模型测试的当前状态,请打开模型测试仪表板。在工程选项卡上,点击模型测试仪表板。或者,在命令行窗口中输入:
modelTestingDashboard
查看软件单元 cc_DriverSwRequest 的模型测试度量结果。在工程面板中,点击 cc_DriverSwRequest。
如果您之前收集过某个单元的度量数据,则仪表板会填充现有数据。仪表板显示模型测试度量结果,例如与测试关联的需求数量、与需求关联测试的数量、通过的模型测试数量以及模型测试覆盖率状态。收集度量数据需要获得支持底层工件的产品的许可证,例如 Requirements Toolbox™、Simulink® Test™ 或 Simulink Coverage™。收集度量结果后,您只需要一个 Simulink Check™ 许可证即可查看结果。有关详细信息,请参阅模型测试度量。有关如何浏览和使用模型测试仪表板的信息,请参阅 使用模型测试仪表板探索测试活动的状态和质量。

找出尚未运行的单元测试。
确定哪些测试尚未在该单元上运行。在模型测试状态部分,点击未运行小组件。

仪表板打开度量详情表,其中包含有关尚未运行的测试的信息。在工件列中,有指向测试的超链接。Source 列显示包含测试的测试文件。您可以点击超链接查看有关测试的更多信息,或者使用超链接在测试管理器中打开测试文件。
在这个示例中,尚未运行的测试都位于同一个测试文件中。点击源列点击 cc_DriverSwRequest_Tests.mldatx 打开测试文件。

以正常模式运行测试
您可以运行测试来查看模型的性能。本示例工程中的测试默认设置为运行正常模式模拟。在测试管理器工具栏中,点击运行按钮。
测试结果显示,五项测试通过,一项测试失败,一项测试被禁用。

通常情况下,在审查代码测试结果之前,需要先审查并修复不合规的模型测试结果。在这个示例中,不要修复失败的测试。
以软件在环 (SIL) 模式运行测试
再次运行相同的测试,但软件在环 (SIL) 模式,以查看生成的代码的性能。在测试管理器中,点击测试浏览器选项卡。然后在工具栏中,点击运行 > 按以下模式运行所选项 > 软件在环 (SIL)。

SIL 测试结果显示,五项测试通过,一项测试失败,一项测试被禁用。

查看模型和代码测试状态
您可以在仪表盘中查看模型和代码测试结果的摘要。返回到仪表盘窗口,然后在警告横幅中,点击收集。
![]()
仪表盘收集最新的度量结果,并更新仪表盘中的度量详情信息。软件单元 cc_DriverSwRequest 的度量详情表中没有尚未运行的测试。
要查看模型测试结果的总体状态,请使用面包屑导航至主要模型测试结果。点击 cc_DriverSwRequest。

点击警告横幅中的收集,更新受影响的 cc_DriverSwRequest 模型的模型测试度量结果。
模型测试状态部分显示,71.4% 的模型测试通过。

要查看代码测试结果的状态,请打开 SIL 代码测试仪表板。在仪表板工具栏的添加仪表板部分,点击 SIL 代码测试。
SIL 测试结果部分显示,71.4% 的 SIL 代码测试通过,但有一项测试在模型测试和 SIL 代码测试中均失败。背靠背测试状态小组件显示您已成功连续运行每个测试,一次在正常模式下,一次在 SIL 模式下。但是,您需要解决测试结果不合格的问题。

识别并修复测试失败
您可以通过查看结果来调查测试失败的原因。在 SIL 测试结果下的测试失败部分中,点击模型小组件。

度量详情表显示名为 Detect set 的测试失败。要查看这些失败结果的来源,请在工件列中,点击检测集结果。

失败的测试结果在测试管理器中打开。右侧窗格中的日志部分显示,仿真期间返回的实际值与预期值不符。

要查看实际值与预期值之间的差异,请打开仿真输出。在结果和工件窗格中,在检测集下,选择模拟输出。然后,在数据检查器选项卡中,选择 actual_request 和 expected_request。或者,您可以使用函数 metric.loadB2BResults。

数据检查器选项卡显示实际值与预期值之间的差异。在测试过程中,软件单元 cc_DriverSwRequest 请求的值是 RESET 而不是 SET。

要修复此故障,请打开软件单元 cc_DriverSwRequest。在仪表板的工件面板中,双击 cc_DriverSwRequest。
测试失败,因为子系统 DetectRaiseAndOverride2 的输入是 RESET 而不是 SET。双击模块图标上带有文本 db_Request_Enum.RESET 的 Const_reqMode_Set 模块,并将 Value 参数更改为 db_Request_Enum.SET。保存模型。


重新运行测试并确认背靠背测试结果
在测试管理器中,重新运行测试 Detect set。在测试浏览器选项卡中,选择检测集。然后,在工具栏中,点击运行。测试通过。
![]()
在 SIL 代码测试仪表板中查看模型和代码测试的状态。在仪表盘中,点击收集重新收集度量结果。
SIL 测试结果显示,目前模型测试失败率为零,但 SIL 测试仍然失败,并且有一项测试连续两次失败。因为您只是在正常模式下重新运行了测试 Detect set,所以该测试没有更新的 SIL 测试结果。

获取更新后的测试结果,并在 SIL 模式下重新运行测试 Detect set 以完成背靠背测试。在测试管理器中,在测试浏览器选项卡中,选择检测集。然后在工具栏中,点击运行 > 按以下模式运行所选项 > 软件在环 (SIL)。测试通过。
![]()
查看最新的代码测试结果,确认软件单元的每个测试都已通过并连续运行。返回 SIL 代码测试仪表板。
仪表盘显示模型故障数为零,85.7% 的 SIL 测试通过,85.7% 的 SIL 测试连续运行。剩余的测试是已禁用的测试,不会运行,因此没有进行过背靠背测试。如果您的测试已禁用,请检查是否需要启用该测试以正确测试您的软件单元。

容差考虑因素
对于基线测试和仿真测试,背靠背度量使用仿真数据检查器来比较测试的日志输出,并确定背靠背测试状态。对于这些测试,该度量根据信号的数据类型,为每个信号指定绝对容差和相对容差差值。如果您需要该度量在比较中考虑各个信号的容差,请改用等效性测试。
有关计算详情的更多信息,请参阅:
另请参阅
代码测试度量 | metric.loadB2BResults