人在仿真软件金宝app

金宝appSimulink与基于模型的设计

金宝appSimulink和MATLAB单元测试框架


今天,我很高兴邀请客座博主Ajay Puvvala来讨论测试。

前段时间,阿贾伊路过我的办公桌,提出要写一篇关于紧蒙特卡罗n之间金宝app仿真软件测试MATLAB单元测试框架,在R2016b中引入。

我的回答是:是的,当然……但在此之前,我们需要介绍什么是MATLAB单元测试框架,以及如何在Simulink环境中使用它。金宝app

这就是今天Ajay将要描述的。

客座博客Ajay Puvvala

我们的目标

例如,我们将测试为简单模型生成的代码的输出是否与普通模式模拟的结果相匹配。为此,我们创建了一个控制模型,并使用模型引用,在常规和软件在环模式下模拟我们的简单模型。

待测模型

基于脚本、函数或类

根据您的偏好和需要,MATLAB单元测试提供三个框架基于脚本的基于函数的基于类的.这些框架的灵活性和特性集也是按这个顺序增加的。

在这篇文章中,我们决定采用基于函数的方法,因为它提供了我们需要的一切,并且方便地使用过程编程。

让我们从最简单的测试开始:

简单的测试

测试内容是什么?

  • 我们测试中的主要功能是使用functiontests返回一个测试数组,该数组是该文件中接受测试句柄作为输入的其他本地函数。
  • 这个函数testEquivalence是我们的主要测试,它在正常和SIL模式下模拟模型,并比较结果。
  • 我们使用addTeardown在测试完成后进行清理。在本例中,这意味着关闭模型。
  • 我们使用verifyEqualMATLAB单元测试资格库比较结果。

准备好了,就用runtests函数运行其中的所有测试exampleTest.m

第一个测试

如你所见,我们的测试失败了。为了使这个故事更有趣,我特意将生成的代码配置为链接到一个数学库,其中实现与Simulink在普通模式下使用的略有不同。金宝app如果你不知道,有各种各样的数学库以不同的方式实现三角函数,给出的结果略有不同。

诊断

故障诊断显示了一个带有数值不匹配的表。但正如人们所说,一张图片胜过千言万语。那么,我们如何才能有更好的诊断呢?幸运的是,鉴定方法接受用户诊断以进行额外诊断.它可以是一个字符串或字符数组,函数句柄或matlab.unittest.diagnostics.Diagnostic对象。让我们创建一种诊断方法来帮助我们可视化这些信号不匹配,而不是只看一堆数字。

我们将以下函数添加到测试文件中exampleTest.m启动SDI,并在测试失败时显示一个比较。

添加一个诊断功能比较运行

我们指定这个函数作为verifyEqual的附加参数

诊断功能比较运行

这一次,当测试结束时,SDI向我们展示了信号的不同:

诊断功能的运行结果比较

公差

我们都知道,对浮点信号进行逐位比较通常是一个坏主意。您通常会对浮点舍入错误非常敏感。相反,您希望在一定的容忍度内验证结果是等效的。

为此,我们可以传递额外的参数verifyEqual规定相对和绝对公差

添加绝对宽容

这一次,测试通过了!

通过了测试

接下来是什么?

正如我之前提到的,如果你想了解更多关于测试的信息,我建议你访问开发区内的博客这本书专门讨论这个话题。

我还建议你们通过测试框架的文档查看所有可用于定制和增强我们在这篇博客文章中经历的示例的不同特性。

下周,我们将看看如何使用Simulink Test的测试管理器来简化Sim金宝appulink模型的测试。请继续关注!

|

评论

请点击留言在这里登录到您的MathWorks帐户或创建一个新帐户。