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

文章目录

    • 目的
    • 示例模型说明
    • Ad-Hoc Testing
    • 查找bug
      • 如何利用m函数进行检查
    • 问题分析
    • 解决方法
    • 总结一下

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

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

目的

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

示例模型说明

本例为车辆巡航系统控制器模型,根据功能和对应的安全性需求进行设计。
该模型最初设计为一个有浮点信号和标定量参数的原型。
我们会采用固定点等效模型进行代码生成。
[Simulink] 基于模型的测试与验证学习笔记_Step0: Ad-Hoc Testing_第1张图片

Ad-Hoc Testing

首先我们对控制器的功能进行测试,这里采用test harness进行测试,(原因是test harness允许我们手动修改输入来观察控制器的输出状态)。当然,这仅是一个初步的、非正式的测试方法,通常是在设计开发的早期用于发现设计问题。
test harness包含了Dashboard的library,允许用户通过仪表板的形式修改模型输入。
[Simulink] 基于模型的测试与验证学习笔记_Step0: Ad-Hoc Testing_第2张图片

查找bug

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

如何利用m函数进行检查

在Simulink的User-Defined Function中找到MATLAB Function拖入模型中,编辑对应的函数,对需要进行检查的项目做输出即可,同时可以在要进行输出检查的信号线上右键,添加断点。
[Simulink] 基于模型的测试与验证学习笔记_Step0: Ad-Hoc Testing_第3张图片
也可以在Simulation的Debug中添加
[Simulink] 基于模型的测试与验证学习笔记_Step0: Ad-Hoc Testing_第4张图片
[Simulink] 基于模型的测试与验证学习笔记_Step0: Ad-Hoc Testing_第5张图片
运行模型进行检查,通过Dashboard的操作做功能性验证,这个不是该教程的重点,略过。

问题分析

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

  • 增加TargetSpeed的流程等级高于hasChangedTo(AcceleResSw),因此在运行时可能直接忽略到hasChangedTo(AcceleResSw)而直接执行after(incdec/holdrate*10,tick)
  • hasChanged事件被过度设计(这里没有理解) [Simulink] 基于模型的测试与验证学习笔记_Step0: Ad-Hoc Testing_第6张图片

解决方法

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

  • hasChangedTo替换为了**!AccelResSw**,并将其执行的顺序更改了1,(信号线右键,Properties,Execution order)
  • 同理,将减速的hasChangedTo替换为了**!CoastSetSw**
    [Simulink] 基于模型的测试与验证学习笔记_Step0: Ad-Hoc Testing_第7张图片

总结一下

上面这种方法是一种有效的测试与验证方法,可以发现程序设计中的问题,但是对于测试的完整性,这种方法其实表现的并不好(如下图所示),因此下面应该学习的是更为高效和完善的测试方法。
[Simulink] 基于模型的测试与验证学习笔记_Step0: Ad-Hoc Testing_第8张图片

你可能感兴趣的:(Simulink,Simulink)