面向协同建模的UML模型合并与一致性检测方法及系统

文档序号:26138954发布日期:2021-08-03 14:22阅读:90来源:国知局
面向协同建模的UML模型合并与一致性检测方法及系统

本发明属于软件工程中协同建模领域,特别涉及一种面向协同建模的uml模型合并与一致性检测方法及系统。



背景技术:

随着分布式软件协同开发和敏捷开发技术的快速发展,软件开发团队成员之间协作、通信和协调的方法变得越来越重要。尤其是近年发生的“新型冠状病毒”疫情,导致很多大企业只能进行远程办公,不同地点不同职位的工作人员,在互联网上通过协同进行工作,这种基于互联网的远程协同工作方式越来越受到人们的关注与重视。这要求在软件协同建模、协同研发与协同部署等领域对技术进行不断的探索。

软件协同建模是指多主体借助网络技术,相互通信、共同协作来完成整个软件建模的过程。通过可视化的协同建模工具,不同研发人员可对其负责的部分模型进行建模和更新,并通过视图关联形成软件全局模型。近年来有不少学者对软件的协同建模进行了研究。如美国的nicolaescup等人提出了一种协同建模方法,通过在一个接近实时的共享编辑环境中进行建模以缩小协同机制与概念模型的差距。匈牙利的debrecenic等人提出了一种协同模式,可保证一定的正确性约束,通过动态的变更传播来适应在线场景,并且集成到现有的版本控制系统中以支持离线场景。华东师范大学的黄平等人提出了一种基于sysml/marte的协同建模方法,实现了从不同视角对一个复杂系统进行建模,包括系统的结构,行为,时钟约束和非功能属性nfp等。广西师范大学的张晓等人开发了一款协同建模软件,实现了云端数据库存储以及多人协同建模与验证功能。虽然目前已有一些协同建模方面的研究工作,但是以上研究工作着重于协同建模工具的实现,如何提高软件模型的可组合性仍然是软件协同建模领域亟待解决的主要问题。

在软件模型协同建模的过程中,难免会出现模型元素等语义不一致的情况,如西班牙的famelism等人使用属性锁定方法进行更有效的锁定,提出使用建模语言的语义来避免用户引入可能导致不一致性的模型更新。那慕尔大学的koshima等人开发了协同模型编辑工具dicomef,然而此工具只能检测低粒度级别的冲突。法国的sunyé等人指出以上协同建模工具使用基于版本控制系统的集中式体系结构,模型更新采用异步方式,提出了基于对等体系结构的同步协同框架,并使用一致性算法进行模型的同步更新。

协同模型驱动软件工程(collaborativesoftwareengineering,简称cse)是一个快速发展的领域,伴随着互联网的普及,企业网络的应用完善,已有一些支持协同软件工程的工具出现,如群组协作管理,协同写作等。协同软件工程的发展延伸了传统软件工程,需对分布式团队合作中的协同性进行研究。协同模型驱动软件工程在学术界和实践中越来越受到关注,软件工程中协同方法的使用从很大程度上提高了软件开发的效率,通过灵活的协同方式可多人合作构建目标软件系统,并通过部分代码替换实现软件版本的更新。然而,当前软件工程中的协同方法大多集中在工程实现的代码层次上,缺少在模型设计阶段对系统建模的协同方法。模型比纯文本更复杂、互连元素的数据结构更丰富,使用传统的版本控制系统进行模型版本控制可能会丢失模型所包含的许多信息,在模型的合并过程中可能会出现语法和语义不一致等问题。



技术实现要素:

本发明的目的在于针对上述现有技术存在的问题,为大型软件协同研发提供了一种简单易行的模型合并与检测方法,为协同研发大型软件及代码自动生成提供了一条有效的技术途径。

实现本发明目的的技术解决方案为:一种面向协同建模的uml模型合并与一致性检测方法,所述方法包括以下步骤:

