作为美国MathWorks公司的知名产品,Stateflow具有软件架构清晰、模型复杂度低、可读性和可维护性强等优势,因此被大量应用于设计有关监控、任务调度以及故障管理应用程序的逻辑,在汽车电控领域也有着非常广泛的应用。

基于支持客户的Stateflow测试经验,北汇信息总结了一套针对Stateflow的具有普适性的测试方法。下面就以Fan Management单元模块的动态测试为例,和大家一起分享。

被测模型

Fan Management 单元模块

Fan Management 单元模块通过VPM(整车高低压状态)、FanErr(风扇故障)、FanTemp(风扇温度)信号,对FanEn(风扇使能)、FanErrBack(风扇故障反馈)信号进行计算。

那么,当拿到这样一个单元模型和功能需求描述,应该如何去开展我们的动态测试工作呢?首先,为了防止在测试过程中深陷到Stateflow错综复杂的跳转逻辑中无法自拔,应该明确我们的测试思路。

围点打援 中心开花

其实无论多复杂的Stateflow模型,其基本组成都可拆分为初始状态、跳转条件和目标状态三个部分。正是基于这样的基本结构,我们建立了“围点打援”的测试思路。

  • 围点: 控制Stateflow跳入初始状态。
  • 打援: 针对跳出初始状态的跳转路径进行用例编写。
  • 中心开花: 最终实现以初始状态为中心,向四周辐射的MCDC覆盖。

假设以Normal状态最为初始状态:

  • 围点: 以Normal为初始状态
  • 打援: ① Normal 跳转至Off_Err
                ② Normal 跳转至 On_OverTemp

围点与打援

测试用例编写方法

当确定好测试思路之后,下面就正式的搭建测试工程。这里,我们搭建测试工程用的是一款自动化的软件动态测试工具——TPT。

围点:控制Stateflow跳转至初始状态

在进入初始状态的过程中,并不需要考虑MCDC覆盖度的要求。因此,只需要控制信号按照最短的路径进入到初始状态即可。

以Normal作为初始状态为例,直接使VPM = 8,跳入Normal状态。由于每次状态跳转会占用一个步长,我们给入足够的等待时间保证状态跳转至初始状态。

进入Normal状态

按照以上的搭建方法,分别对模型中的5个功能状态搭建了测试用例,并按照模型中的状态块名称对用例进行了命名。

初始状态
由于这5个初始状态在后面测试用例搭建的过程中需要多次调用,TPT可以将编写好的测试用例进行封装,生成Variants,在搭建测试用例的过程中直接选择想要的状态即可。这会大大提升测试用例的搭建效率。

以Variants形式存在的初始状态

打援:给入状态跳转条件信号

按照OriginalState分组封装的思路,将模型中的跳转条件也进行了Variants的搭建。这里针对信号Variants的划分会用到在测试过程中常用到的一种方法:等价类划分。

按照测试中常用的等价类划分方法,对Fan Management单元模型中的输入信号进行了等价类的划分:

  • Bool类型: true、false
  • 有明确功能对应关系的信号:
    高低压状态(VPM_st):8、9、(!(8 or 9))取等价类3
    风扇故障(FanErr)信号:0(无故障)、1(有故障)
  • 有明确功能阈值的信号:
    风扇工作温度(FanTemp):≥90(取等价类100)、≤85(取等价类50)

划分好跳转条件上信号的等价类之后,为了方便复用,同样在TPT中搭建了相应的Variants。

以Variants形式存在的跳转条件

当OrigianlState 和ObjState上的Variants都搭建好之后,接下来就是选择需要的Variants,让他们组合成我们想要的测试用例。为了减少用例运行过程中的资源占用情况,在用例的末尾加了一个300ms的最大跳出时间限制。

测试用例

当然,TPT本着“万物皆Variants”的原则,测试用例中States的跳转条件也可以封装成Variants,便于我们的复用。

跳转条件的Variants

