0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何利用Simulink Test工具箱对模型进行单元测试?

冬至子 来源:MBD开发 作者:dingxu 2023-07-22 10:25 次阅读
  • 单元测试的目的

创建完模型后,我们需要验证模型的行为,即仿真结果,是否跟我们预期的一致,这样才能保证由模型生成的代码在嵌入式系统中执行得到结果跟我们预期的一致。单元测试主要是以模型或者模型内的子系统为单位进行测试。

虽然单元测试不能发现所有的问题,比如实际系统中的接口信号跟我们预期的不符,或者一些性能方面的需求。但是单元测试个人感觉还是必须的,测试用例设计的越全面,即把自己能想到的所有情况都测试一遍,后续在实车上出现非预期的情况就越少。

并且在模型单元测试中找问题会比在后续的集成测试,以及实车测试中找问题容易的多,所以尽量能在单元测试中发现的不能就不应该流出到后续的开发流程中。

做好单元测试会极大的提高开发效率。

现在MatlabSimulink Test工具箱做的也越来越完善,只需要简单几步就可以创建出测试环境,方便的修改测试用例,结果的可视化和报告功能也做得很好了,下面就具体介绍一下用法。

  • 创建Test Harness测试模型

Test Harness 模型可以理解为一个测试框架。由被测试模型,信号输入和信号输出组成。

如果一个模型不是很复杂的话,可以直接对一个模型整体创建一个Test Harness模型,进行测试。具体方法是在模型最外层的空白处,点击鼠标右键,选择Test Harness -> Create for Model…

图片

如果模型很复杂的话,也可以对模型中的各个子系统分别创建Test Harness模型,然后分别单独测试这些子系统。具体方法是选中想要测试的子系统,点击鼠标右键,选择Test Harness -> Create for 'subsystem name'

图片

点击后,就会出现如下的配置界面

图片

其中,{Name}是给出Test Harness模型的名称
{Save test harness extern}如果不勾选 ,那么这个test harness模型就不会单独的生成一个文件,而是保存在原模型里面
{Save test harness extern}如果勾选,那么这个test harness模型就以一个单独的文件保存

Test Harness模型的可以选择的输入输出如下:

图片

其中Harness模型的输入,可以选择为普通的Inport,Signal Builder,Signal Editor,From Workspace,From File,Test Sequence等
Harness模型的输出,可以选择为普通的Outport,Scope,To Workspace,To File,Terminator等
实际可以根据自己的习惯和需求进行选择。
下图是输入为Inport,输出为Outport的Test Harness模型,本篇文章主要介绍针对这种类型的Test Harness模型进行单元测试。这种模型的输入信号以及期望的输出信号可以通过excel的测试用例模板来给出。

图片

其中,Signal spec and routing 里的内容如下,会按照原模型的设置,将所有的输入信号的数据类型和采样时间做一个转换。

图片

这样一个Test Harness模型就创建完了,接下来就准备对这个模型做测试。

  • 自动创建excel格式的测试用例模板

首先打开Simulink Test Manager,可以在模型菜单的APPS里面搜索Simulink Test

图片

然后点击“Simulink Test Manager”

图片

或者直接在窗口输入命令:
sltest.testmanager.view

就会打开Test Manager的窗口

图片

接下来用AUTO CREATE功能,新建一个Test File,并且自动生成测试用例的模板。点击New -> Test File from Spreadsheet

图片

然后会跳出如下界面,选择“Create a test template file for specifying data”

图片

点击Next后跳出如下的界面,在Model中选择要被测试的模型,Harness中选择该模型中创建的需要被测试的Test Harness模型

图片

然后会跳出如下界面,勾选想要在excel中想要包含的项目

图片

Inputs:模型最外层的输入。这个必须要选的,可以在excel表中编辑输入的值
Parameters:模型中的参数。如果测试时不需要改变参数值的话,可以不勾选。
这边推荐是弄清楚Parameters在excel页中设置的格式后,这边也都不用勾选了,如果需要修改参数值的话,按照格式,手动添加想要修改的参数值
Comparison signals:信号线上logged的信号。这个必须勾选,并且需要把希望被测试的信号对应的信号线设置为logged。