步骤1,根据协同建模中的一致性约束与合并规则,创建uml模型操作集合与相应的模型元素;

步骤2,采用模型状态空间搜索方法,在搜索下一个状态时增量地生成状态空间,并通过状态转换进行模型版本的更新;

步骤3,根据模型更新与一致性检测方法,对模型与文档的版本进行检测,若模型出现新版本则对模型进行更新,并对模型进行一致性检测。

进一步地,步骤1中所述uml模型操作集合表示为以下三元组:

modeloperate=(add,delege,modify)(1)

式中,add(element,type)表示添加操作,包含两个参数,即添加一个新的模型元素element,类型为type;delete(element,type)表示删除操作,即删除一个现有的类型为type的模型元素element;modify(element,feature,v0,vn)表示修改操作,包含四个参数,即将模型元素element的特征feature的值从v0修改为vn;以上三个操作的标识符均为模型元素element。

进一步地,步骤2所述采用模型状态空间搜索方法,在搜索下一个状态时增量地生成状态空间,并通过状态转换进行模型版本的更新,具体包括:

定义新模型:从原模型modelold演变成新模型modelnew之间的过程是一个操作序列,记为集合δ={δ1,δ2,...,δn},由此定义新模型为:

modelnew=modelold+θ(2)

式中,θ表示两个模型版本操作序列集合δ之间的差集,差集θ的反转记作表示与θ相反的一系列操作序列集合;

步骤2-1,基于uml模型操作集合与相应的模型元素定义初步合并模型:

给定n个无冲突的操作序列集合{δ1,δ2,...,δn},用conf(δi,δj)表示集合δi与δj中有冲突的操作集合,用nonconf(δi,δj)表示集合δi与δj中无冲突的操作集合,i,j=1,2,...,n;设共同的原始模型为model,经过n个操作序列集合{δ1,δ2,...,δn}生成模型修订版本{model1,model2,...,modeln},n个模型的初步合并模型modelin为:

modelin=model+(δ′12∪δ′21∪...∪δ′1n∪δ′n1)(3)

式中,δ′1n=nonconf(δ1,δn),δ′n1=nonconf(δn,δ1),δ′1n表示集合δ1与δn中无冲突的操作集合,δ′n1表示集合δn与δ1中无冲突的操作集合;运算符″+″表示将一系列操作集合应用于原始模型,即使用式(1)中的三元组modeloperate对模型进行添加、删除与修改操作;

步骤2-2,将初步合并模型modelin包含的操作序列集合δstas和可用操作序列集合δavail均初始化为空集

步骤2-3,判断不一致性列表s.incosistencies是否为空集,若否,则执行步骤2-4和步骤2-5,否则跳至步骤2-6;

步骤2-4,将s.incosistencies中的第一个冲突的操作序列集合删除,记为s.inconsistency:=s.inconsistencies.removefirst(),并对列表中剩余的每一项操作序列集合l,检查是否满足l∈s.inconsistency,将不满足的l从列表中移除;

步骤2-5,对可用操作序列集合δavail进行更新:

式中,locn(a)表示操作a的当前状态位信息,δrepair表示在初步合并过程中获得的修复操作集合,δp为操作序列集合,包含当前操作与应用该操作的继承状态位,用来表示从初始状态s到继承状态s′的路径;

步骤2-6,针对可用操作序列集合中的每一个操作δ′i,若δ′i属于无冲突的集合,则对操作序列集合δstas进行更新:

δstas:=δstas∪{(s′,δ′i)},s′=s+δ′i(5)

重复该步骤直至遍历完可用操作序列集合中的每一个操作;

步骤2-7,根据≤与对操作序列集合进行排序;其中≤属于不完全排序中的偏序,为强偏序。

进一步地,步骤3所述根据模型更新与一致性检测方法,对模型与文档的版本进行检测,若模型出现新版本则对模型进行更新,并对模型进行一致性检测,具体包括:

