合并电子文档的多个不同版本的方法和装置的制作方法

文档序号:6651288阅读:217来源:国知局
专利名称:合并电子文档的多个不同版本的方法和装置的制作方法
技术领域
本发明涉及软件开发,更具体地说,涉及软件开发工具。
背景技术
现代软件本质上很复杂并且通常由许多不同文档的集合形成。由于文档自身的大小和复杂性可以很重要,所以通常的做法是将开发和维护每个文档的责任指派给一组开发者。当两个开发者更改同一文档时,有必要将每个个人和/或团队的贡献组合成将被结合到软件内部版本(build)中的单个文档。
一种基于软件的工具(称为合并工具)能够将不同个人或团队的贡献组合成合并后的文档。通常,合并工具自动地比较两个或更多文档是将被组合的不同文档还是同一文档的不同版本。所述文档可以是单独的文件,包括但不限于,源代码文件、建模语言文件或其它电子文档。被比较的文档之间的任何差异(称为增量)都被合并工具所标识。每个增量可以是指定对基线文档做出的一个或多个更改的软件对象或其它数据结构。
传统的合并工具可以接受从两个或更多文档的比较生成的增量并将更改写入合并后的文档。被接受的增量被在基线文档上实现以生成合并后的文档。在这样做时,合并工具通常就从文档的每个不同版本标识的增量是否彼此冲突进行有限的分析。此类分析可以包括在将要合并的文档之间进行逐行比较或者在某些情况下进行“组块”分析。但是,合并工具并不分析文档的结构以确定相关性和内部引用,以便确保保持合并后的文档的完整性。
为了说明,当合并源代码文档的两个或更多不同版本时,一个开发者可以向现有方法添加引用,同时另一个开发者可以删除同一方法。两个增量将被传统的合并工具所标识。但是,由于更改发生在文档的不同部分,传统的合并工具将不会检测出引用被破坏。也就是说,传统的合并工具所执行的分析不会检测出来自依赖于另一个开发者移除或删除的源代码部分的开发者的贡献。结果,两个增量都将被接受到合并后的文档中。这产生了具有对不再存在的方法的引用的合并后的文档。合并后的文档不再保持引用的完整性。
这只是使用传统的合并工具可以出现的一类问题的一个实例。由于传统的合并工具不能理解正在被合并的文本的句法或语义,所以在合并操作期间检测这样的错误就成了问题。这种类型的错误直到源代码被编译时才能被检测到。但是在开发过程中,编译发生在晚于合并的时间,从而耽搁了开发者察觉到任何潜在问题的时间。晚期检测引起了开发过程的额外成本和时间。

发明内容
本发明提供了一种用于将电子文档合并为合并后的文档的解决办案。本发明的一个实施例可以包括一种合并结构化的电子文档的多个不同版本的方法。所述方法可以包括标识所述电子文档的多个不同版本,其中所述电子文档具有定义的结构。所述方法还可以包括确定所述不同版本之间的多个增量和根据所述电子文档的所述定义的结构来确定所述多个增量中的单个增量之间的关系。根据所述确定的关系,一个或多个所述增量可以被有选择地接受以创建合并后的电子文档。
本发明的另一个实施例可以包括机器可读存储器,其被编程以使机器执行此处所述的各个步骤。