图片

Include all attributes in the spreadsheet:信号的一些参数设置,比如插值方式,绝对允许误差等,推荐勾选上。

下一步是设置测试用例的个数和测试用例的基本名称

图片

比如按照上面的设置,就会在测试用例的excel文件中,生成10个sheet,每一个sheet的名字为我们指定的名称+序号

图片

最后,指定Test Manager的测试文件名和测试用例的excel文件名和存储位置。

图片

这样就会自动生成Test Manager的测试文件和测试用例的excel文件。
Test Manager的测试文件打开后,如下图。

图片

Test Suite:每一个测试文件中,都可以定义若干个Test Suite,可以把同一类型或同一功能的测试用例放到一个Test Suite中
Test Case:每一个Test Suite中,可以定义若干个Test Case,Test Case中规定了测试详细的执行信息。实际测试执行的时候也针对每一个Test Case进行测试的
Create Test Case from External File:测试用例的具体信息从excel模板中提取,这篇文章重点介绍以这种形式来创建测试用例
小锁标记:表示这些设置是通过excel文件中的设置固定的,无法在该页面进行修改,只能通过excel文件进行修改。
*标记:提示这些设置是有过修改

下面详细介绍测试用例的每一项设置的内容:
TAGS: 可以给一个标签名,比如按照功能,测试类型等,方便以后批量查找测试用例
DESCRIPTION: 可以给描述测试用例的测试步骤,方法等,方便理解
REQUIREMENTS: 可以和需求关联。Matlab现在有“Simulink Requirements”这个Toolbox,可以在里面写需求文档,将需求和模型,以及对应的测试用例关联起来,以满足A-ASPICE或者ISO26262所规定的软件开发流程中的可追溯性的要求。
SYSTEM UNDER TEST: 里面设置了要被测试的模型,或者针对模型中所创建的某一个Test Harness模型进行测试。
另外,如果有需要的话,这边也可以在进行单元测试时,覆盖掉原模型的设置,比如常用的一个就是仿真时间,可以根据每个测试用例输入数据的实际结束时间,覆盖掉原模型的仿真结束时间

图片

PARAMETER OVERRIDES: 这里如果是根据excel模板生成的测试用例的话,是锁定不能修改的,里面列出了某个测试用例中,需要改变的参数

图片

CALLBACKS: 里面分为3个不同时刻的,运行我们想要的脚本。
其中PER-LOAD是在读取模型之前,POST-LOAD是在读取完模型之后,CLEANUP是在测试仿真完成之后。
一种比较常见的用法是,在PER-LOAD中读取测试模型的数据词典里数据,在CLEANUP中清除这次测试的所有数据。

图片

INPUTS: 定义测试的输入信号,这里如果是根据excel模板生成的测试用例的话,是锁定不能修改的。
另外这边有两个选项可以勾选,如果勾选“Include input data in test result”的话,在最后的结果中,也会显示输入信号。
如果勾选“Stop simulation at last time point”的话,仿真测试到最后一个输入点的时候就会停止。

图片

SIMULATION OUTPUTS: 可以在里面再选取模型中logged的信号作为观测量
CONFIGURATION SETTINGS OVERRIDES: 可以在仿真测试的时候对原模型的设置进行覆盖
BASELINE CRITERIA: 里面设置了期望值,以及比较仿真测试结果和期望值的一些参数。这里如果是根据excel模板生成的测试用例的话,是锁定不能修改的。但可以点击Edit在excel文件中修改。
对比数据时,可以设置绝对误差,相对误差,时序领先误差和时序滞后误差

图片

这四个参数可以在excel中,对应变量的下方设置,具体格式和参数名称如下

图片

ITERATIONS: 迭代测试。这里如果是根据excel模板生成的测试用例的话,是锁定不能修改的。会根据测试用例数自动生成,表示这个测试会根据不同的配置重复进行