步骤3-1,根据式(2)至式(3)对客户端clienti上的局部uml模型modelij进行更新得到modelij,并执行本地更新;其中,1≤i≤m,1≤j≤p,m为参与协同建模的局部建模客户端i的总数,p为与当前客户端i具有直接协同关系的所有客户端j的总数;

步骤3-2,客户端clienti将更新后的局部uml模型上传到模型合并服务器server,服务器server生成包含更新模型model′ij和更新客户端clienti的信息msg={clienti,model′ij},并广播到与clienti具有直接协同关系的所有客户端{client1...clientj};

步骤3-3,每个收到更新消息的clienti检验该客户端的模型modelij是否与model′ij一致,若不一致则根据步骤2中的状态空间搜索方法进行冲突处理,之后将更新后的模型上传到服务器server;

步骤3-4,服务器server收到clienti发送来的更新的模型后,重复执行步骤3-2和步骤3-3,实现与clienti具有直接协同关系的模型一致性检测和更新操作,服务器server记录已更新的模型;

步骤3-5,所有与模型modelij具有直接或间接协同关系的模型均已更新后,根据步骤2-1至2-7对更新后的局部uml进行冲突处理,并判断冲突处理后的操作序列集合是否符合一致性约束c1至c3,若不符合则将出错信息反馈到相应的客户端,否则接收更新后的全局uml模型;其中c1表示操作名称的匹配规则,c2表示序列图和状态图的匹配规则,c3表示对继承关系的一致性约束。

进一步地,所述方法还包括:

步骤4,对每个更新版本的模型与文档均进行数据存储。

一种面向协同建模的uml模型合并与一致性检测系统,所述系统包括:

第一模块,用于根据协同建模中的一致性约束与合并规则,创建uml模型操作集合与相应的模型元素;

第二模块,用于采用模型状态空间搜索方法,在搜索下一个状态时增量地生成状态空间,并通过状态转换进行模型版本的更新;

第三模块,用于根据模型更新与一致性检测方法,对模型与文档的版本进行检测,若模型出现新版本则对模型进行更新,并对模型进行一致性检测。

进一步地,该系统还包括:

第四模块,用于对每个更新版本的模型与文档均进行数据存储。

一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:

步骤1,根据协同建模中的一致性约束与合并规则,创建uml模型操作集合与相应的模型元素;

步骤2,采用模型状态空间搜索方法,在搜索下一个状态时增量地生成状态空间,并通过状态转换进行模型版本的更新;

步骤3,根据模型更新与一致性检测方法,对模型与文档的版本进行检测,若模型出现新版本则对模型进行更新,并对模型进行一致性检测。

一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:

步骤1,根据协同建模中的一致性约束与合并规则,创建uml模型操作集合与相应的模型元素;

步骤2,采用模型状态空间搜索方法,在搜索下一个状态时增量地生成状态空间,并通过状态转换进行模型版本的更新;

步骤3,根据模型更新与一致性检测方法,对模型与文档的版本进行检测,若模型出现新版本则对模型进行更新,并对模型进行一致性检测。

本发明与现有技术相比,其显著优点为:1)使用符号化的模型状态空间搜索方法,将模型合并的过程映射到相应的操作语义以进行模型版本更新,从而降低了模型合并过程中产生冲突的概率;2)使用模型更新与一致性检测方法,通过对多个客户端协同建模的过程进行调度,使得协同建模以及协同开发效率得到显著提升;3)使用协同服务器对模型版本与文档数据进行存储,保证了数据的完整性。

下面结合附图对本发明作进一步详细描述。

附图说明

图1为本发明面向协同建模的uml模型合并与一致性检测方法的流程图。

图2为本发明面向协同建模的uml模型合并与一致性检测方法的框架图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

需要说明,若本发明实施例中有涉及“第一”、“第二”等的描述,则该“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内

