实时协同编程环境下的语义冲突消解方法技术

技术编号:20362489 阅读:18 留言:0更新日期:2019-02-16 16:21
本发明专利技术公开了一种实时协同编程环境下的语义冲突消解方法,本方法通过分析语义冲突可能产生以及动态依赖语义冲突发生的场景,协同编程系统无法判断非编程语言规则错误的编辑操作是否存在语义冲突,若编辑操作为排除关系,只保留一个编辑操作,其它编辑操作将会被拒绝或保存,考虑操作不兼容的问题及减少协同编辑限制,采用复制式结构,结合并发控制技术以及依赖图的动态变化场景实现冲突消解,维护实时协同编程语义的一致性。本方法克服传统语义冲突消解方式的缺陷,基于并发冲突处理技术实现语义冲突消解,节省系统资源开销,在避免冲突的同时实现对其它代码域的编辑,提高了实时协同编程的效率。

【技术实现步骤摘要】
实时协同编程环境下的语义冲突消解方法
本专利技术涉及计算机支持的协同工作
,尤其涉及一种实时协同编程环境下的语义冲突消解方法。
技术介绍
冲突消解是实时协同编程系统中的重要研究课题,是保证系统正确性和可用性的关键性技术。针对实时协同编程系统的冲突问题解决方法主要分为两大类:冲突消解方法和冲突避免方法。冲突消解方法允许协同编程过程中发生冲突,一旦有冲突发生则使用相应的策略来消除冲突,从而保证共享文档的一致性。近些年,冲突消解方法研究中最常用的一致性维护技术主要分为两大类:基于操作转换OT技术和基于地址转换(AddressSpaceTransformation)AST技术,其中包括Ellis和Gibbs在文献中提出的DOPT算法,Sun和Ellis在文献中提出的GOT和GOTO算法,Sun在文献中提出的COT算法以及Gu等人在文献中提出的AST算法等。冲突避免方法是指在冲突发生前避免冲突发生,该方法一般采用加锁的方式来避免冲突产生,即当用户对某对象进行操作时需要先申请加锁,只有申请成功的用户才能操作该对象。FAN和SUN在文献中提出的DAL技术,以动态加锁的方式实现实时协同编程环境的语义冲突避免,并采用Sharing-Lock的方法处理并发加锁的问题。该方法虽有效的避免了语义冲突的发生,但在一定程度上限制了协同编程的效率,且频繁的加锁与解锁会加大对系统资源的开销。针对语义冲突处理这一问题,Sun等人在文献提出基于OT技术采用多版本技术解决2D文档模型下垂直交叉的冲突,既维护了所有操作意愿,也维护了文档的一致性;Gao等人在文献中提出的CRSCM策略,实现了参照操作与其它并发操作的语义维持。传统的加锁方法对协同编程的限制较大,在避免冲突的同时限制了对其它代码域的编辑。
技术实现思路
本专利技术所要解决的技术问题是提供一种实时协同编程环境下的语义冲突消解方法,本方法克服传统语义冲突消解方式的缺陷,基于并发冲突处理技术实现语义冲突消解,节省系统资源开销,在避免冲突的同时实现对其它代码域的编辑,提高了实时协同编程的效率。为解决上述技术问题,本专利技术实时协同编程环境下的语义冲突消解方法包括如下步骤:步骤一、基本定义,基础域为一系列源代码组成的语义有意义且独立的代码域,开放域为基础域之外的所有代码域;依赖关系,若基础域A依赖于基础域B,表示为A->B,如存在A->B,B->C,则A->C,将A->B,B->C称为直接依赖关系,A->C称为间接依赖关系;依赖图,每个基础域对应一个依赖图结点,采用Node->Node表示依赖图之间的依赖关系,依赖图结点之间的依赖关系与其对应的基础域之间的依赖关系一致,依赖图中记录的信息为对应基础域代码文本内容,基础域之间的依赖关系通过依赖派生机制实时分析,建立或取消基础域之间的依赖关系;步骤二、对每个基础域添加标识码,标识码为三维向量Tag(0,0,0),其中,左值表示为UpStreamTag(UST)、中值表示为DownStreamTag(DST)、右值表示为SelfAreaTag(SAT),依赖图结点的标识码为对应基础域的标识码;标识码Tag中,UpStreamTag表示对该基础域依赖的其它基础域的编辑操作会导致UpStreamTag自加,DownStreamTag表示对依赖于该基础域的其他所有基础域的编辑操作会引起DownStreamTag自加,SelfAreaTag表示编辑操作当前基础域执行后SelfAreaTag自加,且标识码只有在编辑操作成功执行后才能自加;标识码相同时表明该结点未被修改,否则可能存在语义冲突的情况;步骤三、设定基础域工作状态,且每个基础域都有一个相对应的工作状态,基础域工作状态分别为:editing:基础域处于编辑状态,resolving:基础域处于等待处理的编辑状态,completed:基础域处于完成编辑状态;步骤四、采用版本技术记录编辑操作,并通过版本覆盖的方式恢复代码,多余的版本被删除或保存,代码域版本以基础域为基本单位,每个基础域都有其对应的代码域版本,创建一个新的基础域或者在代码域成功执行的操作都会创建一个新的代码域版本并存储在本地,组成基础域的历史版本,代码域的版本号为其所对应的基础域的SelfAreaTag,若存在代码域版本恢复的情况,该基础域的标识码伴随着代码域版本恢复回退至原先值;步骤五、将编辑操作请求定义为一个二元组<s,NQ>,s(site)表示id,NQ(NodeQueue)={Node0,Node1,NodeN}表示用户完整编辑操作下各个结点的操作集合,其中Node为一个结构体包含以下信息:Id:结点id,用于在对端站点中找到该结点,并进行相应操作,Tag:结点标识码,用于判断语义冲突是否发生,EditType:基础域的编辑类型,新建一个基础域用1表示,删除基础域用-1表示,编辑基础域表示为0,RootNode:未编辑前,结点直接依赖的其它结点集合,用于判断依赖图结构是否发生变化,NewDepency:记录新增的依赖结点或减少的依赖结点,新增的结点表示为+Nodeid,减少的结点标识为-Nodeid,在依赖图结构发生变化时用于判断语义冲突是否发生,NodeVersion:记录当前基础域的版本信息,用于语义冲突发生时,进行代码域版本恢复;步骤六、设定编辑操作执行许可条件,代码域工作状态为completed,代码域的标识码中除DownStreamTag外其它标识码需相等,符合上述两个条件的编辑操作才能成功执行;步骤七、判断编辑操作落入的代码域,如代码域为一个空白区域,需要新建一个基础域,并将基础域的编辑状态更新为editing,处于编辑状态下的代码域不接受其它站点的编辑操作直到编辑完成,其它站点的编辑操作需等待本地编辑完成后才能执行;步骤八、对本地的编辑操作进行更新检查,代码域处在editing状态时,收到的远程站点的编辑操作保存在等待队列中等待执行,本地生成的编辑操作在发送之前判断等待队列是否为空,若等待队列为空,本地生成的编辑操作成功发送,否则,编辑操作不发送,将本地上已经执行的编辑操作保存,并撤销这些编辑操作,之后,执行等待队列中的编辑操作;步骤九、若编辑操作在基础域上成功执行,在本地站点上立即生成一个新的基础域版本,版本号为立即生效后的标识码的值,版本号用于记录代码的编辑历史以及代码的恢复;步骤十、检查编辑操作的编辑类型,若是创建一个新的基础域,编辑操作立即执行,否则,检查编辑操作请求中编辑队列的各个节点的标识码与本地将要执行该编辑操作的结点标识码是否相同,如果标识码相同,编辑操作执行,如果不同,根据标识码变化类型进行相应处理;步骤十一、远程站点上编辑操作的执行需检测基础域的依赖情况是否变化,通过判断NewDepency是否为空,若为空,编辑操作未导致依赖图结构变化,跳过依赖图动态变化的编辑许可检查,若不为空,依赖图结构发生改变,可能导致语义冲突,进行依赖图语义冲突检查,若增加了新的依赖域,则判断新增加的依赖域的标识码是否发生改变,若标识码改变,则编辑操作被拒绝;如果依赖域减少,减少的本文档来自技高网
...

