原创:董淑成

链接:https://mp.weixin.qq.com/s/_A2wNucM6RrEGT9i_mMvXg

嵌入式软件开发为什么要使用基于模型的设计?

对这个问题,最不希望听到的回答是:因为GM在使用基于模型设计,因为BMW在使用基于模型设计,所以我们也要使用基于模型设计...,好吧,或许他们可以作为借鉴,但是,我们是否认真想过:基于模型的设计能给我的开发带来什么样的好处?

弄清这个问题,是我们在后续有效使用基于模型设计开发嵌入式软件的前提。

这里我引用一下若干年前MathWorks公司CEO Jack Little的说法,在嵌入式软件开发过程中,基于模型的设计至少可以给我们带来四个方面的好处:

1. 图形化设计

对于基于模型的设计来讲,图形化设计是天然的、固有的。图形化的优势,工程师们都非常清楚,明确、清晰、唯一,便于交流、便于维护,这也是为什么就算我们不用基于模型设计的方式开发软件,也需要在设计文档中画流程图、状态机的原因。

需要注意的是,我们需要把Simulink模型画到清晰、明确,便于交流、便于维护。

2. 早期验证

话说软件开发过程中,bug的引入难以避免,人非圣贤、孰能无过,引入bug不可怕,能否尽快发现bug对整个开发过程至关重要。这里提到“早期”,什么是“早期”?你某一个阶段的工作产品出来之后,紧跟着就要做验证工作。对于早期验证,以前的方式比较单一,通常我们使用评审的方式去实现最早期的验证,以至于PeerReview在很多公司的流程中被固化下来了,写完文档要评审,做完设计要评审,写完代码还要评审,写好测试用例也要评审。如果我们翻看一些软件工程的教材或者文献,大家对评审的评价非常高,因为在这个阶段每发现一个错误,都会给后续的开发过程带来很多便利,但遗憾的是,评审的效率通常不高。

使用基于模型设计去开发软件,除了评审,我们还有更高效的早期验证方式,包括Simulink模型本身固有的仿真以及通过形式化方法工具对模型进行形式化的分析。

3. 代码的自动生成

自动生成代码通常是使用基于模型设计进行软件开发的古今中外的工程师最容易关注的优势。代码都不用写了,“码农”从此跟我无干,还有什么比这事更美好的呢?确实,从开发效率来讲,这个环节,对于效率的提升,是无法量化的,原本需要一个月时间写完的代码,现在可能只要一个上午或者两个小时就可以搞定,谁帮我算一下工作效率提升了多少?不少人对代码生成的开发效率没有质疑,但对生成代码的代码效率却不够放心。这事,很多人都比过,SAE上也能找到这样的论文,通俗点讲,从效率上,生成的代码在各种效率上(RAM、ROM、执行时间等)不比大学毕业后工作了5年的工程师差。当然,遇到那种“写代码像写诗一样”的工程师,代码生成工具还是要甘拜下风的,话说,“写代码像写诗一样”的工程师我们有见过几人?

4. 文档自动化

对于文档,我说两点:工程师大多不愿意写文档,而开发过程中文档又是不可缺少的,有三个字足以证明上面两条,那就是“补文档”。在基于模型设计的开发过程中,我们可以通过软件读取模型中相关信息并自动创建文档,实现文档自动化。

上面提到了基于模型设计能给我们带来的好处,因为基于模型的设计可以给我带来上述好处,所以我们才应该使用基于模型的设计。


除上述优势之外,软件规模的爆炸式增长也是使用基于模型设计开发软件的一个重要原因,我想很多人都会有很深刻的体会,近年来软件规模在快速膨胀,各种机电产品的功能、性能大多通过软件的方式去实现、去提升。

NASA做过研究,汽车、航天器等产品的代码量这些年都在呈指数级增加,战斗机从1960年的F-4约8%的功能由软件实现到2000年的F-22约有80%的功能由软件实现,其他机电系统也差不多。软件规模的快速膨胀,给验证和实现都带来了很大困难,原有的开发模式难以应对,新的开发模式必然会出现。即便是没有MathWorks、没有Simulink,也会有其他产品去实现基于模型的设计,这不是单单一个MathWorks能够推动的,而是技术发展到这一阶段的必然。

