一种验证uml模型中动态行为与时序契约的一致性的方法

文档序号:6482392

专利名称::一种验证uml模型中动态行为与时序契约的一致性的方法
技术领域
:本发明属于软件开发
技术领域
,尤其涉及一种验证统一建模语言UML模型中动态行为与时序契约的一致性的方法。
背景技术
:面向服务架构(SOA)是一种架构模型,它可以根据需求通过网络对松散耦合的粗颗粒应用组件进行分布式部署,组合和使用。服务层是SOA的基础,而SOA服务必须由契约,接口和实现组成。而契约是服务共享和重用得以实现的基础,契约式设计和SOA的结合为软件开发和重用带来了诸多益处。统一建模语言(UML)是现今分析和设计软件系统最为常用和有效的方法之一,通过动态模拟模型的行为,不但可以准确的描绘系统需求,还可以通过验证方法在建模的初期发现模型中存在的问题,这也是模型驱动式(ModelDriving)软件开发的目标所在。如何能够让UML模型满足某些特性而又不出现错误则是设计时应该考虑的一个重要问题,而模型检测是一种能够非常有效提高系统可靠性的自动化技术。模型检测主要分三部分的工作,其中包括对系统进行形式化建模,精确表达系统约束以及验证模型是否满足给定约束。状态图(StatechartDiagram)是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的时间做出反应,状态图的创建通常是为了研究类,角色,子系统或者组件之间的复杂关系。状态图用于显示状态机(状态机指定对象所在的状态序列),使对象达到这些状态的事件和条件,己经达到这些状态时所发生的操作。顺序图(SequenceDiagram)同样是种动态建模方法,它表示对象间消息传递的顺序关系,它可以表达成对象动态行为的时间契约,很好的约束模型中对象间的动态行为。研究状态图和顺序图之间的一致性关系可以很好的分析模型中对象的动态行为是否满足其定义的时间契约,从而有效分析UML动态模型间的关系,对于保证软件开发初期需求模型的正确性和可重用性有着很大的作用。4系统属性的描述方法有很多种,其中时序逻辑被证明能够很有效地描述系统属性,其中最为常用的是线性时序逻辑(LTL)。它能有效地描述模型中的时序和逻辑关系。模型检测工具SPIN能够有效地对并发系统进行建模并检测,但由于其建模语言PROMELA是一种类C的代码语言,因此通过PROMELA来精确描述系统并不是一件很容易的事情,而这是UML在模型描述上的优势所在,同时将UML图形转换为PROMELA代码也成为模型检测的有效手段之一。然而,目前没有一种通用的办法将模型的动态行为和时间契约用模型验证工具有效联系起来,给基于UML模型中的动态行为与时序契约一致性检测带来了很大困难。
发明内容本发明的目的是提供一种验证统一建模语言UML模型中动态行为与时序契约的一致性的方法,解决软件开发需求设计阶段所出现的模型不一致性的问题,为面向服务架构SOA和契约式设计的组合运用提供模型级的标准化技术解决方案。本发明的技术方案是,一种验证UML模型中动态行为与时序契约的一致性的方法,其特征在于,包括以下步骤Al,根据UML标准建模,包括生成UML状态图和UML顺序图,保存图形的元模型;A2,对所建模型的动态行为,实现UML状态图到PROMELA代码的映射;A3,构建所建模型时序契约,实现UML顺序图到LTL时态逻辑公式的映射;A4,利用模型验证工具SPIN对所述PROMELA代码和所述LTL时态逻辑公式进行验证;A5,分析返回的所述的SPIN验证结果。所述步骤A1中生成的UML状态图具有的属性包括触发时间、迁移动作和状态图守卫条件,UML顺序图具有的属性包括顺序图守卫条件和到达状态。所述步骤A2包括以下步骤Bl,遍历所述UML状态图得到所述保存的状态图元模型;B2,抽取所述的状态图元模型中的动态行为,转化为层次状态机;B3,根据所述的层次状态机使用PROMELA语言建模,得到PROMELA代码。所述步骤A3包括以下步骤Cl,遍历所述UML顺序图得到所述保存的顺序图元模型。C2,构建所建模型的时序契约,生成所述的LTL时态逻辑公式。所述步骤A4包括以下步骤Dl,将所述状态图转换得到的PROMELA代码保存在SPIN包下的panjn文件中;D2,将顺序图装换得到的LTL时态逻辑公式进行处理,得到符合SPIN语法的NeverClaim代码,并储存在SPIN包下的pan.ltl文件中;D3,提取SPIN中的参数设置创建批处理文件来模拟SPIN工具的选择环境,选择相应的参数,执行批处理文件,用指定的参数调用SPIN进行验证。所述步骤A5包括以下步骤El,所述SPIN验证结果生成于SPIN目录下的pan.out文件中,将pan.out中的结果提取出来解析验证结果并输出;E2,如果在所述的PROMELA所建的模型中找不到所述的LTL时态逻辑公式所描述可到达的路径,则表示所述模型的动态行为满足其时序契约,反之则表示所述模型的动态行为不满足该模型的时序契约。本发明的有益效果是,将模型的动态行为和时序契约联系起来,并利用验证工具对两者一致性进行验证,保证了需求建模的准确性和可重用性,为模型驱动式软件后续开发的有效进行奠定基础,为SOA服务组合提供了模型级的一般解决方案。图1是本发明一实施例的方法的实现步骤示意图图2是本发明一实施例的方法中对状态图动态行为建模的流程示意图图3是本发明一实施例的方法中状态图元模型所保存成的状态机的示意图图4是本发明一实施例的方法中由状态机所分解得到的层次状态机的示意图图5是本发明一实施例的方法中对顺序图构建时序契约的流程示意图图6示出本发明一实施例中用TrustableMDA构建的状态图模型示意图图7示出本发明一实施例中用TrustableMDA构建的顺序图模型示意8示出本发明一实施例中表示动态行为不满足时序契约时,返回模拟的状态示意图具体实施例方式以下结合附图对本发明的具体实施方式作详细说明。如图1所示,本发明的方法可以包括以下5个步骤步骤S101,根据UML标准建模,包括UML状态图和顺序图,并保存图形的元模型,这是为了后面的代码映射做准备;步骤S102,构建模型动态行为,实现状态图映射到PROMELA代码的算法;步骤S103,构建模型时序契约,实现顺序图映射到LTL时态逻辑公式的算法;步骤S104,利用模型验证工具SPIN将2和3中得到的PROMELA代码和LTL时态逻辑公式进行检验;步骤S105,收集返回的验证结果并判断模型动态行为是否满足其时序契约。其中,步骤SIOI中建模过程中定义元模型是采用UML建模语言制定,所建模型中迁移过程可具有以下属性1.状态图event(触发时间),action(迁移动作),guard(守卫条件);2.顺序图guard(守卫条件),EnterState(到达状态,目的是将时序契约和动态行为联系起来),message(消息传递)。根据建模者所建立的模型,以元模型的形式将图元保存下来方便后面的转换使用。如图6和图7可看到本发明建模的结果,即UML状态图和活动图,分别用来构建模型的动态行为和时序契约。其中,如图2所示,步骤S102中构建模型动态行为,即状态图映射到PROMELA代码的算法和实现过程如下步骤S201,读取已保存的状态元,在本步骤中以TrustableMDA构建的状态图模型是以状态机的形式保存,如图3所示,表现模型的动态行为,包括状态和迁移,以及状态中和状态之间的触发,动作和条件。其中sl到sll表示状态,同时sl又是复合状态,包含s4,s5两个子状态,以此类推。图示箭头表示状态间的迁移。状态间的转换迁移action(动作),event(触发器)和guard(守卫条件)来约束。而本实施例是将状态,转换,动作,触发器,守卫条件分别保存,通过互相间的属性标识来保存它们之间的关联。本步骤是用类似逆向工程的方法将保存好的图元读取出来,拼接成语义无误差的状态行为模型供步骤2中的转换使用;步骤S202,精化状态图的动态行为模型,转换层次状态机,将步骤S201中取出的图元保存为层次状态机形式,从而精化状态图动态语义模型,分解难以处理的复合状态。为后面步骤S203至步骤S208的具体转换算法提供入口。如图4所示,层次状态机将嵌套的状态剥离出来,将复杂的复合状态分开成了类似层次的状态机模型,可以很容易的使用迭代去遍历每个状态和转换;步骤S203,声明变量并初始化,状态图行为模型中的公用变量定义为PROMELA中的全局变量如intcl,c2,…,cn;boolbl,b2,…,bn,其中ci,bi从状态图中获取。状态图中的对象定义为一组顺序的int常量供通道使用,如#defineSourceObject0...#defmeEndObject1。状态图中的状态转换为bit型变量来模拟状态间的转换,形如sl,s2,s3,…,sn。状态图中的状态变化由si赋值来模拟,例如当某状态到达时,对应的状态变量si赋值为1,当迁移发生后到达下一个状态,si赋值为0,si+l赋值为1,而整个sl,s2,...,Sn的取值代表着模型在某一时刻的具体形态。状态图中的迁移上的动作Action转换为mtype类型如{al,a2,a3,...,an},ai表示迁移上的具体活动事件,用于表达状态图迁移的事件;步骤S204,声明通道chan形如event—queue[number_objects]=[queue—size]of{mtype},通过通道传递mtype中的变量来表示迁移的发送和接收。初始化操作是通过将初始状态所对应的bit变量赋值为1,形如atomic{initialState=1;};如果只转换一个状态图将不牵涉到交互情况,如果同时对两个或者多个状态图进行转换,其交互行为表达为源对象发送mtype变量表示的将要发生的活动消息(event—queue[SourceObject]!!Action),末对象接收源状态发送的活动消息(event一queue[EndObject]Action),通过通道对消息的传递来表达多个状态图之间的状态迁移;步骤S205,定义转换条件,转换条件定义为#defineCondition(i)(SourceStates&&Trigger&&Guard)。其中i=l,2,...,n,代表转换条件的编号;SourceStates表示迁移Transition的源状态,也就是层次自动机中的上一个状态(注可能是包含父状态和子状态的复合状态);Trigger表示迁移的触发事件,即是迁移上的动作事件,也是通道中传递的mtype变量的发送接收情况;Guard表示状态图中迁移定义的守卫条件;8步骤S206,定义转换,算法每次从转换条件选择满足的条件,随后改变退出状态,进入状态的赋值,接收上面迁移发送的动作,并发送后面迁移的动作,形如如下伪代码if::Condition(1)->event—queue[SourceObject]Action(1);ExitStates(1)=0;EnterStates(1)=1;event—queue[EndObject]!!Action(2);::Condition(n)->event—queue[SourceObject]Action(n);ExitStates(n)=0;EnterStates(n)=1;event—queue[EndObject]!!Action(n十1);fi该算法是通过循环语句筛选满足的转换条件,如果有多个条件同时满足,则从所有if条件中随即选择。该转换算法的含义如下当转换条件Condition(i)满足并选取时,接收进入迁移动作,退出状态集有1置为0,进入状态集由O置为1,发送退出迁移动作。同时需要使用assert(len(event—queue[]<=queue—size))语句实时判断用于表达迁移的通道的容量是否足够,以免引起死锁;步骤S207,判断终止条件。算法需要在每一次迁移后判断模型是否到达了终止状态,如果到达程序退出,否则进入下一个迁移。其伪代码形如Check:if::FinalState1->break;::FinalStateN->break;::else->skip;fi步骤S208,将以上步骤得到的PROMELA代码进行拼接,去除重复和无效部分,将其存入SPIN目录下的panjn文件中,并利用函数SytaxCheck对其进行PROMELA语法检测,保证转换代码的语法正确性。状态动态行为的获得首先是根据步骤S101中图形保存的元模型将其转化为层次自动机(采用层次自动机是为了去除状态图中嵌套的层次结构),然后通过读取层次自动机根据上述步骤所述的算法来生成对应的Promela模型,包括初始化,定义转换条件,定义所有转换,判断终止状态等。所得到的Promela模型将保存在Spin包下的pan—in文件中,作为步骤S104的入口参数使用。其中所使用的主要函数描述如下表h表1StringdeclareVariable()参数说明此函数使用的是根据图元模型所剥离出的全局变量返回返回PROMELA变量声明描述此函数实现了状态图转PROMELA的变量声明,理念是将每一个状态声明为一个bitStringdeclareEventMtypeO参数说明此函数使用的是根据图元模型所剥离出的全局变量返回返回PROMELA的触发事件描述此方法定义触发时间,前提是图形中有定义相应的event事件StringdeclareChannelO参数说明此函数使用的是根据图元模型所剥离出的全局变量返回返回PROMELA的通道描述此方法声明通道,用于模拟多个状态图之间的交互StringdeclareAUStatesBit()参数说明此函数使用的是根据图元模型所剥离出的全局变量返回返回所有的转换条件描述此方法定义所有的转换条件StringdefProctype()参数说明此函数使用的是根据图元模型所剥离出的全局变量返回返回所有的转换描述此方法定义所有的转换对于步骤S103中构建模型时序契约,如图5所示,即将顺序图映射到LTL时态逻辑公式的算法和实现过程如下首先,对顺序图到LTL的转换给出一些定义。定义1:本实施方法是将契约式设计思想提升到模型级别,利用顺序图中的时序关系约束状态图中的动态行为,鉴于LTL线性时态逻辑公式能够有效地描述模型中的时序和逻辑关系,本实施方法将顺序图中的消息顺序抽象成契约式设计中的Pre/PostCondition。例假设顺序图中有3条顺序的message(这里指异步消息),称作ml,m2,m3,称ml为行为m2的pre-condition,m3为行为m2的post-condition。注1:这里定义的LTL时态逻辑公式是SPIN验证工具所支持的公式类型已经语法,与SPIN中所建的PROMELA模型在语法上是匹配的。注2:这里已默认PROMELA模型已经由UML状态图映射得到。定义2:假设顺序图中有两条message(这里指异步消息),称作ml,m2,其顺序是先发送消息ml后发送消息m2,这代表两条异步消息传递的先后顺序(这里不考虑可能出现的判断条件或者是循环等特殊情况),因此用LTL公式<>(1111&&<>1112)表示。其中,o代表时态中的存在,&&代表逻辑中的and,因此定义2中的LTL公式的含义是存在一条比消息m2先发送的消息ml。根据定义l,ml便是限帝!j行为m2的pre-condition。引理l:对于顺序图中出现若干条message,ml,m2,m3,…,mn。假设其顺序是按照ml,m2,m3,...mn的顺序来发送的(这里不考虑可能出现的判断条件或者是循环等特殊情况),因此可以得到LTL公式(ml&&om2)&&o(m2&&<^m3)&&...&&o(m(n-l)&&oinn)此构建避免了可能出现的递归情况,大大提高了SPIN验证工具的执行效率。该引理可以得到所有消息也就是模型中行为的前置条件和后置条件。定义3:考虑到诸如循环,条件等特殊情况。一般认为这两类特殊情况并不影响定义2给出的LTL公式。对于循环,只需要把循环体作为一个整体,将其看做一个普通的消息进行传递,对于条件选择,只需要进行一次判断读取模型的初始变量。因此LTL公式的算法不需要单独对这两种情况进行处理,只需要将其以特殊情况对待即可。有了上述的定义,就可以通过顺序图得到相应的LTL时态逻辑公式。除此以外,还需要对LTL公式进行修饰,如前所述,一致性验证中使用的LTL公式至少要在在语法上要与状态图转化所得的PROMELA模型保持一致,这里要表达的是PROMELA模型和LTL时态逻辑公式要一定采用相同的变量声明。定义4:为了避免LTL公式的语法错误或者是逻辑混乱,并且能轻易的与状态图关联起来,为避免在LTL公式中使用具体的变量名称,取而代之的是虚拟遍历ml,m2,...。同时用变量声明将两者进行关联如下#definemlCardEntry。表达的是用虚拟变量ml定义CardEntry。这里要注意的是CardEntry指的是消息发送后对象进入的状态,也就是前面所述的EnterState,这样就将状态图和顺序图显示的联系起来,方便一致性检验的进行。根据以上4个定义,便可根据顺序图模型抽取模型中的行为的时序契约,并用LTL时态逻辑公式(包括变量定义和公式本身)表示,为了提高步骤三的验证效率的验证,本发明还利用NeverClaim批处理文件将得到的LTL时态逻辑公式(包括变量定义和公式本身)转换成NeverClaim语句作为入口参数让步骤四使用。在这里需要说明的是,将公式转化为NeverClaim形式是使用了类似反证法的思想,从'所有都对,到'有一个错误,,大大提高了验证效率。以下是此步骤所用的主要函数或类的说明,具体如表2所示表2StringGenerateLTLFormula(Listmessage)参数说明message是遍历顺序图时保存下来的消息队列返回若转换成功则返回LTL公式,否则抛出异常描述此方法根据前面所述的引理1和定义2将顺序图中取出的消息队列转换成时间语义上一致的时序契约,用LTL时态逻辑公式表示,并将其储存在字符串中返回。StringdeclareDefine(Listmessage)参数说明message是遍历顺序图时保存下来的消息队列返回若声明成功则返回LTL变量声明,否则抛出异常描述此方法根据前面所述的定义3将顺序图中取出的消息队列中的消息定义为指定的形式,并进行去除重复的工作,保持公式的精简性。StringdeclareNoteO参数说明返回若声明成功则返回添加的LTL公式说明,否则抛出12<table>tableseeoriginaldocumentpage13</column></row><table>注以上方法所得到的本发明步骤四使用的入口参数最终保存在SPIN目录下的pan.ltl文件中。归纳上述步骤S103的组成,包括以下步骤步骤S301,读取己保存的顺序元;步骤S302,将取出的消息message保存进消息队列;步骤S303,转换LTL公式;步骤S304,处理LTL公式;步骤S305,将LTL公式转化为NeverClaim形式;步骤S306,保存组合完成的LTL公式。对于步骤S104完成了对PROMELA模型和LTL时态逻辑公式(也就是动态行为和时序契约)之间的一致性验证。具体说明如下此时已得到的两个入口参数是pan—in中的PROMELA代码和pan.ltl中的LTL时态逻辑公式的NeverClaim形式,本发明利用批处理文件将SPIN接入自己开发的工具软件(TrustableMDA)中,完成了对验证功能的集成工作,为进一步实现其他验证方法奠定了基础。下面重点介绍一下本发明如何利用批处理文件来完成对SPIN的集成。第一步,根据一致性验证面板(也就是SPIN工具中LTLVerificationOption面板)中的选择按钮来收集参数段,这些参段数是用来判定面板中组合按钮和单选按钮的选择情况,并能够对其选择状态进行有效记录和保存。根据得到的参数段特点和按钮分布情况进行分割和分类,确定基础参数和组合参数;第二步,选择改变第一步中的6个基础参数,本发明具体实施时可以分别对对于不同的选择改变与否进行具体处理;第三步,生成批处理文件,集成SPIN验证功能。这里利用上面所得的可变参数和不可变参数以及SPIN验证工具生成批处理文件,将SPIN的LTLVerification的验证功能集成进来。以下表3是参数说明。表<table>tableseeoriginaldocumentpage14</column></row><table>对于步骤S105,实现了对返回的验证结果并分析模型中状态的动态行为是否满足其时序契约,如果不满足将对产生错误情况提供返回模拟功能(如图8所示)帮助用户找出错误修改模型。用户可以选择单步模拟或者多步模拟来观察模型的状态,迁移以及图形间的关系,并判断模型模拟方向是否是建模者自己的原意,达到检査模型并进一步理解模型的作用,大大的方便了建模者对模型的理解和设计。本发明的技术方案将模型检测工具SPIN作为验证引擎,根据UML2.0状态图的动态语义模型将状态图动态行为转换为SPIN的输入语言PROMELA,并将顺序图表达的时序契约转换为时序逻辑公式LTL。利用SPIN能够验证LTL公式的特性,实现模型检测UML模型中的动态行为是否满足其时序契约,从而确保系统动态行为之间的一致性。可见,本发明提供的技术方案将契约式设计的思想由代码级提升至模型级别,是模型驱动式开发初期模型检测中动态模型间一致性检测的基础,在本发明采取的方法基础上可进一步实现对模型内外部的一致性的检测,并广泛用于SOA服务层设计之中。权利要求1、一种验证UML模型中动态行为与时序契约的一致性的方法,其特征在于,包括以下步骤A1,根据UML标准建模,包括生成UML状态图和UML顺序图,保存图形的元模型;A2,对所建模型的动态行为,实现UML状态图到PROMELA代码的映射;A3,构建所建模型时序契约,实现UML顺序图到LTL时态逻辑公式的映射;A4,利用模型验证工具SPIN对所述PROMELA代码和所述LTL时态逻辑公式进行验证;A5,分析返回的所述的SPIN验证结果。2、如权利要求1所述的验证UML模型中动态行为与时序契约的一致性的方法,其特征在于,所述步骤A1中生成的UML状态图具有的属性包括触发时间、迁移动作和状态图守卫条件,UML顺序图具有的属性包括顺序图守卫条件和到达状态。3、如权利要求1所述的验证UML模型中动态行为与时序契约的一致性的方法,其特征在于,所述步骤A2包括以下步骤Bl,遍历所述UML状态图得到所述保存的状态图元模型;B2,抽取所述的状态图元模型中的动态行为,转化为层次状态机;B3,根据所述的层次状态机使用PROMELA语言建模,得到PROMELA代码。4、如权利要求1所述的验证UML模型中动态行为与时序契约的一致性的方法,其特征在于,所述步骤A3包括以下步骤Cl,遍历所述UML顺序图得到所述保存的顺序图元模型。C2,构建所建模型的时序契约,生成所述的LTL时态逻辑公式。5、如权利要求1所述的验证UML模型中动态行为与时序契约的一致性的方法,其特征在于,所述步骤A4包括以下步骤Dl,将所述状态图转换得到的PROMELA代码保存在SPIN包下的pan—in文件中;D2,将顺序图装换得到的LTL时态逻辑公式进行处理,得到符合SPIN语法的NeverClaim代码,并储存在SPIN包下的pan.ltl文件中;D3,提取SPIN中的参数设置创建批处理文件来模拟SPIN工具的选择环境,选择相应的参数,执行批处理文件,用指定的参数调用SPIN进行验证。6、如权利要求1所述的验证UML模型中动态行为与时序契约的一致性的方法,其特征在于,所述步骤A5包括以下步骤El,所述SPIN验证结果生成于SPIN目录下的pan.out文件中,将pan.out中的结果提取出来解析验证结果并输出;E2,如果在所述的PROMELA所建的模型中找不到所述的LTL时态逻辑公式所描述可到达的路径,则表示所述模型的动态行为满足其时序契约,反之则表示所述模型的动态行为不满足该模型的时序契约。全文摘要本发明涉及一种验证统一建模语言UML模型中动态行为与时序契约的一致性的方法,其特征在于,包括步骤根据UML标准建模,包括生成UML状态图和UML顺序图,保存图形的元模型;对所建模型的动态行为,实现UML状态图到PROMELA代码的映射;构建所建模型时序契约,实现UML顺序图到LTL时态逻辑公式的映射;利用模型验证工具SPIN对所述PROMELA代码和所述LTL时态逻辑公式进行验证;分析返回的所述的SPIN验证结果。本发明的技术方案将统一建模语言UML同验证工具联系起来,解决了软件工程需求设计阶段所出现的模型不一致性的问题,为模型驱动式软件后续开发的有效进行奠定基础。文档编号G06F9/44GK101673198SQ20091004716公开日2010年3月17日申请日期2009年3月6日优先权日2009年3月6日发明者静刘,宫学强,玲尹,曹虹华,杜德慧,越谢申请人:华东师范大学
再多了解一些
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1