Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

测试计划和策略

您可以使用 Simulink® Test™ 对模型和代码执行功能测试。在创建测试之前,请考虑以下事项:

确定测试目标

在编写测试之前,请先了解测试目标。您可能有以下一个或多个目标:

仿真测试

如果测试只需要使用模型进行无错误仿真或执行回归测试,则您可以运行仿真测试。如果模型仍在开发中,或者您有包含输入和评估并记录相关数据的现有测试模型,则仿真测试非常有用。有关示例,请参阅Test a Simulation for Run-Time Errors

需求验证

如果您安装了 Requirements Toolbox™,则可以通过将一个或多个测试用例链接到在 Requirements Toolbox 中编写的需求来评估模型的行为是否符合需求。您可以通过以下方式验证模型是否满足需求:

  • 在模型或测试框架中编写 verify 语句或自定义准则脚本。

  • 在模型或测试框架中添加Model Verification Blocks

  • 捕获测试用例中的仿真输出,并将仿真输出与基线数据进行比较。

有关使用 verify 语句的示例,请参阅Test Downshift Points of a Transmission Controller

数据比较

您可以将仿真结果与基线数据或其他仿真进行比较。还可以比较不同 MATLAB® 版本之间的结果。

在基线测试中,首先要建立基线数据,即预期输出。您可以手动定义基线数据,从 Excel® 或 MAT 文件导入基线数据,或者从仿真中捕获基线数据。有关详细信息,请参阅Compare Model Output to Baseline Data

在等效性测试中,您可以比较两个仿真以查看它们是否等效。例如,您可以比较两个求解器的结果,也可以将普通模式仿真的结果与软件在环 (SIL)、处理器在环 (PIL) 或实时硬件在环 (HIL) 模式下的生成代码进行比较。您可以通过运行等效性检验来探索不同参数值或标定数据集的影响。有关等效性测试示例,请参阅Test Two Simulations for Equivalence

在多版本测试中,您可以在多个已安装的 MATLAB 版本中运行测试。使用多版本测试来验证测试是否通过,以及测试是否在不同版本中生成相同的结果。

SIL 和 PIL 测试

您可以通过在正常模式和 SIL 或 PIL 模式下运行背靠背仿真来验证生成代码的输出。在正常和 SIL 或 PIL 模式下运行背靠背测试是等效性测试的一种形式。同一个背靠背测试可以通过迭代 MAT 文件或 Excel 文件中定义的不同测试向量来运行多个测试场景。您可以对结果应用容差,以便在模型和生成代码之间实现技术上可接受的值和时间差异。容差也可应用于在硬件上实时运行的代码。您不能在子系统模型中使用 SIL 或 PIL 模式。

实时测试

使用 Simulink Real-Time™,您可以在实时目标计算机上以 HIL(硬件在环)模式执行测试,从而涵盖物理被控对象、信号和嵌入式硬件的影响。您可以通过实时运行基线测试,将结果与已知的良好数据进行比较。您还可以在模型、SIL 或 PIL 与实时仿真之间运行背靠背测试。

覆盖率

使用 Simulink Coverage™,您可以收集覆盖率数据,以帮助量化模型或代码的测试程度。为测试文件设置覆盖率收集时,测试结果将包括在测系统的覆盖率以及引用模型的覆盖率(可选)。您可以指定要返回的覆盖率指标。如果针对软件在环 (SIL) 或处理器在环 (PIL) 模式配置了 Model Reference 模块、Atomic Subsystem 模块和顶层模型,则支持这些模块的覆盖率分析。SIL 或 PIL S-Function 模块不支持覆盖率分析。

如果结果显示覆盖率不完全,您可以通过以下方式增加覆盖率:

  • 手动将测试用例添加到测试文件中。

  • 使用 Simulink Design Verifier™ 生成测试用例以增加覆盖率。

无论采用哪种方式,您都可以将新的测试用例链接到某些认证所必需的需求。

测试整个模型或特定组件