在运行用例的时候,TPT可以调用Simulink的V&V工具箱对模型的覆盖度进行统计分析。我们可以方便的查看MCDC覆盖度是否实现了“中心开花”的效果:以初始状态为中心,跳出初始状态的条件实现MCDC全覆盖。这样可以大大减少我们在为了满足MCDC覆盖度去补充测试用例的工作量。

结构覆盖度统计结果

在这个过程中,TPT还可以进行一些测试用例分组管理、测试需求管理、设置测试用例属性信息的工作,篇幅所限,这里就不给大家详述了。

一招从天而降的掌法–测试用例自动生成

在搭建测试工程的过程中,有没有一种能减轻测试工程师的工作量,自动生成测试用例的方案呢?

为了提升大家的测试效率,TPT也提供了多种自动生成测试用例的方法。当我们搭建出OriginalState和ObjState的Variants之后,只需要动动手指,TPT就能自动生成我们想要的测试用例。

并且,在保证测试用例数量可控的前提下,自动生成的用例MCDC覆盖度达到了100% !

在我们的测试过程中,巧妙的利用TPT提供的自动生成测试用例的方法,能够大大较少测试工程师的重复性劳动,实现真正意义的自动化测试。

关于评估

用例搭建完成之后,我们还需要搭建测试评估,这里就可以利用TPT强大的脚本评估去实现。TPT的脚本评估使我们彻底摆脱了传统时间域上的评估,转向了复用性、自适应性更强的逻辑评估方式,同时也便于我们对模型和测试工程的debug。

对于Stateflow的评估,我们同样采用了“围点打援”的思路,先用正则表达式regexp定位至Normal状态,然后筛选出高压故障区间进行评估。

Normal跳转至Off_Err评估脚本

篇幅所限,这里只给大家介绍了一个简单Stateflow模型的测试方法,对于多层嵌套、含调度模块、复杂跳转条件、延迟逻辑等复杂模型,都可以在此基础上进行扩展。如果大家测试过程中存在疑问,欢迎留言评论哦。

PikeTec公司是全球知名的基于模型的嵌入式系统测试工具TPT的软件供应商,总部位于德国柏林,其创始人均在戴姆勒公司拥有十多年的软件测试经验。TPT产品曾被评为2005年戴姆勒最佳创新软件,并在戴姆勒、大众、奥迪、保时捷、通用等汽车整车厂及多家零部件企业(博世、大陆、海拉等)中得到广泛应用,如戴姆勒的多个车型的混合动力汽车的动力总成、电池管理控制器的测试,博世的汽油机和柴油机控制系统测试等。

北汇信息作为PikeTec在中国的独家合作伙伴,致力于帮助中国客户提升嵌入式控制系统的开发效率。目前,TPT已被众多国内知名主机厂和零部件企业认可,在新能源(VCU/BMS/MCU)以及ADAS等领域中被广泛应用。

注:产品图片源自MathWorks和PikeTec。

