掌桥专利:专业的专利平台
掌桥专利
首页

一种用户可修改工件的合并方法及系统

文献发布时间:2023-06-19 12:19:35


一种用户可修改工件的合并方法及系统

技术领域

本发明属于计算机技术领域,具体涉及一种用户可修改工件的合并方法及系统。

背景技术

随着计算机软件开发变得越来越复杂,软件开发人员越来越多的使用模型。例如,可以使用UML创建模型,模型驱动架构(MDA)工具生成源代码和其他工件,使用软件的模型作为源代码生成的基础。工件通常可以描述为软件开发过程中产生的有形副产品,并且包括可以在计算机上运行的独立软件组件。工件的例子包括但不限于:代码,构建生成文件,组件描述符,文档,以及模型。MDA工具生成工件后,用户可以修改其中一些工件。然而,软件开发时一个迭代过程,用户修改源模型并重新生成源代码。事实上,用户可以同时修改模型和由该模型生成的工件。

根据一种已知方法,代码和生成文件夹被生成到系统环境变量中设置的构建环境目录中。在构建的目录中,包含多个工件,这些工件基于MDA工具生成,并且可以由用户修改。如果生成工件的模型被改变,当从模型重新生成工件时,对工件的任何用户修改都将被覆盖。此修改还可能会产生其他问题,例如,在生成过程之外修改一个文件会产生一种新的需求,即通过自动工件源的每一个不同的生成来维护这些更改。此外,如果同时修改模型和由该模型生成的工件,则会发生冲突。

发明内容

针对现有技术中的上述不足,本发明提供的一种用户可修改工件的合并方法及系统解决了现有技术中存在的问题。

为了达到上述发明目的,本发明采用的技术方案为:一种用户可修改工件的合并方法,包括以下步骤:

S1、采集当前迭代过程中由软件过程生成的工件,得到.temp工件;

S2、判断.temp工件与.gen工件是否不同,若是,则进入步骤S3,否则删除.temp工件并结束;

S3、判断源工件是否存在,若是,则进入步骤S4,否则复制.temp工件至源工件类别中,并进入步骤S5;

S4、判断用户可修改工件是否被修改,若是,则复制.temp工件至.merge工件类别中,执行合并步骤,并进入步骤S5,否则复制.temp工件至源工件类别中,并进入步骤S5;

S5、复制.temp工件至.gen工件类别中,并删除.temp工件;

所述.gen工件表示先前生成的工件,所述.merge工件表示合并工件。

进一步地,所述步骤S1中工件包括代码、构件生成文件、组件描述符、文档以及模型,所述用户可修改工件包括所有历史生成工件。

进一步地,所述步骤S2中判断.temp工件与.gen工件是否不同的具体方法为:采用二路合并算法对.temp工件与.gen工件进行逐行对比,判断.temp工件与.gen工件中的文件是否完全相同,若是,则相同,否则不相同。

进一步地,所述步骤S4中执行合并步骤的具体方法为:将.temp工件和.merge工件所有元素遍历,并分别存放于源集合和目标集合,删除源集合中与目标元素没有对应项的源元素,并在目标集合中添加没有对应项的源元素,将引用重定向到相应的目标元素,完成合并步骤。

进一步地,所述执行合并步骤之前通过合并函数进行合并冲突的检测。

本发明的有益效果为:

(1)本发明提供了一种用户可修改工件的合并方法及系统,能够快速判断已生成工件和已更改工件是否需要合并,有效的减少了用户的工作量,提高了工作效率。

(2)本发明采用二路合并和递归三路合并算法,自动判断是否需要合并,降低了可能出现的人为操作的错误率。基于本发明的原理和实施例,可以延伸到多个行业和领域的实施例。

一种用户可修改工件的合并系统,包括工件采集模块、生成工件比较模块、合并分析模块、工件合并模块、先前生成工件模块以及用户工件比较模块;

所述生成工件比较模块分别与先前生成工件模块、工件采集模块以及合并分析模块通信连接,所述合并分析模块分别与先前生成工件模块、工件合并模块以及用户工件比较模块通信连接。

进一步地,所述工件采集模块用于采集当前生成工件,并将当前生成工件传输至生成工件比较器模块;所述先前生成工件模块用于存储先前生成工件;所述工件比较器模块用于接收先前生成工件和当前生成工件,并比较先前生成工件和当前生成工件是否相同,若不同,则将当前生成工件传输至合并分析模块,否则删除当前生成工件;所述合并分析模块用于读取用户可修改工件是否发生修改,若是则执行合并步骤,否则使用当前生成工件更新用户可修改工件和先前生成工件;所述工件合并模块用于执行合并步骤;所述用户工件比较模块用于获取用户可修改工件是否发生修改,并将修改状态发送至合并分析模块。

