本文详细介绍了基于模型的软件开发方法的概念、模型驱动的体系结构和开发步骤、建模语言、建模工具,对各种建模工具进行了比较、分析;本文从软件算法复杂度和架构复杂度两个维度来选择建模工具,最后针对非图形界面的嵌入式软件和图形化界面的嵌入式软件,分别给出软件建模方案。
基于模型的软件开发(MBSD:Mode Based Software Development)、模型驱动的软件开发(MDSD: Mode Driven Software Development)、基于模型的软件工程(MBSE: Model Based Software Engineering)、模型驱动的软件工程(MDSE: Model Driven Software Engineering)是软件工程发展的一个重要方向,是一种以建模和模型转换为主要途径的软件开发方法。
模型是实际系统或过程的代表或描述,它是实际系统一部分属性的抽象或模仿,而不是全部属性的复制,模型的实质是在一组简化的假设条件下,描述一个实体活动的最本质的属性。模型用于描述项目相关人员对复杂系统的理解和认知,是项目相关人员之间交流的基础,是系统开发的依据。
基于模型的软件开发方法是指建立一个完整的软件系统模型,依据模型验证软件系统的需求及设计方案,产生和调试软件程序代码的方法。模型的可视化意味着可视化软件开发。
模型驱动工程的优势在于,使用更接近于人的理解和认识的模型,尤其是可视化模型,有利于设计人员将注意力集中在和业务逻辑相关的信息上,而不用过早地考虑与平台相关的实现细节。在MBSD中模型不再是一种设计辅助工具,而是实际开发过程中的产品,并随着开发过程的迭代不断改变。模型与代码地位同样重要,模型与代码可同步化。
基于模型的软件开发流程将发生重大转变,如图1所示,省去了编码和单元测试,在代码之前及完成绝大部分的设计验证。
模型驱动架构(MDA:Mode Driven Architecture)是模型驱动软件工程(MBSE: Model Based Software Engineering)的一个具体和部分的实现途径。
模型驱动架构(MDA)是由对象管理组织(OMG)提出的一种新的软件体系结构开发的框架。模型驱动架构不仅把建模语言用作是一种设计语言,还用作是一种编程语言,并让模型在软件开发中扮演一种极其重要的角色,一切都是模型就是模型驱动架构的基本思想。然后通过架构性的分离来使软件的可重用性、可维护性、互操作性、可编制性以及轻便性实现,并将软件的开发效率提高。
在模型驱动架构中,模型成了软件开发的主干及核心,不再只是一种辅助沟通的工具和描绘系统,而且从不同的视角可以用不同的模型对一个系统进行描述。因此,MDA 中将这些模型分为了以下三个结构。
1)CIM(Computation Independent Model计算无关模型)
通常所讲的“业务模型”就是指计算机无关模型,这个层次的模型就只是对控制过程、步骤进行详细的表述,在如何用软件来实现控制过程、步骤方面毫无涉及。
2)PIM(Platform Independent Model平台无关模型)
这一层次的模型将如何用软件来实现控制过程、步骤方面进行了详细的表述,并将一些与基础功能毫无关系的技术细节进行了去除,所以用于构造平台无关模型的语言不仅要抽象性较高,与具体的细节能够互相脱离,必须还要能对系统的动态行为与静态结构进行精准的建模。
UML是与具体实现平台无关的建模语言,它利用图形符号标示系统中的对象和关系,在MDA中能精确、全面表达目标系统的静态结构和动态行为。
3)PSM(Platform Specific Model平台相关模型)
这一层次的模型是与代码一级最贴近的,能够将特定技术对软件系统功能具体的实现进行详细的描述,所以,用于构造平台相关模型的语言不仅必须要有一定的扩展性,还必须要具备足够的精确性,这样才能使与各种实现技术紧密挂钩的要求得到有效的满足。
1)分析、确定软件的业务需求,建立计算无关模型(CIM);
2)利用模型驱动软件开发的专用建模工具将业务模型(即PIM )的图形画出来,并注意不管使用的目标平台是什么,画出来的UML 模型都是相同的,因为这个UML 模型是核心的业务组件和服务的代表,与任何具体实现它的开发技术都毫无关系;
3)建立平台相关模型(PSM)画出来,并注意在这个阶段的模型图中,不仅指定与某种技术相关,而且还有某些特定技术的元素包含在内;
4)最后利用模型驱动的软件开发工具进行应用程序代码的生成工作,并对UML无法进行建模的细节开展填补工作,手动编写代码。
目前,可通过软件工具完成PIM到PSM之间,以及模型和代码之间的自动转换。
统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML使用面向对象设计的建模工具,但独立于任何具体程序设计语言。UML可以从不同角度描述人们所观察到的软件视图,也可以描述在不同开发阶段中的软件的形态。UML可以建立需求模型、逻辑模型、设计模型和实现模型等。
UML采用一组图形符号来描述软件模型,这些图形符号具有简单、直观和规范的特点,开发人员学习和掌握起来比较简单。
UML为软件系统建立可视化模型。UML符号具有良好的语义,不会引起歧义;基于UML的可视化模型,使系统结构直观、易于理解;使用UML进行软件系统的模型不但有利于系统开发人员和系统用户的交流,还有利于系统维护。有了正确的模型就可以实现正确的系统设计,保证用户的要求得到满足,系统能在需求改变时站得住脚。对于一个软件系统,模型就是开发人员为系统设计的一组视图。这组视图不仅描述了用户需要的功能,还描述了怎样去实现这些功能。
UML为软件系统建立构件。UML不是面向对象的编程语言,但它的模型可以直接对应到各种各样的编程语言。例如,它可以使用代码生成器工具将UML模型转换为多种程序设计语言代码,如可生成C++,JAVA, Visual basic等语言的代码。
UML为软件系统建立文档。UML可以为系统的体系结构及其所有细节建立文档。不同的UML模型图可以作为项目不同阶段的软件开发文档。
对象管理组织OMG 决定在对UML2.0 的子集进行重用和扩展的基础上,提出一种新的系统建模语言——SysML(Systems Modeling Language),作为系统工程的标准建模语言。和UML用来统一软件工程中使用的建模语言一样,SysML的目的是统一系统工程中使用的建模语言。它可以支持系统工程应用的多领域系统包含硬件、软件、信息等系统的需求分析、系统设计、功能描述、系统验证等。
AADL(Architecture Analysis & Design Language,架构分析和设计语言)主要用于对嵌入式实时系统的体系结构进行分析何设计,是一个支持MBE(Model Based Engineering )的建模基础架构。
模型驱动的软件开发方法为软件的开发和设计提供了新的思路,通过围绕模型进行软件的开发,实现了问题的统一描述,通过开发工具的使用,可以实现模型的自动转换,代码以及文档的同步生成,大大提高了软件的开发效率;下面给出了几种较为成熟的模型驱动的开发工具和平台。
IBM Rational Rhapsody是遵循UML/SysML的模型驱动的软件开发平台。Rational Rhapsody为系统工程师及软件开发者提供了可视化开发环境,以支持嵌入式和实时系统软件的设计开发。
通过Rhapsody的模型驱动体系结构可以快速地将与平台无关的应用模型部署到实时嵌入式操作系统。Rhapsody适应迭代设计与开发,软件开发可以在宿主机环境持续的执行和验证,继而生成嵌入式应用,下载到目标机进行测试。Rational Rhapsody 产品家族提供了多个版本来帮助系统工程师及嵌入式软件开发人员分析、设计、开发、测试和交付嵌入式及实时系统与软件。
对于系统工程师,Rational Rhapsody Architect for Systems Engineers基本版带来了采用SysML/UML的需求分析管理功能。Rational Rhapsody Designer for Systems Engineers基本版还包括了设计验证模拟功能。
对于软件开发人员,Rational Rhapsody Architect for Software版提供了逆向工程和支持 C、C++、Java 和 C# 的代码框架生成功能。Rational Rhapsody Developer版还额外提供了可视化开发环境,可以支持目标嵌入式实时操作系统(RTOS)的 C、C++、Java 和 Ada 行为代码生成。
SCADE是法国爱斯特尔技术有限公司的主要产品系列。SCADE是高安全性应用开发环境(Safety Critical Application Development Environment)的简称,用于开发达到航空业 DO-178B 标准的嵌入式软件。产品涵盖了高安全性嵌入式系统开发的各个内容和阶段。其主要产品有:
1)SCADE Suite:业内领先的面向高安全性的集成软件开发环境,通过采用scade语言和统一的形式化语义,可实现基于模型的设计、仿真、验证、认证级代码生成以及与其他开发工具和平台的交互。SCADE Suite代码生成器可以自动生成C代码和 Ada代码。SCADE Suite采用图形建模实现系统概要设计和详细设计后就能直接生成高安全性嵌入式代码,并且由于 SCADE 的代码生成工具 KCG经过认证,满足航空业 DO-178B 的 A 级标准,能够确保自动生成代码与模型设计完全一致,不会引入任何错误,可以省略所生成代码的单元测试 ,保证软件需求和代码执行的高度同步,具有开发周期短,安全性高,交互界面友好等优点。
2)SCADE Display:是一套灵活的面向高安全性图形显示和HMIs的设计与开发环境。是新一代图形软件开发平台,基于该平台可完成原型生成、设计仿真、验证和认证级代码生成等工作,可与 SCADE Suite 的联合仿真。SCADE Display能够帮助工程师进行嵌入式图形,显示和人机界面的开发和认证代码生成,用于高安全要求的显示系统,如驾驶舱,抬头显示,头盔,飞行管理系统,交通和防撞系统,以及车载导航系统和数字地图,符合最严格的质量标准和目标。
3)SCADE LifeCycle:主要功能包括需求和可追溯性管理工具、符合DO-178B标准的认证计划模板以及自动化文档生成器。
4)SCADE System:基于SysML和Eclipse 标准,通过使用SCADE System来联接 SCADE Suite、SCADE Display和SCADE LifeCycle,系统工程师和软件工程师可以在同一构架下工作,从而避免重复劳动以及系统结构和软件行为定义之间的偏差。
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理等领域。
Simulink是MATLAB中的一种可视化仿真工具, 是一种基于MATLAB的框图设计、建模和仿真环境,借助 Simulink能够将模型组合成一个系统级仿真,即使模型不是在 Simulink 中构建;能与Ansiy(有限元分析软件)、Saber、Rhapsody等多种软件进行协同仿真,具有多学科协同设计、仿真的优势。
基于模型的软件设计中,代码生成主要用到MATLAB Coder和Simulink Coder、Embedded Coder这三个工具。
MATLAB Coder用于从MATLAB的m函数生成 ANSI C/C++ 代码,同时也是使用Simulink Coder的一个前置条件。Simulink Coder是从Simulink模型来生成ANSI C/C++代码。Embedded Coder 则允许更进一步的针对MATLAB Coder或者Simulink Coder 生成的代码进行优化和定制,从而生成可以应用到嵌入式产品中去的产品级代码。
MATLAB Coder可从 MATLAB代码生成 C 和 C++ 代码,适用于从桌面系统到嵌入式硬件等多种硬件平台。支持大多数MATLAB 代码和各种工具箱。您可以将生成的代码作为源代码、静态库或动态库集成到您的项目。生成的代码可读且可移植。您可以合并现有的 C 代码和库,以保证算法关键部分的高效能或高可信代码的重用。您还可以将生成的代码打包为 MEX 函数,用于在 MATLAB 环境中执行验证或加速。
Embedded Coder增强了 MATLAB Coder 在生产方面的用途,支持代码自定义、目标特定的优化、代码可追溯性以及软件在环 (SIL) 和处理器在环 (PIL) 验证。
MATLAB Coder 利用范围广泛的 MATLAB 语言特性来生成代码,设计工程师使用这些语言特性来开发作为大型系统组件的算法。这包括来自 MATLAB 以及配套工具箱 的超过 1900 个运算符和函数。
Simulink Coder(以前称为 Real-Time Workshop)可从 Simulink模型、Stateflow图和 MATLAB函数生成并执行 C 和 C++ 代码。生成的源代码可用于实时和非实时应用,包括仿真加速、快速原型建立和硬件在环测试。
1)集成现有代码:可以使用 C Caller 模块或Legacy Code Tool合并手写的现有 C/C++ 代码,以便与生成的代码进行仿真和集成。
2)实时仿真与测试:使用硬件在环仿真和快速原型设计,在各种实时机器(包括使用 Simulink Real-Time的Speedgoat 目标计算机硬件)上测试嵌入式系统设计及建立原型。
3)部署到嵌入式目标:使用 I/O 模块库配置和访问外围设备及通信接口,在支持的嵌入式目标上运行模型中的代码。Simulink Coder支持众多厂家的硬件接口,包括TI的C2000 系统芯片。
4)调试参数和记录数据:使用 Simulink Coder,当代码在外部设备执行的同时,可以通过 XCP、TCP/IP 和串行 (RS-232) 通信从模型层传输信号,可以通过使用控制板模块中的示波器、仪表板和实时流数据图等查看数据和调试参数,以访问和优化您在Simulink中的设计。
Enterprise Architect 是Sparx Systems 公司的旗舰产品,它覆盖了系统开发的整个周期,除了开发类模型之外,还包括事务进程分析,使用案例需求,动态模型,组件和布局,系统管理,非功能需求,用户界面设计,测试和维护等。EA为用户提供一个高性能、直观的工作界面,联合UML 2.0最新规范,为桌面电脑工作人员、开发和应用团队打造先进的软件建模方案。EA 支持文档生成及部分代码生成。
MagicDraw UML是一款UML建模和面向对象系统设计分析工具。
1)仿真分析功能:支持模型调试和执行动画环境;支持用户交互界面建模和执行;内嵌求解器,支持与专业数学分析工具集成(Matlab/Simulink、Mathmatics、Maple、FMU 等)。
2)设计优化功能:提供SysML 参数模型和多学科分析模型接口,支持需求验证、权衡对比分析、设计空间探索、自动设计优化等功能。
3)自动代码生成功能:支持C/C++、Java、C# 语言的部分代码生成,能够从系统行为模型自动生成可执行代码,支持代码的仿真及目标环境执行功能。
4)自动文档生成功能
RTCASE实时系统结构分析/设计工具是专业性软件工程工具,完全支持实时系统软件的分析和设计,支持UML建模和代码框架生成。
STUDIO是欧洲Ellidiss公司开发的可视化建模工具,使用自上而下的建模方法以缩小模型与代码之间的差距,可以从AADL代码生成Ada代码和C++代码。
Capella是目前在欧洲航空航天界广泛应用的一种开源MBSE工具,其目的在于提供一种针对高安全性要求的复杂系统进行开发建模的图形化环境。
从上面几个常用的MBSE工具来看,针对嵌入软件设计,且只有SCADE Display支持图形界面软件的开发。
复杂软件可从两个维度定义:1)算法复杂度;2)架构复杂度;软件建模方法、建模工具选择可以从这两个维度确定。
1)算法复杂度低、架构复杂度低:手工编写软件;
2)算法复杂度高、架构复杂度低:采用Simulink建模,便于算法设计仿真,如伺服驱动器软件;
3)算法复杂度低、架构复杂度高:采用UML建模,如火控软件、车控软件、综控软件;
4)算法复杂度高、架构复杂度高:采用UML与Simulink联合建模,如飞控计算机软件;
UML是一种通用的建模语言,缺少对嵌入式领域的强力支持,因此采用专门的仿真软件可以弥补UML动态行为建模方面的不足。Simulink就是一款功能强大的仿真工具,支持在交互式、图形化环境中对动态系统进行仿真和分析。更重要的是,针对嵌入式的领域特点,Simulink提供了许多具有特殊功能的工具包,以方便软件开发人员使用。
Rhapsody 是开发反应式系统方面市场领先的环境,而 Simulink 是作基于模型的设计,开发动态控制和信号处理系统方面的组件。随着技术的发展,现在Rhapsody/ Simulink这两个工具均相互支持协同仿真,这两个工具的集成使开发者能够通过易于应用的建模环境来开发健壮的高质量的系统。
因此对于复杂系统,采用Rhapsody、Simulink这两个工具协同建模、设计、仿真、代码生成,使用Rhapsody完成软件的架构设计,使用Simulink完成软件中的算法设计,最后进行协同仿真、模型验证。
使用SCADE一套软件(含SCADE Suite和SCADE Display)即可完成图形化软件的开发,代码生成率高,可靠性好。
采用Rhapsody+Simulink+QT/VC三种类型软件工具协同使用,完成图形化界面的软件建模和开发。此方法中,软件设计采用MVC设计模型。MVC全名是Model View Controller,是模型(model)、视图(view)、控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分,采用UML/Simulink建模,使用Rhapsody/Simulink工具生成代码。View(视图)是应用程序中处理数据显示的部分,采用QT、VC等专业软件设计界面,这些工具支持很多的控件,并且有很多第三方控件库支持,采用拖、拽方式设计界面,能自动生成绝大多数代码。Controller(控制器)是应用程序中处理用户交互的部分;一般程序员手动编写代码。
随着时代的进步,基于模型的软件开发模式成为软件系统创新的新路径,为软件开发率的提高,软件的可移植性增强以及文档编制的便利性等方面都进行了创新。
目前基于模型的软件开发方法还是严重依赖的工具的一种开发方式,商用MBSE设计工具各有优缺点,单个MBES工具不能完全独立完成一个复杂软件的开发,而多个MBES工具协同建模、开发、代码生成,必然存在接口、代码风格不统一等多种问题,仍需要程序花费大量时间进行手工编码;而且有些工具不能完全确保生成的代码的完全正确性,还需要进行软件测试以及手工更改部分代码。虽然存在一些不足,但基于模型的软件开发模式在嵌入式软件设计、复杂软件的部分功能设计、软件原型设计中应用广泛。
参考文献
[1]赵晓峰. 模型驱动的软件开发模式研究[J]. 信息技术与信息化. 2015(7)
[2]郭鹏,李亚辉等. 面向嵌入式软件开发的UML到Simulink模型转化方法[J]. 计算机科学, 2016(2):192–198
[3]傅亮. 基于 SCADE 模型驱动的软件集成设计[J]. 航空电子技术. 2013(09):26–30
[4]王西超等. 基于Rhapsody的飞控系统虚拟样机设计环境[J]. 振动、测试与诊断. 2013(2)
[5]周彰毅等. 基于SCADE的航空发动机FADEC软件开发[J]. 测控技术. 2018(1)
[6]UML百度百科