附图中示出了当前优选的实施例;但是可以理解,本发明并不限于示出的精确布置和工具图1是示出了根据本发明的一个实施例的用于合并电子文档的系统的示意图;图2是示出了根据本发明的另一个实施例的从将被合并的电子文档的不同版本的比较中标识的增量的表;图3是示出了由图2的表所指定的先决条件关系的有向图;图4是示出了由图2的表所指定的从属关系的有向图;图5是示出了根据本发明的另一个实施例的从将被合并的电子文档的不同版本的比较中标识的增量的表;图6是示出了由图5的表所指定的先决条件关系的有向图;图7是示出了由图5的表所指定的从属关系的有向图;图8是示出了根据本发明的另一个实施例的合并电子文档的方法的流程图。
具体实施例方式
本发明提供了一种用于合并电子文档的解决办案。在本发明的一个实施例中,可以标识冲突的增量并提供通知,从而警告开发者存在冲突。这样的通知允许开发者在进行到开发过程的下一个阶段之前对被合并的电子文档执行任何需要的编辑。在另一个实施例中,可以标识增量之间的关系,例如某一增量是否依赖于另一个增量,或者是另一个增量的先决条件。可以应用一组规则来从合并后的文档确定哪个增量将被接受或拒绝。
图1是示出了根据本发明的一个实施例的用于合并电子文档的系统的示意图。如此处所使用的术语文档指软件模块或其他结构化的电子文件。所述文件可以指定文本,包括但不限于,源代码、基于计算机的描述语言、脚本语言和/或建模语言。在一个实施例中,例如,文档可以是以JAVA编程语言编写的大型程序的单个部分。但是,也可以使用其它编程语言(无论是高级还是低级)。在另一个实施例中,文档可以包括通用建模语言(UML),其是一种用于表达面向对象的分析和设计决策的标准。这样的文档可以是源代码文件或者来自于源代码文件。在这种情况下,文档105和110可以是同一文件的不同版本。
合并工具100可以被实现为在诸如台式计算机系统、膝上型计算机系统、服务器之类的(以下称为“计算机系统”)适合的信息处理系统中执行的一个或多个计算机程序。如图所示,合并工具100可以获得一个或多个文档105和110。合并工具100可以包括一组用于标识文档105、110之间的差异或更改(称为增量)的规则。所述规则还可以指定其中增量将被接受以生成合并后的文档115的次序和方式。将参考图2-7更详细地说明合并工具100所使用的规则。在任何情况下,规则向合并工具提供了与将被处理的文档的结构有关的语义和句法知识。
通常,文档105、110中的一个文档被选择为基线文档。在这种情况下,例如,文档105可以被选择为基线文档。相应地,合并工具100将文档110与基线文档105进行比较。在两个文档105与110之间标识的任何增量可以被从基线文档105的角度来表达。也就是说,如果基线文档105与文档110的比较指示文档110包括从基线文档105遗失的构造,则可以生成添加增量。所述添加增量指定包括在文档110中但从基线文档105中遗失的软件构造将被添加到基线文档105。类似地,如果基线文档105包括从文档110遗失的软件构造,则可以生成删除增量。所述删除增量指定没有包括在文档110中的基线文档105中的软件构造将被从基线文档105删除。
其它种类的增量可以包括更改增量和移动增量。更改增量可以指示基线文档105中的特定软件构造不同于文档110中的相同或并行构造。尽管这些构造在某些方面彼此不同,但是两个构造可以位于每个文档内的相同相对位置。更改增量可以指定基线文档105中的软件构造将被更改以与文档110中其对应的软件构造相匹配。
移动增量可以指示与文档110中的同一软件构造的位置相比,基线文档105中的特定软件构造位于不同的相对位置。移动增量可以指定基线文档105中的软件构造将被移动以与文档110中的软件构造的位置相对应。
软件构造(或构造)指用于特定目的的数据结构。构造可以指单个编程语言语句或多于一个语句的集合,例如循环、方法、函数等,其中所述集合具有特定的功能。构造还由诸如电气和电子工程师协会(IEEE)和美国国家标准化组织(ANSI)之类的组织定义。这些组织提出用于不同的基于计算机的编程、脚本和/或建模语言(例如C、C++等)的标准。
图2是示出了根据本发明的另一个实施例的从将被合并的文档的不同版本的比较中标识的增量的表200。如图所示,表200的第一列指示增量标号1、2或3。第二列(标题为“元素更改”)指示由每个增量指定的更改。在这种情况下,每个增量是由“+”符号前缀表示的添加增量。符号“E”指元素,其可以是先前所述的任何种类的不同软件构造的简写。
表200的第三列(具有标题“引用的元素(多个)”)指定由将被添加的元素所引用的特定的一个或多个元素。“引用的元素(多个)”列中的元素还是所标识的增量的主体(subject)。也就是说,引用的元素还已被标识用于添加还是删除。因此,增量1是指定元素2(或E2)将被添加的添加增量。如表200所指示的,+E2包括对E3的引用。增量2是指定E3将被添加的添加增量。+E3包括对E4的引用。增量3是指定E4将被添加的添加增量。+E4不包括对其它增量的引用。
回顾表200,应当指出,增量与增量所引用的元素之间的关系必须被遵守以维护引用的完整性。也就是说,如果+E2被接受以便被包括到合并后的文档中,由于+E2引用了E3,+E3也必须被接受。继续地,如果+E3将被接受,由于+E3引用了E4,E4也必须被接受。
图3是示出了由图2的表所指定的和由连接增量的实线箭头所指示的先决条件关系的有向图。图3描述了先决条件添加增量关系和用于处理这样的增量的规则。当添加增量被合并工具接受时,先决条件添加关系必须被遵守以维护引用的整体性。先决条件添加增量关系可以被定义为如下给定两个添加增量D1和D2,如果D1包括由D2包括的添加元素所引用的添加元素,则D1是D2的先决条件。
通常,如果特定的添加增量(称为目标添加增量)被考虑接受到合并后的文档,则所有用于该目标添加增量的先决条件添加增量必须首先被接受。所述目标增量和所述目标的任何先决条件增量可以被看作将作为组被接受的原子单元。图3指示如果增量+E2被选择为目标并被考虑接受,则增量+E4和+E3必须被接受。增量+E4必须首先被接受,随后是增量+E3。如果增量+E3被选择为目标并被考虑接受,则增量+E4必须首先被接受。因此,增量+E4是增量+E3的先决条件。类似地,增量+E3是增量+E2的先决条件。在此实例中,如果增量+E3被接受,则不必接受增量+E2。类似地,如果增量+E4被接受,则不必接受增量+E3或+E2。
图4是示出了由图2的表所指定的和由虚线指示的从属关系的有向图。图4描述了从属添加关系和用于处理这样的增量的规则。当(或如果)添加增量被合并工具拒绝时,这些从属添加关系必须被遵守以维护引用的整体性。从属添加增量关系可以被定义为如下给定两个添加增量D1和D2,如果D1是D2的先决条件,则D2是D1的从属。通常,为了拒绝目标添加增量,所有依赖该目标添加增量的添加增量都必须先于目标增量被拒绝。目标增量和任何从属添加增量可以被看作将作为组被拒绝的原子单元。
图4示出了增量+E2依赖增量+E3并且增量+E3依赖增量+E4。为了说明,如果增量+E3被选择为目标增量并考虑用于拒绝,则增量+E2必须先于该目标被拒绝。值得注意地,在这种情况下增量+E4无需被拒绝。如果增量+E4被选择为目标并考虑用于拒绝,则增量+E2必须首先被拒绝,随后是增量+E3。增量+E2和+E3都在目标增量+E4之前被拒绝。在另一个实例中,如果增量+E2被选择为目标并考虑用于拒绝,则增量+E3和增量+E4都无需被拒绝。
下表描述了两个文档(版本1和版本1.1)之间的实例合并,其中版本1是基线文档。当比较两个版本时,合并标识了增量+E2、+E3和+E4。虽然以下示出的实例说明了以标记语言格式(例如可扩展标记语言(XML))指定文档的情况,但是应当理解,本发明并不局限于此。例如,本发明可以被应用于数据库模式或任何二进制数据。