为什么要基于模型设计?相关推荐

  1. 技术专栏 | 为什么要基于模型设计?

    原文链接:https://mp.weixin.qq.com/s/KpMfBMrUiciHziI8YYdPJA 作者简介 董淑成,MathWorks公司中国区高级应用工程师,MATLAB中文论坛超级版主 ...

  2. 基于模型设计和机载软件

    采用基于模型设计应对机载软件设计中的挑战 已剪辑自: https://www.jianshu.com/p/a8fb02ce366d 采用基于模型设计应对机载软件设计中的挑战 Model Based D ...

  3. 基于模型设计(MBD)工程方法开发六轴机械臂系统实战

    本课程采用基于模型设计(MBD)的工程开发方法,实现对六轴机械臂系统的开发,包括六轴机械臂的知识和控制器的软硬件实现,有助于设计串联.并联的机械臂.康复医疗机器人等其它机电设备的电控系统.目前,这种世 ...

  4. 什么是基于模型设计(MBD)?

    MBD(Model based Design)是什么? 随着嵌入式行业的快速发展,MBD作为解决专家紧缺.国内解决方案匮乏的新软件开发方式备受关注. MBD是一种通过建模自动生成代码的(Auto-ge ...

  5. 如何完成符合ISO 26262要求的基于模型设计(MBD)的测试

    背景介绍 随着汽车行业的迅速发展,汽车的复杂程度不断增加,越来越多的汽车电子控制系统具有与安全相关的功能,因此对ECU的安全要求也越来越高.复杂的软件功能,将会带来大量的软件风险问题,如何保证软件的安 ...

  6. 四旋翼飞行器(QuadCopter--Parrot mini drone)—— 基于模型设计(Model Based Design)

    版权声明:本文为博主原创博文,未经允许不得转载,若要转载,请说明出处并给出博文链接  最近一段时间,朋友圈被MATLAB禁止哈工大.哈工程等科研院校使用刷屏了,顿时各种声音都有,有的网友说可以转去使用 ...

  7. 使用基于模型设计开发AUTOSAR软件组件

    本文翻译的是Mathworks公司撰写的Development of AUTOSAR Software Components with Model-Based Design,希望与大家一起共同学习进步 ...

  8. 基于模型设计的永磁同步电机控制编译和代码生成

    摘要 之前推送过,基于模型设计的准备工作,后台有人问怎么设置模型编译和代码生成,本篇笔记主要记录基于NXP恩智浦MPC5744P的MBD工具箱,一步步编译PMSM电机模型和代码生成. 准备工作 安装可 ...

  9. Matlab/Simulink 自动代码生成 基于模型设计学习教程(1)---- 环境配置

    在接触不断开发深入STM32的时候,我经常在直接用C语言编写一个很发杂的算法,比如PID控制,傅里叶变换,卡尔曼滤波之类的基本需要的算法,然而对于一个初学者来说,编写这样的算法,费时费劲,甚至不一定能 ...

最新文章

  1. ATLAS入门篇之CascadingDropDown控件编程
  2. Emacs之slime环境配置
  3. 图片宽度自适应浏览器宽度
  4. PHP核心技术笔记(2):面向对象的设计原则
  5. Spring—集成Junit
  6. 面试题46. 把数字翻译成字符串
  7. scrolling=no 无法根据坐标获取元素_提高三坐标测量精度,要记住这几招
  8. 如何同时配置GitHub和gitlab的SSH
  9. 无法远程连接阿里云的Mysql
  10. Cocos2d-x属性变化动作
  11. 爬虫 --- 08. 全站爬取(CrawlSpider), 分布式, 增量式爬虫
  12. PB动态报表格式自由定义的实现
  13. 开往-友链接力handsome侧栏添加修改
  14. 即时通讯系统android,基于android系统的即时通讯系统设计与实现
  15. 淘宝 模拟 登录 总结 【QQ 346767073 】
  16. html5 图片拱形旋转,CSS DIV拱形边框的图片
  17. 计算机报名没有有效的安全证书,win10 因为没有使用有效的安全证书进行签名怎么解决...
  18. TSF(Text Service Framework)简介
  19. Nervos CKB初体验
  20. 知识星球爬虫2023-2-9

热门文章

  1. 恒大java_java可变参数
  2. 2018年ElasticSearch6.2.2教程ELK搭建日志采集分析系统(教程详情)
  3. 爬虫-----爬虫的爬,爬虫的虫
  4. java异常说法正确的是什么意思_以下关于Java异常说法不正确的是( )。
  5. Android Studio Chipmunk 现已发布
  6. Jmockit对类静态方法mock
  7. Hutool - 对于图片的基本处理
  8. 计算机中各种进制之间的相互转换过程
  9. 【软件测试】一个真正的测试面试过程,我比面试官还狡猾......
  10. 在Unity里将多个Sprite(精灵图)动态合成一个Sprite