【技术保护点】
1.一种实时协同编程环境下的语义冲突消解方法,其特征在于本方法包括如下步骤:步骤一、基本定义,基础域为一系列源代码组成的语义有意义且独立的代码域,开放域为基础域之外的所有代码域;依赖关系,若基础域A 依赖于基础域B, 表示为A‑>B,如存在A‑>B,B‑>C,则A‑>C,将A‑>B,B‑>C 称为直接依赖关系,A‑>C称为间接依赖关系;依赖图,每个基础域对应一个依赖图结点,采用Node‑>Node表示依赖图之间的依赖关系,依赖图结点之间的依赖关系与其对应的基础域之间的依赖关系一致,依赖图中记录的信息为对应基础域代码文本内容,基础域之间的依赖关系通过依赖派生机制实时分析,建立或取消基础域之间的依赖关系;步骤二、对每个基础域添加标识码,标识码为三维向量Tag(0,0,0),其中,左值表示为UpStreamTag(UST)、中值表示为DownStreamTag(DST)、右值表示为SelfAreaTag(SAT),依赖图结点的标识码为对应基础域的标识码;标识码Tag中, UpStreamTag表示对该基础域依赖的其它基础域的编辑操作会导致UpStreamTag自加,DownStreamTag表示对依赖于该基础域的其他所有基础域的编辑操作会引起DownStreamTag自加,SelfAreaTag表示编辑操作当前基础域执行后SelfAreaTag自加,且标识码只有在编辑操作成功执行后才能自加;标识码相同时表明该结点未被修改,否则可能存在语义冲突的情况;步骤三、设定基础域工作状态,且每个基础域都有一个相对应的工作状态,基础域工作状态分别为:editing:基础域处于编辑状态,resolving:基础域处于等待处理的编辑状态,completed:基础域处于完成编辑状态;步骤四、采用版本技术记录编辑操作,并通过版本覆盖的方式恢复代码,多余的版本被删除或保存,代码域版本以基础域为基本单位,每个基础域都有其对应的代码域版本,创建一个新的基础域或者在代码域成功执行的操作都会创建一个新的代码域版本并存储在本地,组成基础域的历史版本,代码域的版本号为其所对应的基础域的SelfAreaTag,若存在代码域版本恢复的情况,该基础域的标识码伴随着代码域版本恢复回退至原先值;步骤五、将编辑操作请求定义为一个二元组...

