[Simulink] 基于模型的测试与验证学习笔记_Step0: Ad-Hoc Testing


【注】 本文为2018 Mathworks 年会上机教程学习笔记, 讲师:周玲, 如有侵权,立即删除

本文所有模型均为上机练习模型,百度云链接

目的

  • 说明MBD开发流程在设计过程中是如何发挥其高效性的作用
  • 使用V&V工具来得到高质量的软件
  • 利用V&V和代码生成工具改善软件开发流程

示例模型说明

本例为车辆巡航系统控制器模型,根据功能和对应的安全性需求进行设计。
该模型最初设计为一个有浮点信号和标定量参数的原型。
我们会采用固定点等效模型进行代码生成。
在这里插入图片描述

Ad-Hoc Testing

首先我们对控制器的功能进行测试,这里采用test harness进行测试,(原因是test harness允许我们手动修改输入来观察控制器的输出状态)。当然,这仅是一个初步的、非正式的测试方法,通常是在设计开发的早期用于发现设计问题。
test harness包含了Dashboard的library,允许用户通过仪表板的形式修改模型输入。
在这里插入图片描述

查找bug

本例中,巡航控制器存在一个严重的设计问题:当engaged=true后,双击AcceleResSw或CoastSw时,TargetSpeed无法按照需求的设计要求,停止在某一位置,而是一直增加或减小直到上下限车速。
这种bug发现较为困难,因此需要借助测试工具来完成。

如何利用m函数进行检查

在Simulink的User-Defined Function中找到MATLAB Function拖入模型中,编辑对应的函数,对需要进行检查的项目做输出即可,同时可以在要进行输出检查的信号线上右键,添加断点。
在这里插入图片描述
也可以在Simulation的Debug中添加
在这里插入图片描述
在这里插入图片描述
运行模型进行检查,通过Dashboard的操作做功能性验证,这个不是该教程的重点,略过。

问题分析

导致上述设计问题的原因是:

  • 增加TargetSpeed的流程等级高于hasChangedTo(AcceleResSw),因此在运行时可能直接忽略到hasChangedTo(AcceleResSw)而直接执行after(incdec/holdrate*10,tick)
  • hasChanged事件被过度设计(这里没有理解) 在这里插入图片描述

解决方法

下面给出了一个解决方法,具体修改如下:

  • hasChangedTo替换为了**!AccelResSw**,并将其执行的顺序更改了1,(信号线右键,Properties,Execution order)
  • 同理,将减速的hasChangedTo替换为了**!CoastSetSw**
    在这里插入图片描述

总结一下

上面这种方法是一种有效的测试与验证方法,可以发现程序设计中的问题,但是对于测试的完整性,这种方法其实表现的并不好(如下图所示),因此下面应该学习的是更为高效和完善的测试方法。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值