天啦噜!Stateflow动态测试竟然so easy相关推荐

  1. workbook需要引入的包_用Java玩转Excel,竟然如此easy~

    1.POI是什么 Apache POI - the Java API for Microsoft Documents,顾名思义,Apache的三方包,用来操作微软office文档的,多数时候用来操作e ...

  2. 用Java玩转Excel,竟然如此easy~

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达今日推荐:分享一套基于SpringBoot和Vue的企业级中后台开源项目,这个项目有点哇塞!个人原创100W +访问量博客:点 ...

  3. win10相机正常但腾讯会议检测不到摄像头解决方法

    问题描述: 1.设备:win10笔记本,ThinkPad E14 2.问题:腾讯会议检测不到摄像头,用QQ和微信测试也不行,但win10自带的相机应用是正常的 电脑使用过程中不知道何种原因,腾讯会议. ...

  4. 惊呆了,Spring中竟然有12种定义bean的方法

    前言 在庞大的 Java 技术体系中,Spring 有着举足轻重的地位,它给每位开发者带来了极大的便利和惊喜. 我们都知道 Spring 是创建和管理bean的工厂,它提供了多种方式定义 bean,能 ...

  5. D1. Kirk and a Binary String (easy version)

    题目链接:http://codeforces.com/contest/1204/problem/D1 D1. Kirk and a Binary String (easy version) time ...

  6. 程序员竟然钟爱这个!我 low了

    今天和一帮程序员大佬群里闲聊 (需要入群的可以加最底下微信哦~) 聊着聊着竟然扯到鞋子 一直在讨论穿什么鞋子比较耐脏 然后一帮大佬集中围殴小白鞋 说小白鞋虽然百搭 但是太容易脏,太不容易洗了,果断放弃 ...

  7. IT工程师志强追剧《延禧攻略》后,竟然……

    志强是一名IT工程师,传说中的"话少钱多.996".但在工作之余,只要一有时间,他就会秒变"迷弟"一般狂追宫斗剧.所以呢,最近那部人见人爱.风靡朋友圈的宫斗大戏 ...

  8. [buuctf][Zer0pts2020]easy strcmp

    [Zer0pts2020]easy strcmp 思路 脚本 思路 第一步还是先查壳 放在linux中运行一下,发现竟然没有任何输入的位置. 放入ida64中查看,因为这个是一个64位的可执行文件,有 ...

  9. Jetpack MVVM 七宗罪之四: 使用 LiveData/StateFlow 发送 Events

    久违的 " Jetpack MVVM 七宗罪 " 系列,今日再开.本系列主要盘点 MVVM 架构中各种常见错误写法,并针对性的给出最佳实践,帮助大家掌握 Jetpack 组件最正确 ...

  10. 新手操作更换固态和重装系统竟然这么麻烦?!

    新手操作更换固态和重装系统竟然这么麻烦?! 当我打开我的本子(已经用了三年)的任务管理器的时候,我看到了我的cpu占用20%,内存占用80%而且C盘将满,一个无法恶制的念头涌上心头:我!要!换!电!脑 ...

最新文章

  1. int(1) 和 int(10) 有什么区别?资深开发竟然分不清!
  2. CF840D. Destiny
  3. python内容限制_Python --类,实例和访问限制
  4. 拓端tecdat|R语言生态学建模:增强回归树(BRT)预测短鳍鳗生存分布和影响因素
  5. Ehcache 整合Spring 使用页面、对象缓存(转)
  6. DLL导出类避免地狱问题的完美解决方案
  7. android最新系统排行,四大安卓系统排名,Flyme最好?
  8. 台式计算机电源待机电流有多大,终于知晓电脑机箱电源12v多少安
  9. 怎么取消工作组计算机,windows10系统如何退出workgroup工作组 windows10系统退出workgroup工作组的操作方法...
  10. BUUCTF--[Zer0pts2020]easy strcmp
  11. 大规模MIMO的信道互易性,信道信息反馈
  12. [Flink基础]--什么是流处理?
  13. layui+croppers完成图片剪切上传
  14. php制作万年历的步骤_PHP制作万年历
  15. 【阿里云镜像】安装编译Apache环境
  16. 推荐7个免费自学网站提升自我价值必备网站
  17. DOS bat批量处理 文本操作
  18. PTA - 数据库合集20
  19. 不要以你的现状来判断你的未来
  20. 使用mint ui(一)

热门文章

  1. 商业分析的职业路线-在数据科学世界里规划你的下一个角色
  2. 使用计算机配置路由器,电脑设置路由器步骤
  3. tomcat 配置文件 conf/server.xml 中的 appBase和docBase
  4. php判断caj文件页数,CAJ转Word有没有既免费还不限制页数的转换工具?
  5. FFmpeg指令(./ffmpeg -h long)
  6. python基础----Day05
  7. win7如何设置wifi热点_博世壁挂炉“盖世7200i”WiFi功能如何设置
  8. 吕梁云计算机中心,吕梁云计算中心综合实力全国排第三
  9. Qua Vadis Eclipse? 第二部分
  10. github官网进不去解决方案