为了提高模型的可组合性、模型合并的完整性和模型更新的一致性,本发明以控制系统软件协同建模为研究对象,提出了一种面向协同建模的uml模型合并与一致性检测方法,并建立了相应的框架,给出了模型合并规则以及模型合并方法;提出了模型状态空间搜索方法、模型更新与一致性检测方法。本发明适用于软件的协同建模,为解决软件协同建模及研发中的模型合并、模型更新与一致性检测问题提供了一种有效的方法。该方法可应用于协同建模中的模型合并与更新。

在一个实施例中,结合图1和图2,提供了一种面向协同建模的uml模型合并与一致性检测方法,所述方法包括以下步骤:

步骤1,根据协同建模中的一致性约束与合并规则,创建uml模型操作集合与相应的模型元素;

步骤2,采用模型状态空间搜索方法,在搜索下一个状态时增量地生成状态空间,并通过状态转换进行模型版本的更新;

步骤3,根据模型更新与一致性检测方法,对模型与文档的版本进行检测,若模型出现新版本则对模型进行更新,并对模型进行一致性检测。

进一步地,在其中一个实施例中,软件模型通常由一组模型元素组成,模型元素是一个多元组记录集合,该集合应该包含:一个通用的唯一标识符、一个数据类型、以及零个或多个已命名的结构特征,其值可以是基本类型或对其他模型元素的引用。步骤1中所述uml模型操作集合表示为以下三元组:

modeloperate=<add,delete,modify>(6)

式中,add(element,type)表示添加操作,包含两个参数,即添加一个新的模型元素element,类型为type;delete(element,type)表示删除操作,即删除一个现有的类型为type的模型元素element;modify(element,feature,v0,vn)表示修改操作,包含四个参数,即将模型元素element的特征feature的值从v0修改为vn;以上三个操作的标识符均为模型元素element。

相对应地记操作为a,则a的逆操作可记为添加操作add(ement,type)与删除操作delete(element,type)互为逆操作;修改操作的逆操作可记作modify(element,feature,vn,v0)。

进一步地,在其中一个实施例中,步骤2所述采用模型状态空间搜索方法,在搜索下一个状态时增量地生成状态空间,并通过状态转换进行模型版本的更新,具体包括:

定义新模型:从原模型modelold演变成新模型modelnew之间的过程是一个操作序列,记为集合δ={δ1,δ2,...,δn},由此定义新模型为:

modelnew=modelold+θ(7)

式中,θ表示两个模型版本操作序列集合δ之间的差集,差集θ的反转记作表示与θ相反的一系列操作序列集合;

将正反操作集同时作用于模型后模型将保持不变,即:

中的操作序列反转即将每个操作a替换为它的逆过程当两个或多个来自不同版本的操作集δ1和δ2应用于同一个模型,例如它们共同的原始模型时,由于相互矛盾的更改操作,可能会产生冲突。例如,在δ1中执行modify操作,在δ2中执行delete操作将会产生delete-modify冲突;当以不同的操作方式修改相同的模型时,即在δ1中执行modify(element,feature,v0,vm)操作,在δ2中执行modify(element,feature,v0,vn)操作将会产生modify-modify冲突;

状态空间搜索是对模型合并过程中产生的冲突进行遍历的过程,其中搜索空间中的每个状态表示一个待合并的模型。用初始状态mi表示初步合并模型。在目标状态中合并的模型是一致的,为了达到目标状态,搜索可能需要经过若干个中间状态,这些中间状态可能包含不一致性。使用名为npi的不一致性列表记录所有冲突,每个状态s都与合并模型中的npi列表s.incosistencies和选择修复的npi列表s.incosistency相关联。

设有两个无冲突的操作集合中的操作a1和a2,a1≤a2表示a1优先于a2,当且仅当满足下式:

其中≤属于不完全排序,反映了冲突和无冲突操作集合之间的差异。其意义在于如果一个方案有更少的无冲突操作或更多的冲突操作,即使实际上并没有产生冲突,这个方案都将被优先考虑。显然a1≤a2并不意味着因此采用了一个优先级更高的排序如下,来表明a1是a2的一个子集。

