嵌入式软件开发为什么要使用基于模型的设计?
对这个问题,最不希望听到的回答是:
因为GM在使用基于模型设计,因为BMW在使用基于模型设计,所以我们也要使用基于模型设计……
好吧,或许他们可以作为借鉴,但是我们是否认真想过:
基于模型的设计能给我们的开发带来什么样的好处?
弄清这个问题,是我们在后续有效使用基于模型设计开发嵌入式软件的前提。
这里我引用一下若干年前MathWorks公司CEO——Jack Little的说法,在嵌入式软件开发过程中,基于模型的设计至少可以给我们带来四个方面的好处:
1图形化设计
对于基于模型的设计来讲,图形化设计是天然的、固有的。图形化的优势,工程师们都非常清楚,明确、清晰、唯一,便于交流、便于维护,这也是为什么就算我们不用基于模型设计的方式开发软件,也需要在设计文档中画流程图、状态机的原因。
需要注意的是,我们需要把Simulink模型画到清晰、明确,便于交流、便于维护。
2早期验证
话说软件开发过程中,bug的引入难以避免。人非圣贤、孰能无过,引入bug不可怕,能否尽快发现bug对整个开发过程至关重要。这里提到“早期”,什么是“早期”?你某一个阶段的工作产品出来之后,紧跟着就要做验证工作。对于早期验证,以前的方式比较单一,通常我们使用评审的方式去实现最早期的验证,以至于Peer Review在很多公司的流程中被固化下来了,写完文档要评审,做完设计要评审,写完代码还要评审,写好测试用例也要评审。如果我们翻看一些软件工程的教材或者文献,大家对评审的评价非常高,因为在这个阶段每发现一个错误,都会给后续的开发过程带来很多便利,但遗憾的是,评审的效率通常不高。
使用基于模型设计去开发软件,除了评审,我们还有更高效的早期验证方式,包括Simulink模型本身固有的仿真,以及通过形式化方法工具对模型进行形式化的分析。
3代码的自动生成
自动生成代码通常是使用基于模型设计进行软件开发的工程师最容易关注的优势。代码都不用写了,“码农”从此跟我无关,还有什么比这事更美好的呢?确实,从开发效率来讲,这个环节,对于效率的提升,是无法量化的,原本需要一个月时间写完的代码,现在可能只要一个上午或者两个小时就可以搞定,谁帮我算一下工作效率提升了多少?不少人对代码生成的开发效率没有质疑,但对生成代码的代码效率却不够放心。这事,很多人都比过,SAE上也能找到这样的论文。通俗点讲,从效率上,生成的代码在各种效率上(RAM、ROM、执行时间等)不比大学毕业后工作了5年的工程师差。当然,遇到那种“写代码像写诗一样”的工程师,代码生成工具还是要甘拜下风的。不过,“写代码像写诗一样”的工程师我们又见过几人?
4文档自动化
对于文档,我说两点:
工程师大多不愿意写文档;
开发过程中文档又是不可缺少的。
有三个字足以证明上面两条,那就是“补文档”。在基于模型设计的开发过程中,我们可以通过软件读取模型中相关信息并自动创建文档,实现文档自动化。
上面提到了基于模型设计能给我们带来的好处,也正是因为基于模型的设计可以给我带来上述好处,所以我们才应该使用基于模型的设计。
除上述优势之外,软件规模的爆炸式增长也是使用基于模型的设计开发软件的一个重要原因。我想很多人都会有很深刻的体会,近年来软件规模在快速膨胀,各种机电产品的功能、性能大多通过软件的方式去实现、去提升。
NASA做过研究,汽车、航天器等产品的代码量这些年都在呈指数级增加,战斗机从1960年的F-4约8%的功能由软件实现到2000年的F-22约有80%的功能由软件实现,其他机电系统也差不多。软件规模的快速膨胀,给验证和实现都带来了很大困难。
原有的开发模式难以应对,新的开发模式必然会出现。即便是没有MathWorks、没有Simulink,也会有其他产品去实现基于模型的设计,这不是单单一个MathWorks能够推动的,而是技术发展到这一阶段的必然。
全部0条评论
快来发表一下你的评论吧 !