【技术特征摘要】
1.一种实时协同编程环境下的语义冲突消解方法,其特征在于本方法包括如下步骤:步骤一、基本定义,基础域为一系列源代码组成的语义有意义且独立的代码域,开放域为基础域之外的所有代码域;依赖关系,若基础域A依赖于基础域B,表示为A->B,如存在A->B,B->C,则A->C,将A->B,B->C称为直接依赖关系,A->C称为间接依赖关系;依赖图,每个基础域对应一个依赖图结点,采用Node->Node表示依赖图之间的依赖关系,依赖图结点之间的依赖关系与其对应的基础域之间的依赖关系一致,依赖图中记录的信息为对应基础域代码文本内容,基础域之间的依赖关系通过依赖派生机制实时分析,建立或取消基础域之间的依赖关系;步骤二、对每个基础域添加标识码,标识码为三维向量Tag(0,0,0),其中,左值表示为UpStreamTag(UST)、中值表示为DownStreamTag(DST)、右值表示为SelfAreaTag(SAT),依赖图结点的标识码为对应基础域的标识码;标识码Tag中,UpStreamTag表示对该基础域依赖的其它基础域的编辑操作会导致UpStreamTag自加,DownStreamTag表示对依赖于该基础域的其他所有基础域的编辑操作会引起DownStreamTag自加,SelfAreaTag表示编辑操作当前基础域执行后SelfAreaTag自加,且标识码只有在编辑操作成功执行后才能自加;标识码相同时表明该结点未被修改,否则可能存在语义冲突的情况;步骤三、设定基础域工作状态,且每个基础域都有一个相对应的工作状态,基础域工作状态分别为:editing:基础域处于编辑状态,resolving:基础域处于等待处理的编辑状态,completed:基础域处于完成编辑状态;步骤四、采用版本技术记录编辑操作,并通过版本覆盖的方式恢复代码,多余的版本被删除或保存,代码域版本以基础域为基本单位,每个基础域都有其对应的代码域版本,创建一个新的基础域或者在代码域成功执行的操作都会创建一个新的代码域版本并存储在本地,组成基础域的历史版本,代码域的版本号为其所对应的基础域的SelfAreaTag,若存在代码域版本恢复的情况,该基础域的标识码伴随着代码域版本恢复回退至原先值;步骤五、将编辑操作请求定义为一个二元组<s,NQ>,s(site)表示id,NQ(NodeQueue)={Node0,Node1,NodeN}表示用户完整编辑操作下各个结点的操作集合,其中Node为一个结构体包含以下信息:Id:结点id,用于在对端站点中找到该结点,并进行相应操作,Tag:结点标识码,用于判断语义冲突是否发生,EditType:基础域的编辑类型,新建一个基础域用1表示,删除基础域用-1表示,编辑基础域表示为0,RootNode:未编辑前,结点直接依赖的其它结点集合,用于判断依赖图结构是否发生变化,NewDepency:记录新增的依赖结点或减少的依赖结点,新增的结点表示为+Nodeid,减少的结点标识为-Nodeid,在依赖图结构发生变化时用于判断语义冲突是否...

【专利技术属性】
技术研发人员:高丽萍游书伟赵春芽
申请(专利权)人:上海理工大学
类型:发明
国别省市:上海,31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1