图5是示出了根据本发明的另一个实施例的从将被合并的文档的不同版本的比较中标识的增量的表500。如图所示,表500示出了另一组增量1、2和3。在这种情况下,每个增量是由元素描述之后的“-”符号后缀表示的删除增量。表500的第三列指定了由将被删除的每个元素引用的特定的元素。如所指出的,“引用的元素(多个)”列中列出的元素也是标识的增量的主体。也就是说,引用的元素也已被标识用于删除。
因此,增量1是指定E2将被删除的删除增量。E2引用另一个元素E3。增量2是指定E3将被删除的删除增量。E3-包括对E4的引用。增量3是指定E4将被删除的删除增量。E4-不包括对其他元素的引用。标识的增量与“引用的元素(多个)”列中列出的元素(即,那些由将被删除的元素引用的元素)之间的关系必须被遵守以维护引用的完整性。因此,如果增量E3-在合并文档中被接受—意味着增量E3将被删除,则增量E2-也必须被接受,从而导致增量E2的移除。
图6是示出了由图5的表所指定的先决条件关系的有向图。图6描述了先决条件删除增量关系和相应的规则。当删除增量被接受时,先决条件删除增量关系必须被遵守以维护引用的完整性。先决条件删除增量关系可以被定义为如下给定两个删除增量D1和D2,如果D1包括引用了D2所包括的删除元素的删除元素,则D1是D2的先决条件。
通常,如果删除增量被选择为目标并考虑用于接受,则在接受所述目标之前,所述目标的所有先决条件删除增量必须被接受。目标删除增量和任何先决条件删除增量可以被看作将作为组被接受的原子单元。如图6所示,增量E2-是增量E3-的先决条件并且增量E3-是增量E4-的先决条件。因此,如果增量E3-被选择为目标并考虑用于接受,则增量E2-必须首先被接受。但是,增量E4-无需被接受。如果增量E4-被选择为目标并考虑用于接受,则增量E2-必须首先被接受,随后是增量E3-,然后是增量E4-。最终,如果增量E2-被选择为目标并考虑用于接受,则在接受增量E2-之前,增量E3-或增量E4-都无需被接受。
图7是示出了由图5的表所指定的从属关系的有向图。图7描述了从属删除增量关系和用于处理这样的关系的规则。从属删除增量关系可以被定义为如下给定两个删除增量D1和D2,如果D1是D2的先决条件,则D2是D1的从属。通常,如果删除增量被选择为目标增量并考虑用于拒绝,则该目标增量的所有从属删除增量必须首先被拒绝。目标删除增量和所述目标的从属删除增量可以被看作将作为组被拒绝的原子单元。
如图7所示,如果增量E3-被选择为目标并考虑用于拒绝,则增量E4-必须先于该目标而被拒绝。但是,不必拒绝增量E2-。如果增量E2-被拒绝,则增量E4-必须首先被拒绝,而后是增量E3-,继之以增量E2-。如果增量E4-被选择为目标并考虑用于拒绝,则增量E3-和增量E4-都无需被拒绝。
下表描述了两个文档(版本1和版本1.1)之间的实例合并,其中版本1是基线文档。当比较两个版本时,合并标识了增量E2-、E3-和E4-。如所指出的,尽管所示实例说明了以标记语言格式指定文档的情况,但是应当理解,本发明并不局限于此。