图片

COVERAGE SETTINGS: 统计覆盖度的设置。如果需要统计模型的覆盖度的话,就勾选“Record coverage for referenced models”和“Record coverage for system under test”

图片

COVERAGE METRICS 的设置要在最外面的工程中设置,一般选择Decision,Condition和MCDC这三个覆盖度就够应付各种检查了。

图片

点击Run,就会执行测试

图片

测试的结果会在Result and Artifacts中显示。如果仿真结果和预期符合就是绿色的勾勾,否则是红色的叉叉
Baseline Criteria Result里显示的就是我们给定的信号期望值与实际值之间的比较。
上面的图是把仿真结果和期望结果放在一张图上显示出来,下面的图是两者之差和允许误差范围
External Inputs里显示的是输入信号的值。(在{INPUTS}里勾选了Include input data in test result才会有)
Sim Output里显示的是模型中logged信号的值

图片

另外如果设置了搜集覆盖度,那么还可以看到针对被测模型,所有测试用例累积的覆盖度

图片

  • 手动创建excel测试用例模板

了解了Test Manager用的excel测试模板的格式后,有时候手动创建测试模板会更方便一些。被测对象有多个测试用例的话,可以写多个excel文件,也可以在一个excel文件中的多个sheet上写。

比如对于下图的Test Harness模型,有7个输入和两个输出,那我们就要给7个输入赋值,以及给出对应时刻的输出的值

图片

首先定义输入信号,时间序列{time}定义必须写在最前面,然后在每一列跟着输入信号的名称。
对于输入信号还推荐定义输入信号的数据类型,用Type:<数据类型>来定义。
另外为了区分信号是输入还是输入,需要在输入信号最开始的一列定义Source:Input

对于输出信号,也是一样,首先是时间序列{time},然后在后面的列跟着输出信号的名称。
输出信号也要定义数据类型,以及定义该信号为输出Source:Output
对于输出信号还可以定义允许误差,比较常用的是相对误差和绝对误差。一般对于浮点类型的数据,需要给一个相对误差,因为浮点数没法比较完全相等
对于输出信号,还需要指定该信号在模型中的位置,是通过BlockPath加PortIndex来确定的。
比如对于上图的两个输出信号,不但要指定信号名,还要指定连接信号线的模块{BlockPath}和该模块对应的端口号{PortIndex}(如果端口号是1的话可以忽略不填)
还可以指定信号的插值方式{Interp},如果时间序列不是最小步长的话,插值方式有两种,一个是保持上一次时刻的值“zoh”和线性插值”linear

图片

创建好测试用例的excel模板后,就可以手动创建一个以填写好的excel模板,在Test Manager中创建Test Case。
点击New -> Test File,然后给测试文件起一个名字

图片

在{SYSTEM UNDER TEST}下面选择要被测试的模型以及模型内的Harness模型,然后选中“Create Test Case from External File”,选择之前创建的excel测试用例文件。系统就会把在excel模板中填写的输入和输出的信息分别在{INPUTS}和{BASELINE CRITERIA}中自动创建好

图片

最后再修改一些其他想要修改的设置,就能进行测试了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 仿真器
    +关注

    关注

    14

    文章

    988

    浏览量

    82997
  • MATLAB仿真
    +关注

    关注

    4

    文章

    174

    浏览量

    19640
  • simulink仿真
    +关注

    关注

    0

    文章

    75

    浏览量

    8457