设有两个无冲突的操作集合中的操作a1和a2,当且仅当满足下式:

其中可以推导出但反之不成立,因为可能会出现冲突的操作。

在该方法中,状态空间是隐式的,通过在搜索下一个状态时增量地生成,搜索的一个关键部分是从给定状态搜索的下一个状态。据此模型状态空间搜索方法应当遵循以下步骤:

步骤2-1,基于uml模型操作集合与相应的模型元素定义初步合并模型:

给定n个无冲突的操作序列集合{δ1,δ2,...,δn},用conf(δi,δj)表示集合δi与δj中有冲突的操作集合,用nonconf(δi,δj)表示集合δi与δj中无冲突的操作集合,i,j=1,2,...,n;设共同的原始模型为model,经过n个操作序列集合{δ1,δ2,...,δn}生成模型修订版本{model1,model2,...,modeln},n个模型的初步合并模型modelin为:

modelin=model+(δ′12∪δ′21∪...∪δ′1n∪δ′n1)(11)

式中,δ′1n=nonconf(δ1,δn),δ′n1=nonconf(δn,δ1),δ′1n表示集合δ1与δn中无冲突的操作集合,δ′n1表示集合δn与δ1中无冲突的操作集合;运算符″+″表示将一系列操作集合应用于原始模型,即使用式(1)中的三元组modeloperate对模型进行添加、删除与修改操作;

步骤2-2,将初步合并模型modelin包含的操作序列集合δstas和可用操作序列集合δavail均初始化为空集

步骤2-3,判断不一致性列表s.incosistencies是否为空集,若否,则执行步骤2-4和步骤2-5,否则跳至步骤2-6;

步骤2-4,将s.incosistencies中的第一个冲突的操作序列集合删除,记为s.inconsistency:=s.inconsistencies.removefirst(),并对列表中剩余的每一项操作序列集合l,检查是否满足l∈s.inconsistency,将不满足的l从列表中移除;

步骤2-5,对可用操作序列集合δavail进行更新:

式中,locn(a)表示操作a的当前状态位信息,δrepair表示在初步合并过程中获得的修复操作集合,δp为操作序列集合,包含当前操作与应用该操作的继承状态位,用来表示从初始状态s到继承状态s′的路径;

步骤2-6,针对可用操作序列集合中的每一个操作δ′i,若δ′i属于无冲突的集合,则对操作序列集合δstas进行更新:

δstas:=δstas∪{(s′,δ′i)},s′=s+δ′i(13)

重复该步骤直至遍历完可用操作序列集合中的每一个操作;

步骤2-7,根据≤与对操作序列集合进行排序;其中≤属于不完全排序中的偏序,为强偏序。

进一步地,在其中一个实施例中,模型一致性是多个局部uml模型间的关系。多个具有协同关系的局部uml模型间的一致性是指同一软件的不同版本的uml模型间的一致性问题。通常,出现一致性问题的原因是版本更新时的模型冲突与分割引起的,模型冲突使不同版本的内容或实际意义产生差异,模型分割使多个不同版本的具有协同关系的模型具有不同的抽象层次,从而产生模型间的一致性问题。

uml软件协同建模的模型更新即局部uml模型的版本更新会导致全局模型的版本更新。此时,不同版本的uml局部模型可能会因为具有不同的抽象层次而出现模型间一致性问题。一致性检测算法的目的是保证所有参与更新的局部模型相关的模型都处于同一抽象层次,从而保证全局模型的一致性。

为了保证模型更新过程中的一致性,步骤3包括以下步骤:

步骤3-1,根据式(7)、式(11)对客户端clienti上的局部uml模型modelij进行更新得到model′ij,并执行本地更新;其中,1≤i≤m,1≤j≤p,m为参与协同建模的局部建模客户端i的总数,p为与当前客户端i具有直接协同关系的所有客户端j的总数;

