基于AndroMDA的实时系统代码生成技术研究
2010-09-02苑春春孔祥营凌云锋
苑春春,孔祥营,凌云锋
(中国船舶重工集团公司江苏自动化研究所,江苏 连云港 222006)
目前,实时系统广泛应用于工业、国防、交通、能源、医疗卫生以及日常生活等领域,并发挥着极其重要的作用。但由于硬件、性能等约束,实时系统软件的开发通常要比非实时系统软件的开发困难许多[1]。代码生成技术是一项利用计算机程序来产生其他程序的技术,应用此技术可有效提高软件开发的质量和效率[2]。因此,将代码生成技术应用到实时系统软件的开发中是一件有必要且很有意义的工作。
LACATRE[3-4]是一种用于实时多任务应用的图形化软件设计工具,它以图形化方式支持软件的设计和代码生成。该工具可支持任务、中断及信号量等对象,并生成相应的代码,具有直观和操作简便的优点。但由于其抽象层次较低,代码生成效率并不高。MDA[5-6]也是利用图形化的开发工具对软件进行开发。它以UML为工具进行图形化建模,并将模型区分为描述系统业务功能的PIM和描述系统在特定技术平台上实现的PSM,通过PIM到PSM的转换和PSM到代码的转换,完成软件系统的开发过程。MDA对于提高软件的生产效率、可移植性、可复用性、可维护性等方面,都产生积极地影响,然而目前并没有面向实时系统的MDA工具。本文基于开源软件AndroMDA,以VxWorks操作系统[7-8]为平台,研究和设计了实时系统的PIM到PSM、PSM到代码的转换规则和实现算法。最后通过实际效果验证,该技术能有效提高实时系统软件开发的效率和质量。
1 AndroMDA简介
AndroMDA[9-10]是遵循MDA规范的一个开源的开发工具。AndroMDA导入由建模工具生成的以XMI文件形式表示的PIM,将其实例化为语法抽象树;然后对实例化后的PIM进行遍历。在此过程中,AndroMDA生成相应的Metafacade对象,通过该对象将PIM转换为相应的PSM;再通过模板引擎及相应的模板文件,将PSM转换成代码。
AndroMDA由Cartridge、Metafacade、Repository、Template Engines和Translation Libraries等组件组成。其中,Cartridge是AndroMDA模型转换过程中的核心组件,它的功能是提取加了扩展机制或满足特定推断条件的UML元素并进行处理;Metafacade从模板中获取模型的API,简化模板的工作;Repository是负责存储PIM的主要组件;Template Engines是负责代码生成的组件;Translation Libraries将OCL转换成为特定平台的代码,实现代码的约束和查询。
现在AndroMDA主要用于生成J2EE平台上的代码,通过修改和扩展AndroMDA的组件,可设计出生成其他平台代码的工具。
2 实时系统模型转换规则研究
模型转换规则研究包括分析平台技术,设计其PSM元模型,以及设计PIM到PSM和PSM到代码的转换规则[9]。本文主要研究类图及状态图这两种UML图的转换规则,其中类图实现任务、中断和通信的静态结构,状态图实现任务或中断的动态行为。
2.1 PSM元模型
PSM元模型描述PSM的语义,它代表了PSM所属平台的核心概念和关键技术。实时系统的核心概念包括有可编程对象和可配置对象[3]。可编程对象是应用程序中产生动作的实体,并体现了信息转换的过程。在VxWorks平台中,可编程对象有任务(Task)、信号(Signal)、中断服务程序(ISR)和看门狗(Watchdog Timer)等。可配置对象用于可编程对象之间的通信和同步。在 VxWorks平台中,可配置对象有信号量(Semaphore)、消息(Message)、消息队列(Message Queue)、和管道(Pipe)等。
根据上述概念,本文给出VxWorks平台的PSM元模型如图1所示。
图1 VxWorks的PSM元模型
2.2 PIM到PSM的转换规则
在 AndroMDA中,PIM到 PSM的转换是由Metafacade类来实现的。PIM与PSM之间的转换可以看作是对PIM的Metafacade类的操作,这些操作的返回结果是一个 PSM 的元对象,操作的算法则是 PIM到PSM的转换规则。本文设计的PIM到PSM的转换规则如下:
1)PIM中实现任务的类对应着PSM中的一个任务,此类的状态机对应任务的具体实现过程。
2)PIM中实现中断的类对应着PSM中的一个中断(中断处理程序调用、看门狗程序调用、信号中断调用等),此类的状态机对应中断的具体实现过程。
3)PIM中实现通信的类对应着PSM中的一个通信(二进制信号量、互斥信号量、计数器信号量、消息队列、管道等)。
4)如果PIM状态机中迁移的触发事件是并发事件,此迁移对应一个并发任务调用。
5)如果PIM状态机中迁移的触发事件是中断事件,根据中断事件所属类的类型,此迁移分别对应着中断处理程序调用、看门狗程序调用、信号中断调用等中断的调用。
6)如果PIM状态机中迁移的触发事件是通信事件,根据通信事件所属类的类型,此迁移分别对应着二进制信号量、互斥信号量、计数器信号量、消息队列、管道等通信的调用。
根据上述模型转换规则,可以实现如图2所示的Metafacade类模型。
在AndroMDA中,通过在PIM元模型上添加扩展机制(UML profile),解决转换过程中信息不明确的情况[9]。由于扩展机制一般是根据相关平台的特征设计的,所以扩展后的PIM在一定程度上会带有与PSM所属平台相关的信息,降低 PIM 的平台无关性。但PIM与PSM的概念本就是相对的,并没有绝对的平台无关[6],所以将PIM保持在一个相对较大程度的平台无关即可。由此本文提出设计扩展机制的一个基本原则:通过领域分析,将扩展机制设计为与领域平台保持一定相关,而与此领域内具体实现技术平台保持无关,通过这种方式保持PIM较大程度的平台无关性。
图2 Metafacade类模型
本文设计的扩展机制如表1、表2所示。可以看出,这些扩展机制都不是VxWorks平台所特有的,而是所有实时系统都具有的特征,它们同样可以应用于其他的实时系统平台。所以这些扩展机制虽然与实时系统平台相关,但与VxWorks平台仍保持较大程度的平台无关,符合本文提出的设计原则。
表1 本文设计的构造型扩展机制
2.3 PSM到代码的转换规则
PSM到代码的转换主要由Cartridge组件负责。Cartridge组件对PSM进行分析,并通过相应的模板文件将PSM转换为代码文件。
本文主要针对状态图提出转换规则。状态图由状态和状态间的迁移组成,在转换过程中,状态图中的状态转换为任务或中断的过程或执行点;状态之间的迁移转换为任务或中断对其他实时对象的调用语句;任务或中断的循环、条件等控制语句则是在对状态图结构的有限遍历分析得出的。
表2 本文设计的标签值扩展机制
2.3.1 状态转换规则
状态图中的状态可分为伪状态、简单状态和复合状态。
伪状态又可分为初始状态、终止状态、选择状态和历史状态等。初始状态表示程序开始运行;终止状态表示程序执行结束,转换为删除语句或结束语句;选择状态表示程序的条件控制语句,结合迁移中的监护条件,实现程序的选择语句;历史状态表示先前被激活的状态,转换为任务恢复语句。
简单状态转换为程序的执行点,可通过状态的动作来说明此段程序的具体执行语句。
复合状态中的或状态代表了一组顺序执行的子状态,转换为程序中相应的顺序执行语句。复合状态中的与状态代表了多个并发执行的子状态,结合迁移中的并发事件,转换为程序中对多个并发任务的任务激活语句。
2.3.2 迁移转换规则
状态间的迁移由源状态、触发事件、监护条件、动作和目标状态组成。
由前文可知,本文设计的触发事件有四种:并发事件、中断事件、接收事件和发送事件。并发事件表示对并发任务的调用,转换为任务调用语句;中断事件表示对中断事件的响应,根据中断事件的类型,转换为中断服务程序、信号或看门狗的中断调用语句;接收/发送事件表示对通信的接收/发送,根据通信事件的类型,转换为信号量、消息或管道的调用语句;迁移的动作是迁移中所需执行的计算处理过程,转换为对事件调用语句,调用语句的具体实现在迁移事件的动作列表中表明。
监护条件结合源状态和目标状态,转换为循环或条件控制语句。
2.3.3 控制语句转换规则
状态图中的选择状态、监护条件以及迁移的流出方向,一起决定了程序的控制语句。由于控制语句本身的复杂性,控制语句的转换规则较为复杂,为方便对状态图的控制算法的分析。首先定义以下术语:
1)路径:状态图中任何状态的序列及状态间的迁移称为路径。
2)循环路径:起始于状态S,经过状态间的迁移又返回到状态S的路径称为循环路径。
3)循环起始状态:对状态图从初始状态进行深度优先搜索时,在循环路径中搜索到的第一个状态称为这个循环路径中的循环起始状态。
4)循环终止状态:这个状态处于循环路径中,且其目标状态是此循环路径的循环起始状态。这个状态称为循环终止状态。
5)完整路径:从初始状态到终止状态或到循环终止状态的路径称为完整路径。
本文设计的状态图控制算法的主要转换规则如下:
1)如果状态 S是初始状态,则表示状态图的分析开始。
2)对所有循环路径,如果状态 S是这个循环路径的循环起始状态,有以下转换规则:
a)在循环路径上的流出迁移和流入迁移均无监护条件,则转换为 forever语句,循环路径上转换为forever语句的循环体。
b)在循环路径上的流出迁移无监护条件,但流入迁移有监护条件,则转换为do-while语句。语句的循环体为其循环路径,循环条件为此监护条件。
c)在循环路径上的流入迁移无监护条件,但流出迁移有监护条件,则转换为while语句,语句的循环体为其循环路径,循环条件为此监护条件。
d)在循环路径上的流出迁移和流入迁移均有监护条件,则在转换规则c)的基础上,在循环体内最后加上do{}while语句,while的条件是(!监护条件)。
3)如果状态 S不是循环起始状态或循环终止状态,有以下转换规则:
a)流出迁移有监护条件,则转换为if语句,语句的选择体为这条路径,条件为此监护条件。
b)状态S有多个流出迁移,触发事件相同,监护条件不同,则转换为switch-case语句形式,case中的条件为相应流出迁移上的监护条件。
4)如果状态 S是链接状态,则将两个监护条件合并为判定式的与关系。
5)如果状态图上所有完整路径都被分析过,表示此状态图的分析完成。
3 原型实现及验证
3.1 实现算法
为了实现代码的生成,需要对每个状态图进行两次遍历。第一次遍历是找出状态图中所有的完整路径,并当这些路径中含有循环路径时,记录下此循环路径的循环起始状态和循环终止状态。第二次遍历是在第一次遍历的基础上,对每一个路径结合第一次遍历的结果进行分析,并按照相应的转换规则生成代码。两次遍历的具体算法如图3所示。
假设一个状态图中有k条完整路径,m个状态,n个迁移。易知,第一次遍历所需的时间复杂性是O(km),空间复杂性也为 O(km)。假设按照转换规则生成代码的时间O(1),则第二次遍历所需的时间复杂性也为O(km)。所以上述算法的时间复杂性和空间复杂性均为O(km)。又因为在状态图中,除终止状态外,每一个状态至少引出一条流出迁移。如果每一条流出迁移,表示此状态引出一条路径。所以当(1)状态图中有终止状态时,k=n+1-m+1=n-m+2;(2)状态图中无终止状态时,k=n-m+1。由此可推出,算法的时间复杂性和空间复杂性均为O(nm)。
图3 两次遍历的算法活动图
3.2 应用效果分析
本文根据上述转换规则及实现算法,已实现AndroMDA的实时系统代码生成工具RT-AndroMDA的原型。利用代码生成工具生成的实时系统软件,其正确性和时效性等性能一方面与软件开发人员的设计有关,另一方面也与代码生成工具对软件开发人员建模的支持能力及模板的完整度有关。后者也是评价一个代码生成工具有效性的重要标准。模板由代码生成工具的设计者编写,这些模板除编写模板的语言外并无太大差别,它们经过修改,都能生成一样的代码。而各种代码生成工具对于建模的支持能力差别较大。LACATRE仅支持流程图式的建模,不能对算法流程外的其他软件特性进行建模。而且它也不支持模型的嵌套开发,使得建立的模型较为复杂。另外,它仅覆盖软件生命周期的设计和编码两个阶段,抽象层次较低。而RT-AndroMDA利用UML等技术克服了上述缺陷,它支持软件开发人员通过用例图、类图、状态图等 UML图对软件的各种特性进行建模。同时它支持模型的嵌套开发,有效的降低了建模的复杂性。另外由于PIM的平台无关性,也使其抽象性得到提高,支持软件生命周期从分析到测试的各个阶段,有利于模型的移植和复用。
在实际应用中,本文利用RT-AndroMDA实现了共8777行代码的一个实时系统软件,其中自动生成代码约 6500行,约占总代码量的 74%。为进一步考察此工具的效果,本文结合以往的经验数据,对传统方法、LACATRE方法和本文设计的方法进行对比。结果如表3所示。
表3 实际应用效果比较
由表3可知,使用RT-AndroMDA在进行软件开发时所需的工作量减少了47%,缺陷率也减少60%。这说明RT-AndroMDA对实时系统的软件的开发效率和质量都由提高。不过也可看到,虽然工具生成约74%的代码,但是工作效率和质量并没有提高这么多。其主要原因是:软件开发人员在建模过程中要比纯手工编码时的建模过程需要关注更多的细节,所以导致建模过程时间较长,也较易有疏漏。另外开发人员也需一定时间熟悉此工具。
4 结束语
本文研究了基于开源软件 AndroMDA的实时系统代码生成技术,分析并设计了实时系统PIM到PSM及PSM到代码的转换规则和实现算法。通过应用这些转换规则和实现算法,本文已初步实现了类图及状态图到实时系统代码的转换生成。经过应用效果分析可知,AndroMDA对实时系统软件的开发效率和质量都有较大提高。下一步的工作是进一步完善转换规则和实现算法,并研究其他UML图如顺序图的模型转换,以更好的实现实时系统的代码生成。
[1]Bruce Powel Douglass.Real Time UML:Advances in The UML for Real-Time Systems[M].Third Edition.USA,Addison-Wesley, February 20,2004.
[2]Jack Herrington.Code Generation in Action[M].USA,Manning, 2003.
[3]Schwarz J.J., Skubich J.J., Szwed P., Maranzana M.Real Time Multitasking Design with Graphical Tool[C].First IEEE Workshop on Real Time Applications,New-York,USA, May 1993.
[4]刘晓燕,字天文,张云生,等.UML-RT到一个实时多任务执行模型的转换[J].计算机科学,2007,34(7):275~278.
[5]OMGMDA guide version 1.0.1.http://www.omg.org/mda/.
[6]Anneke Kleppe, etc.解析MDA[M].鲍志云译.北京:人民邮电出版社,2004.
[7]Wind River.VxWorks Programmer’s Guide 5.4[M].Wind River System Inc,May 1999.
[8]孔祥营,柏桂枝.嵌入式实时操作系统VxWorks及其开发环境Tornado[M].北京:中国电力出版社,2001.
[9]droMDA.andromda-docs-3.3http://www.andromda.org/.
[10]蔡斌辉.AndroMDA模型转换组件开发方法的研究与应用[D].合肥工业大学硕士学位论文,2006.