收藏 人收藏

    评论

    相关推荐

    matlab的其他工具箱SIMULINK

    matlab的其他工具箱SIMULINK1 信号处理 SP 工具箱2 控制 Control 工具箱3 图像处理 Images 工具箱4 通
    发表于 09-04 08:16

    matlab应用-曲线拟合工具箱拟合曲线模型

    =[110.3323148.7328178.064202.8258033224.7105244.5711262.908280.0447296.204311.5475]输入y=[5101520253035404550]启动曲线拟合工具箱》cftool进行曲线拟合
    发表于 11-03 15:31

    跪求NI LabVIEW Unit Test Framework Toolkit (单元测试架构工具包)

    跪求NI LabVIEW Unit Test Framework Toolkit(单元测试架构工具包)!!哪位大哥大姐有的话给一份啊!可以发我邮箱879633181@qq.com,或是知道怎么下载教我下,感激不尽啊!
    发表于 11-05 15:45

    Simulink中STM32工具箱一览

    师和模型工程师都必定会采用这种方式,以前传统的手动底层码代码会被淘汰。 话不多说,我先从目前嵌入式开发王者级芯片STM32基于模型一键式代码生成研究起,对各种外设都有了详细的测试研究,目前简单介绍一下:
    发表于 08-17 07:29

    利用MATLAB工具箱中的整定优化工具箱直接优化所输出的曲线

    9.永磁同步电机的矢量控制策略(九)感兴趣的同学们可以看看 这个直接利用MATLAB工具箱中的整定优化工具箱直接优化所输出的曲线。
    发表于 08-27 06:54

    利用Matlab工具箱设计模糊控制器步骤

    Matlab模糊控制工具箱为模糊控制器的设计提供了一种非常便捷的途径,通过它我们不需要进行复杂的模糊化、模糊推理及反模糊化运算,只需要设定相应参数,就可以很快得到我们所需要的控制器,而且修改也非常
    发表于 09-07 07:19

    MCU进行单元测试的方法

    背景MCU软件不同于常规的PC机或基于SOC的嵌入式软件,其一般情况下,与底层硬件耦合度高,资源有限,如何进行单元测试的问题困扰我很久。解决方案根据目前已知如下3种类型的方案:在目标板上运行此方案下,在程序代码中加入单元测试的代
    发表于 11-01 06:58

    基于Simulink的STM32工具箱外设一键式代码该如何去生成呢

    Simulink中的STM32工具箱该怎样去安装呢?基于Simulink的STM32工具箱外设一键式代码该如何去生成呢?
    发表于 11-18 06:00

    单元测试工具有哪些

    代码,具有使用芯片仿真器进行仿真功能的测试工具.不仅可以对C语言编写的程序进行逻辑水平的测试,还可以对嵌入式软件特有的依存于芯片的问题点进行
    发表于 12-17 07:22

    如何对Web组件进行单元测试

    介绍 单元测试需要将各个组件与其依赖项隔离开。 依赖被替换为嘲笑 ,这模拟某些使用情况。 这样,我们可以跨各种外部上下文场景验证测试中组件的行为。可以使用模拟业务逻辑服务对Web组件进行单元测
    发表于 12-20 07:40

    单元测试/集成测试自动化工具--WinAMS

    直接使用目标机代码进行单元测试联合静态解析工具[CasePlayer2],提供C0(语句),C1(判定),MC/DC覆盖率报告,优化测试用例制作已取得第三方认证机构TUVSUD对适用
    发表于 06-17 18:26

    matlab的其他工具箱SIMULINK

    matlab其他工具箱SIMULINK9.1 信号处理 SP 工具箱9.2 控制 Control 工具箱9.3 图像处理 Images 工具箱
    发表于 09-03 12:19 0次下载

    什么是单元测试_单元测试的目的是什么

    工厂在组装一台电视机之前,会对每个元件都进行测试,这,就是单元测试单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个
    发表于 12-21 13:44 3.3w次阅读

    什么是单元测试,为什么要做单元测试

    。 什么是单元测试单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。通常而言,一个
    的头像 发表于 04-28 17:21 8701次阅读

    RT-Thread上的单元测试:什么是单元测试单元测试的作用是什么?

    RT-Thread上的单元测试:什么是单元测试单元测试的作用是什么?           审核编辑:彭静
    的头像 发表于 05-27 16:06 1335次阅读
    RT-Thread上的<b class='flag-5'>单元测试</b>:什么是<b class='flag-5'>单元测试</b>?<b class='flag-5'>单元测试</b>的作用是什么?