步骤3-2,客户端clienti将更新后的局部uml模型上传到模型合并服务器server,服务器server生成包含更新模型model′ij和更新客户端clienti的信息msg={clienti,model′ij},并广播到与clienti具有直接协同关系的所有客户端{client1...clientj};

步骤3-3,每个收到更新消息的clienti检验该客户端的局部uml模型modelij是否与model′ij一致,若不一致则根据步骤2中的状态空间搜索方法进行冲突处理,之后将更新后的模型上传到服务器server;

步骤3-4,服务器server收到clienti发送来的更新的模型后,重复执行步骤3-2和步骤3-3,实现与clienti具有直接协同关系的模型一致性检测和更新操作,服务器server记录已更新的模型;

步骤3-5,所有与模型modelij具有直接或间接协同关系的模型均已更新后,根据步骤2-1至2-7对更新后的局部uml进行冲突处理,并判断冲突处理后的操作序列集合是否符合一致性约束c1至c3,若不符合则将出错信息反馈到相应的客户端,否则接收更新后的全局uml模型;如下表1所示,c1表示操作名称的匹配规则,c2表示序列图和状态图的匹配规则,c3表示对继承关系的一致性约束。

表1一致性约束列表

进一步地,在其中一个实施例中,所述方法还包括:

步骤4,对每个更新版本的模型与文档均进行数据存储。

在一个实施例中,提供了一种面向协同建模的uml模型合并与一致性检测系统,所述系统包括:

第一模块,用于根据协同建模中的一致性约束与合并规则,创建uml模型操作集合与相应的模型元素;

第二模块,用于采用模型状态空间搜索方法,在搜索下一个状态时增量地生成状态空间,并通过状态转换进行模型版本的更新;

第三模块,用于根据模型更新与一致性检测方法,对模型与文档的版本进行检测,若模型出现新版本则对模型进行更新,并对模型进行一致性检测。

进一步地,在其中一个实施例中,该系统还包括:

第四模块,用于对每个更新版本的模型与文档均进行数据存储。

关于面向协同建模的uml模型合并与一致性检测系统的具体限定可以参见上文中对于面向协同建模的uml模型合并与一致性检测方法的限定,在此不再赘述。上述面向协同建模的uml模型合并与一致性检测系统中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:

步骤1,根据协同建模中的一致性约束与合并规则,创建uml模型操作集合与相应的模型元素;

步骤2,采用模型状态空间搜索方法,在搜索下一个状态时增量地生成状态空间,并通过状态转换进行模型版本的更新;

步骤3,根据模型更新与一致性检测方法,对模型与文档的版本进行检测,若模型出现新版本则对模型进行更新,并对模型进行一致性检测。

进一步地,在其中一个实施例中,处理器执行计算机程序时还实现以下步骤:

步骤4,对每个更新版本的模型与文档均进行数据存储。

关于每一步的具体限定可以参见上文中对于面向协同建模的uml模型合并与一致性检测方法的限定,在此不再赘述。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:

步骤1,根据协同建模中的一致性约束与合并规则,创建uml模型操作集合与相应的模型元素;

步骤2,采用模型状态空间搜索方法,在搜索下一个状态时增量地生成状态空间,并通过状态转换进行模型版本的更新;

步骤3,根据模型更新与一致性检测方法,对模型与文档的版本进行检测,若模型出现新版本则对模型进行更新,并对模型进行一致性检测。

进一步地,在其中一个实施例中,计算机程序被处理器执行时还实现以下步骤:

步骤4,对每个更新版本的模型与文档均进行数据存储。

关于每一步的具体限定可以参见上文中对于面向协同建模的uml模型合并与一致性检测方法的限定,在此不再赘述。

本发明为大型软件的协同研发提供了一种简单易行的模型合并与一致性检测方法,该方法不仅正确率高,而且效率较高,为大型软件的协同研发及代码的自动生成提供了一种有效的方法。

以上显示和描述了本发明的基本原理、主要特征及优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1