本发明的有益效果为:提供了一种用户可修改工件的合并系统,自动化判断工件是否需要合并,无需人工比对,有效减少用户工作量,提高了工作效率,自动根据合并函数完成合并,降低人为操作可能出现的错误率。

附图说明

图1为本发明提供的一种用户可修改工件的合并方法流程图;

图2为本发明提供的一种用户可修改工件的合并系统示意图。

具体实施方式

下面对本发明的具体实施方式进行描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。

下面结合附图详细说明本发明的实施例。

如图1所示,一种用户可修改工件的合并方法,包括以下步骤:

S1、采集当前迭代过程中由软件过程生成的工件,得到.temp工件;

S2、判断.temp工件与.gen工件是否不同,若是,则进入步骤S3,否则删除.temp工件并结束;

S3、判断源工件是否存在,若是,则进入步骤S4,否则复制.temp工件至源工件类别中,并进入步骤S5;

S4、判断用户可修改工件是否被修改,此时由比较算法做出判断,比较算法由Java语言描述,获取模型的所有元数据,并重写对象的hashCode()和equals()方法,equals用来判断是否相等,hashcode则缩小了查找成本,提高了执行速度;若是被修改,则复制.temp工件至.merge工件类别中,执行合并步骤,并进入步骤S5,否则复制.temp工件至源工件类别中,并进入步骤S5;

S5、复制.temp工件至.gen工件类别中,并删除.temp工件;

所述.gen工件表示先前生成的工件,所述.merge工件表示合并工件。

所述步骤S1中工件包括代码、构件生成文件、组件描述符、文档以及模型,所述用户可修改工件包括所有历史生成工件。

所述步骤S2中判断.temp工件与.gen工件是否不同的具体方法为:采用二路合并算法对.temp工件与.gen工件进行逐行对比,判断.temp工件与.gen工件中的文件是否完全相同,若是,则相同,否则不相同。

所述步骤S4中执行合并步骤的具体方法为:将.temp工件和.merge工件所有元素遍历,并分别存放于源集合和目标集合,删除源集合中与目标元素没有对应项的源元素,并在目标集合中添加没有对应项的源元素,将引用重定向到相应的目标元素,完成合并步骤。

所述执行合并步骤之前通过合并函数进行合并冲突的检测。

在本实施例中,用户可修改工件可由用户和/或由生成工件中的改变来修改多次。将当前和以前生成的工件与用户可修改的工件进行比较。检测合并条件并仅在确定当前和以前生成的项目不同以及生成后用户可修改的工件已被修改时生成合并项目。合并步骤可以包括自动或手动合并操作,可以响应于合并工件的生成而执行。该过程可以被描述为将对从软件过程生成并在软件过程之外修改的工件的更改进行集成的方法。

除了由软件过程中自动生成的用户可修改的工件之外,本发明的实施例还创建与软件过程的当前和先前迭代中工件的生成相对应的当前和先前生成的工件。除了用户可修改工件之外,已知方法可以保留单个“生成”版本,但是使用两个这样的副本来执行本发明描述的变更影响分析。

本发明中使用的术语“工件”表示软件开发过程中的有形副产品,可以包括可在计算机上运行的独立软件组件,工件的例子包括但不限于:代码,构件生成文件,组件描述符,文档,以及模型。本发明中使用的术语“用户可修改工件”表示作为计算环境中的软件过程的迭代输出而产生的工件。软件过程可以被描述为生成工件的部分。用户可修改工件时由软件过程产生的工件,并且在不使用本发明的实施例的情况下存在。该工件可以由用户查看和修改,并且最类似于在“构建”目录中生成的工件。在本实施例中,工件生成部分是模型转换引擎,其可以生成模型作为用户可修改工件。

本发明中使用术语“.temp”文件和“当前生成的工件”表示从软件过程的当前迭代生成的文件,并且可以描述为过程的输出。.temp文件由本发明的实施例用于确定是否需要合并,并且不由用户操作,用于确定生成的工件是否已更改。在基于模型的环境中,可以描述为确定模型是否已更改。.temp文件的寿命小于进程迭代。本发明中使用术语“.gen”文件和“先前生成的工件”表示从软件过程的先前迭代生成的文件,并且可以描述为过程的输出。前一个迭代可以是软件过程的最后一个或前一个迭代,在这个过程中,一个项目被更改了。前面的迭代可以是用于生成用户可修改工件的过程的相同迭代。.gen文件在软件过程的当前迭代之后任然存在。它被本发明的实施例用于确定是否需要合并,并且不被用户操作。