您可以测试整个模型,也可以测试某个模型组件执行测试的一种方法是,首先对组件进行单元测试,然后增加在测组件的数量,以执行集成和系统级测试。通过使用此测试方案,您可以更轻松地识别和调试测试用例以及模型设计问题。如果要获取聚合覆盖率,请测试整个模型。

使用测试框架

如果是测试某个组件,测试框架包含在测组件的副本;如果是测试整个模型,则包含对模型的引用。框架还包含用于测试的输入和输出。使用测试框架将在测模型或组件与主模型隔离开来,从而保持主模型整洁有序。

您可以在内部随模型文件一起保存框架,也可以将框架单独保存在模型的外部文件中。在内部保存框架可以简化模型和测试的共享,因为工件更少,并且您可以更轻松地调试测试问题。而在外部保存框架,您可以仅重复使用和共享框架,并将设计与测试工件清楚地分离开来。无论在模型内部还是外部,测试框架的工作方式是相同的。有关测试框架的详细信息,请参阅Test Harness and Model Relationship创建测试框架

下图显示了测试框架的示例。

Test harness showing the inputs connected to a routing subsystem. The subsystem connects to the shift logic block being tested, and the block connects to another routing subsystem, which then connects to the output.

在测组件是 shift_logic 模块,它是在创建框架期间从主模型复制而来的。shift_logic 模块的副本链接到主模型。输入是 Inport 模块,输出是 Outport 模块。垂直子系统包含信号设定模块和路由,用于将组件接口连接到输入和输出。

确定输入和输出

考虑使用什么输入信号和信号容差来测试模型,以及从哪里获取它们。您可以将 Signal Editor 模块添加到测试框架中以定义输入信号。您也可以定义和使用来自 Microsoft® Excel 或 MAT 文件或者 Test Sequence 模块的输入。如果您安装了 Simulink Design Verifier,则可以自动生成测试输入。

对于测试的输出,请考虑是否要将测试详细信息和测试结果数据保存到报告中,以便存档或分发。您还可以将输出用作 Test Assessment 模块的输入,以评估和验证测试结果。对于基线测试,请使用输出将实际结果与预期结果进行比较。

优化测试执行时间

优化测试时间的方法包括使用迭代、并行测试和运行测试用例的子集。

设计测试时,请决定是要运行多个测试还是要迭代运行同一测试。迭代是测试用例的变体。在迭代中对不同的输入数据集、参数集、配置集、测试场景、基线数据和仿真模式使用迭代。使用迭代的一个优点是,您可以使用快速重启来运行测试,这样就不必为每次迭代重新编译模型,从而缩短了仿真时间。

例如,如果您有多个输入数据集,则可以为每个外部输入文件设置一个测试用例迭代。覆盖参数的另一种方法是使用脚本化参数扫描,这使您能够迭代许多值。如果您需要独立的配置控制,或者每个测试都与不同的需求相关,请使用单独的测试用例;有关迭代的详细信息,请参阅Test Iterations

如果您有 Parallel Computing Toolbox™,则可以在本地计算机或集群上并行运行测试。如果您有 MATLAB Parallel Server™,则可以在远程集群上并行运行测试。当您有大量测试用例或测试用例需要很长时间才能完成运行时,并行测试非常有用。请参阅Run Tests Using Parallel Execution

优化测试时间的另一种方法是通过标记要运行的测试来运行测试用例的子集。

有关改进和优化模型仿真的详细信息,请参阅 Simulink 文档中“仿真”下的“优化性能”部分。

使用编程接口或 GUI 界面

为了帮助创建和运行测试,Simulink Test 提供了测试管理器(一种交互式工具)以及可在测试脚本和命令行中使用的各种 API 命令和函数。使用测试管理器,您可以管理大量测试,以及系统地捕获和管理结果。如果需要定义新的测试评估,请使用测试管理器,因为此功能在 API 中不可用。如果您在持续集成环境中工作,请使用 API。在其他情况下,您可以使用自己喜欢的任何选项。

另请参阅

相关主题