图8是示出了根据本发明的另一个实施例的合并文档的不同版本的方法800的流程图。方法800可以由参考图1描述的合并工具来执行。方法800开始于步骤805,在步骤805,可以标识两个或更多将被合并的文档。如所指出的,所述文档可以是同一文档的不同版本。在步骤810,使用一个版本作为基线文档,文档的不同版本可以被分析以标识每个版本之间的增量。
在步骤815,合并工具可以确定标识的每个增量的类型。例如,每个增量根据情况可以被分类为删除增量或添加增量。在步骤820,可以确定标识的增量之间的关系。也就是说,根据称为目标增量的其它增量,增量可以被分类为从属或先决条件。应当理解,虽然可以构造如此处所述的有向图以便分类增量关系,但是无需生成此类数据结构。
在步骤825,判定是否有任何增量彼此冲突。可以根据在增量之间标识的关系来做出冲突是否存在的判定。例如,如果一个增量指定移除由另一个增量添加的元素所引用的元素,则存在冲突。当合并工具具有语义和句法处理能力时(就具有定义的结构的文档而言)可以做出判定。所述结构可以由文档类型或其中包括的文本和/或语言的类型来定义。如果存在冲突,所述方法可以继续到步骤830。如果不存在,所述方法可以继续到步骤835,在步骤835,增量可以被接受。
在步骤830,合并工具可以可选地提供冲突的可听和/或视觉通知。进而,合并工具可以提供对冲突性质的描述。所述描述可以包括诸如冲突增量、由冲突增量引用的元素、由于冲突增量而将被添加或移除的元素、破坏的引用之类的信息。也可以向计算机操作者提供是允许合并工具根据此处描述的规则继续自动的合并还是停止合并过程的选择。因此,如果希望,操作者可以停止处理以有利于编辑文档以便纠正标识的一个或多个冲突。
在步骤840,根据所述关系,增量可以被有选择地接受到合并后的文档中。例如,给定目标增量的所有先决条件增量可以在接受所述目标增量之前被递归地接受。给定目标增量的所有从属增量可以在接受所述目标增量之前被递归地拒绝。合并工具可以应用此处描述的规则来确定是否接受和/或拒绝特定的增量。如所指出的,使用此处描述的规则,一个或多个增量的特定集合可以被看作可以作为组被接受或拒绝的原子单元。
此处披露的发明布置提供了一种用于在两个或更多文档上执行合并的解决方案。通常,合并工具编程有将被合并的文本和/或文档类型的构造和结构知识。因此,合并工具可以标识增量、应用一个或多个规则来标识增量之间的关系,以及根据规则和/或关系来有选择地接受或拒绝增量。这样,本发明可以合并两个或更多文档,或者合并文档的不同版本,使得这些文档内的引用完整性得到维护。
本发明可以以硬件、软件或硬件和软件的组合来实现。本发明可以以集中的方式在一个计算机系统中实现或者以分布的方式实现,在所述分布方式中,不同部件可以跨多个互连的计算机系统分布。任何种类的计算机系统或其它适于执行此处所述的方法的装置都是适合的。典型的硬件和软件的组合可以是具有计算机程序的通用计算机系统,当所述程序被加载和执行时,所述程序控制所述计算机系统以使得其执行此处所述的方法。
本发明还可以被嵌入计算机程序产品,其包括允许实现此处所述的方法的所有特征,并且当被加载到计算机系统中时,其能够执行这些方法。当前上下文中的计算机程序或软件是指一组指令的以任何语言、代码或符号表示的任何表达,旨在使具有信息处理能力的系统直接执行特定的功能,或者执行以下两者之一或全部后执行特定的功能a)转换为另一种语言、代码或符号;b)以不同的材料形式再现。
在不偏离本发明的精神或本质属性的情况下,可以以其它形式来实施本发明。因此,应当参考以下权利要求,而不是上述说明书,以此作为本
权利要求
1.一种在软件开发过程期间合并电子文档的多个不同版本的方法,所述方法包括标识所述电子文档的所述多个不同版本,其中所述电子文档具有定义的结构;确定所述不同版本之间的多个增量;根据所述电子文档的所述定义的结构来确定所述多个增量中的单个增量之间的关系;以及根据所述确定的关系有选择地接受所述多个增量中的至少一个增量以创建合并后的电子文档。
2.根据权利要求1的方法,所述确定关系的步骤包括将来自所述多个增量的至少一个增量标识为关于目标增量的先决条件增量。
3.根据权利要求2的方法,所述有选择地接受增量的步骤包括在接受所述目标增量之前递归地接受所有先决条件增量。
4.根据权利要求1的方法,所述确定关系的步骤包括将来自所述多个增量的至少一个增量标识为关于目标增量的从属增量。
5.根据权利要求4的方法,所述有选择地接受增量的步骤包括在拒绝所述目标增量之前递归地拒绝所有从属增量。
6.根据权利要求1的方法,所述确定关系的步骤包括将来自所述多个增量的至少第一增量标识为先决条件增量或从属增量。
7.根据权利要求6的方法,还包括将所述至少第一增量标识为添加增量。
8.根据权利要求6的方法,还包括将所述至少第一增量标识为删除增量。
9.根据权利要求6的方法,还包括将所述至少第一增量标识为移动增量。
10.根据权利要求6的方法,还包括将所述至少第一增量标识为更改增量。
11.根据权利要求1的方法,还包括在所述有选择地接受增量的步骤之前,检测至少两个增量之间的冲突;以及提供所述冲突的通知。
12.一种机器可读存储器,其上存储有具有多个代码部分的计算机程序,所述代码部分可由机器执行以使得所述机器执行以下步骤标识电子文档的多个不同版本,其中所述电子文档具有定义的结构;确定所述不同版本之间的多个增量;根据所述电子文档的所述定义的结构来确定所述多个增量中的单个增量之间的关系;以及根据所述确定的关系有选择地接受所述多个增量中的至少一个增量以创建合并后的电子文档。
13.根据权利要求12的机器可读存储器,所述确定关系的步骤包括将来自所述多个增量的至少一个增量标识为关于目标增量的先决条件增量。
14.根据权利要求13的机器可读存储器,所述有选择地接受增量的步骤包括在接受所述目标增量之前递归地接受所有先决条件增量。
15.根据权利要求12的机器可读存储器,所述确定关系的步骤包括将来自所述多个增量的至少一个增量标识为关于目标增量的从属增量。
16.根据权利要求15的机器可读存储器,所述有选择地接受增量的步骤包括在拒绝所述目标增量之前递归地拒绝所有从属增量。
17.根据权利要求12的机器可读存储器,所述确定关系的步骤包括将来自所述多个增量的至少第一增量标识为先决条件增量或从属增量。
18.根据权利要求17的机器可读存储器,还包括将所述至少第一增量标识为添加增量和删除增量中的至少一个增量。
19.根据权利要求17的机器可读存储器,还包括将所述至少第一增量标识为更改增量和移动增量中的至少一个增量。
20.根据权利要求12的机器可读存储器,还包括在所述有选择地接受增量的步骤之前,检测至少两个增量之间的冲突;以及提供所述冲突的通知。
全文摘要
一种在软件开发过程期间合并电子文档的多个不同版本的方法,所述方法可以包括标识所述电子文档的所述多个不同版本。所述电子文档可以具有定义的结构。所述方法还可以包括确定所述不同版本之间的多个增量和根据所述电子文档的所述定义的结构来确定所述多个增量中的单个增量之间的关系。根据所述确定的关系,所述多个增量中的一个或多个增量可以在合并后的电子文档中被有选择地接受。
文档编号G06F9/44GK1783093SQ20051012919
公开日2006年6月7日 申请日期2005年11月14日 优先权日2004年12月1日
发明者S·科旺, M·穆斯塔法, F·普兰特 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1