将.gen文件与.temp文件进行比较,以确定生成的工件是否已更改。将.gen文件与用户可修改的工件进行比较,以确定该工件在生成之后是否被修改。在基于模型的环境中,这些组件可以描述为确定模型是否已更改。在流程迭代结束时,.gen文件总是包含最新的工件,并且当实际在磁盘上实现时,是上次更改文件时写入的版本。在本实施例中,响应于所生成的工件中的变化的检测,更新或修改.gen文件。

根据本发明的一个实施例,仅响应于所生成的工件已经改变并且用户可修改的工件已经在生成之后被修改的确定,识别合并条件并且创建合并工件。本发明中使用术语“.merge”文件和“合并的工件”表示用户可访问的合并工件。或者,为了响应合并文件的创建,可以自动执行合并,或者体系用户需要合并,并且可以使用.merge文件与用户可修改的工件合并。合并完成后,.merge文件将删除。合并函数在本领域是众所周知的,并且本发明的实施例可以与任何数量的这样的功能一起使用,而不需要根据所使用的特定合并功能进行修改。

可以将.gen文件和.temp文件描述为“过程支持文件”,用户不需要对其进行操作,存储这些文件时为了确定执行合并的条件。.gen,.temp和.merge文件是工件,但在本发明中也将被非限制性地称为文件,以便区别于作为软件过程的自然输出的用户可修改工件。

在本实施例中,用户可修改工件是软件工件,例如从软件模型生成的代码生成工件,本发明所述的工件可以由任何迭代过程生成。

上述工件和文件可以在存储在计算机可读存储器中。在本实施例中,不由用户操作的.temp和.gen文件以及.merge文件和用户可修改工件都存储在相同的目录结构中,每个文件或工件都具有定义查看/读/写权限的属性。

在本实施例中,.temp和.gen文件存储在第一个位置,.merge文件和用户可修改工件存储在第二个位置。这些位置可以在同一目录结构中,也可以在不同的目录结构中。在示例性实施例中,用户可修改工件和合并文件存储在用户可访问的源目录中。.temp和.gen文件存储在生成目录中,它不是由用户操作的,如需要可以设置属性以使此目录对用户有选择地可见/不可见。

虽然将结合源目录和生成目录结构来描述示例,但是对于本领域的普通技术人员来说,这仅仅是一个示例,并且文件和工件可以根据上述方案中的任何一种或其他合适的方案来存储。

源目录包含模型中组件的源代码,用户可以查看和修改源目录结构中的工件。因此,源目录中的工件将包括用户在上一次代码生成操作之后所做的任何修改。用户可以查看源目录结构中创建的合并文件。生成目录是为避免合并或最小化而创建的目录,其目录结构是源目录结构的镜像,生成目录不由用户操作。

如图2所示,一种用户可修改工件的合并系统,包括工件采集模块、生成工件比较模块、合并分析模块、工件合并模块、先前生成工件模块以及用户工件比较模块;

所述生成工件比较模块分别与先前生成工件模块、工件采集模块以及合并分析模块通信连接,所述合并分析模块分别与先前生成工件模块、工件合并模块以及用户工件比较模块通信连接。

所述工件采集模块用于采集当前生成工件,并将当前生成工件传输至生成工件比较器模块;所述先前生成工件模块用于存储先前生成工件;所述工件比较器模块用于接收先前生成工件和当前生成工件,并比较先前生成工件和当前生成工件是否相同,若不同,则将当前生成工件传输至合并分析模块,否则删除当前生成工件;所述合并分析模块用于判断用户可修改工件是否发生修改,若是则执行合并步骤,否则使用当前生成工件更新用户可修改工件和先前生成工件;所述工件合并模块用于执行合并步骤。

本实施例还提供了一种存储语句和指令的计算机可读介质,这些语句和指令在执行时是处理器执行一种方法,用于检测计算环境中用户可修改工件的合并条件。用户可修改的工件由迭代软件过程生成。由处理器执行的方法可以包括上诉与根据本发明实施例的方法有关的步骤和特征。

相关技术
  • 一种用户可修改工件的合并方法及系统
  • 一种SVN客户端下用户自助修改密码的系统及方法
技术分类

06120113256243