缘何选择基于模型的开发
当前,嵌入式软件开发多采用文档形式。文档式嵌入式系统的局限在于,文档本身在传递过程中不可被测试,由此各阶段间形成了沟通障碍。由于不可测试,需求的错误被逐层积累,只有系统测试时才能发现。这就产生了矛盾:大部分错误在前面已经形成,但只能在后面发现。因此,在纠正错误时,文档架构代价高昂。
上述矛盾会给开发工作带来较大障碍,甚至是负面结果。它极大地浪费了人力资源,据调查近37%的文档式嵌入式系统项目会选择增加开发人员,56%的开发项目会取消部分功能以降低系统复杂度,甚至有近18%的项目可能被直接撤消。
为了解决该矛盾,需要改进开发流程、提高团队的开发效率,因此Telelogic推出模型驱动开发方案。模型驱动开发的特点在于各阶段都存在具体的模型与之相对应。如,在需求阶段,提供领域模型(概念模型),可以把需求以模型的方式表达出来;在架构阶段,提供系统模型,它关注系统的划分,包括大的系统怎么样划分为子系统及系统间的接口。在编程阶段,提供软件模型,它以抽象或建模的方式表达系统功能,为后续编程人员带来方便。
建模不等于直接提供完整模型,它要求分阶段的层次感,即要求后来的模型是在前面模型基础上的叠加,从而保证模型与模型间、阶段与阶段间具有一致性。
相对于文档驱动开发,基于模型的开发是可验证的,它包括静态及动态检查,静态检查是指在通讯出现故障时,系统会自动报错;动态检查是指检测系统早期行为,通过发送激励并根据需求文档去模拟功能,在动态基础上检测系统是否能完成需求规定的要素。动态检查可在系统早期去除逻辑缺陷。
基于模型的开发可定义为MD D,即在开发的各个阶段形成涵盖大部分系统活动的模型,保证阶段和阶段间的一致性。
用UML进行嵌入式软件建模
UML适于嵌入式软件建模
UML是极好的建模语言,因为UML具有很详细的语法语义,它可以构建完善的系统并最终打印成文档。UML的特点包括:UML面向对象;它与平台语言无关,嵌入式开发会大量应用到C或C++,UML既不是C,C++或Java但它可被转化成任何语言;UML是构成MDD方法论的基础和关键技术。
UML语言提供了多视角,可用于描述系统中被关注的不同事物及实现的不同行为,视角在UML语言中被称之为图。随着参与项目的人越来越多,产生的图也就越来越多,当它们叠加在一起时即可说明一个模型。UML多视角,可在系统开发的不同阶段使用,因此UML覆盖了系统开发的全过程,从设计描述、开发到测试,均有不同的图与之对应。
不同于一般性软件开发,嵌入式软件开发有其特别之处。首先,嵌入式系统大部分属于反应式的系统。只有当受到激励,系统才会产生响应。UML内含的状态机可以对该行为进行精确描述。其次,嵌入式软件往往对实时性要求苛刻,因此时序对于嵌入式系统非常重要。UML提供了众多描述时序的机制,很多图都包含时序的概念,因此可用于描述实时性要求。另外,嵌入式软件有时要求运行在多任务环境下,而UML本身也包含多任务环境,当任务间需要交互消息时,也可通过UML发送。最后,嵌入式还要求良好的可移植性,因此要求应用的语言能对硬件进行描述,硬件描述相当于一个接口,UML语言包含各个图接口,可满足嵌入式需求。
家庭报警系统实例
家庭报警系统要求能感应门的移动从而获知是否有侵入者进入,当有侵入者进入,要立即生成报警信号,以警示主人。扩展功能包括设置密码保护:只有输入密码后才可激活系统及延时功能:防止主人被误认为侵入者。
用UML实现该系统,首先进行需求分析,用模型替代文本方式进行描述:如,对象模型包括:主人与侵入者;系统实现的功能模型包括:检测、移动、发生、开关、关闭、输入密码、更换密码等,一目了然(如下图所示)。
而后进行系统架构,系统由两部分构成:软件及硬件。硬件方面,需掌握硬件提供的功能,如发光发声、键盘输入及其具体接口;软件方面,报警控制器是软件的主架构,而如何控制硬件如马达、发光二极管等,则是一个系统级架构。
明确系统架构后,则需给出可行性设计方案,通常会先提供几种不同的设计方案以备选择。以本系统为例,既可以采用复位的解决方案也可以采用中断的解决方案。
具体的模型设计可利用UML的状态机实现,它特别适用于异步或反应式通信。具体设计可以很简单,也可以很复杂,因设计方案而异。
系统设计过程中,有时需要从流或对象的角度考虑问题。系统开始有什么,后来有什么,叫做对象的视角或并发的视角。以本系统为例,当有人触动键盘,会带动硬件中断,硬件中断会触动相应的服务程序,而后服务程序将信号传送至系统,这就是所谓的对象视角。UML提供多个角度有助开发人员完成设计。
Rhapsody: 基于模型的嵌入式软件开发环境
Telelogic提供了一款基于模型的嵌入式软件开发环境Rhapsody,中文名:狂想曲。它的设计思想是用一个平台概括或近乎概括设计的各个环节。如,它可用于建模的前期分析、验证、测试或生成文档等。在该环境中客户可加入自己的C或C++代码。
R hapsody的功能包括:一,自动生成代码,在系统中输入状态机、模型架构或软件架构,系统即可生成C语言代码;二,验证模型(如右图所示),可对完成的模型,一步步跟踪调试,它的特别之处在于,Rhapsody可令开发人员直接在图形界面进行调试,消除逻辑错误及功能性需求错误;三,代码和模型的自动相关,嵌入式设计大部分用于军工、通信乃至医疗领域,因此希望能实时看到模型各部分对应的代码。Rhapsody系统中的代码可读、可修改,修改后的代码还可进行自动更新,这对嵌入式系统非常重要。
Rhapsody还提供了自由定义的方式,它可以和市面上任何一种商业的实时操作系统集成,操作系统也可以由客户自行定义。Rhapsody基于UML思想实现,它已成功应用于医药、汽车及通信等领域,如美国公司设计的癌症早期探测系统及宝马公司的汽车电子系统等。 |