维护代码生成器输出的完整性的制作方法

文档序号:8417520阅读:301来源:国知局
维护代码生成器输出的完整性的制作方法
【技术领域】
[0001]本发明涉及代码生成领域,尤其是本发明涉及维护代码生成器输出的完整性(integrity)。
【背景技术】
[0002]代码生成或自动编程描述一个过程,其中由代码生成器解释(例如,在XML中捕获的)某种形式的“模型”并将其转换成程序代码和其他资源。
[0003]例如,某个模型可以捕捉诸如数据库表的表名加上该表中的域之类的信息。然后代码生成应用程序可以创建结构化查询语言(SQL)语句来在特定类型数据库内定义这些元素,并且与其一起创建JavaQava是Sun Microsystems公司的注册商标)代码,用于程序化地检索和修改它们的值。
[0004]代码生成器的吸引力,在于它们能以封装特定的知识和最佳做法,并防止昂贵的、耗时的、由人的失误引入的错误的方式,根据(通常是简单的)输入,快速和一致地创造(通常是复杂的)输出。代码生成应用程序的用户可以,例如,容易且可靠地定义数据库表,而不需要成为各种数据库技术的专家。
[0005]然而,代码生成器的本质问题是,他们以“只写”的模式操作;它们发出输出,但不维护输出。所以,假若将一个条目从某模型中删除(或重命名),那么即便该条目不再构成该模型的一部分,来自以前的代码生成的、与该条目相关的输出还存在。这导致冗余的杂乱数据(clutter)的的逐渐累积,而冗余的杂乱数据会干扰更近来的输出,从而导致出错。
[0006]由于代码生成器变得更常用于从简化的用户接口创建高质量的复杂代码,保持源和输出之间的一致性(consistency)的能力可能会得到越来越多的担心,这种担心可能抑制对代码生成技术的接受程度。
[0007]因此,现有技术种需要解决上述问题。

【发明内容】

[0008]根据本发明的第一方面,提供了一种用于维护代码生成器输出的完整性的方法,包括:确定由特定代码生成应用程序基于原始模型生成的生成输出;分析所述生成输出以推断原始模型的推断版本的内容;将所述原始模型的推断版本与原始模型的当前版本进行比较,以检测源元素的差异;以及使用检测到的差异来确定在所述生成输出中的冗余元素。
[0009]确定生成输出包括:输入文件系统的文件或内容以及应用基于特定代码生成应用程序的操作的可定制规则进行逆向工程来识别生成输出。
[0010]分析所述生成输出以推断原始模型的推断版本的内容包括:对所述生成输出应用基于对所述特定代码生成应用程序的操作的可定制的规则进行逆向工程。
[0011]所述可定制的规则根据的是特定代码生成应用程序用于命名和/或原始模型的内容的规则。
[0012]所述可定制的规则包括指令的基本集以及根据需要委托给定制逻辑。
[0013]扫描文件系统的文件或者内容来找出与所述可定制的规则中定义的一个文件名模式的匹配,其中所述文件名模式是完全合格的文件名模式,并且定位匹配该文件名但是不允许匹配目录的文件。
[0014]所述扫描包括检查相匹配的文件名是否与一个或多个在所述可定制的规则中指定的额外的指令相符,其中额外的指令包括以预期的内容为形式的签名内容。
[0015]使用具有定位的命名变量的匹配的文件名模式来推断所述原始模型的推断版本的源元素。
[0016]将所述原始模型的所述推断版本与所述原始模型的当前版本进行比较,以检测源元素的差异,包括将所述原始模型的推断版本的内容与所述原始模型的当前版本的所述内容进行比较。
[0017]比较包括:将所述原始模型的推断版本的内容和结构与所述原始模型的当前版本的内容和结构进行比较。
[0018]在一个实施例中,将所述原始模型的所述推断版本与所述原始模型的当前版本进行比较,以检测源元素的差异,包括一种逐个规则的方式,其中,扫描数据以找出每条规则,并且在存储器中部分地创建所述推断模型以允许进行对该规则的比较。
[0019]在另一个实施例中,将所述原始模型的所述推断版本与所述原始模型的当前版本进行比较,以检测源元素的差异,包括在存储器中构建所述原始模型的整个推断版本并且执行模型对模型的直接比较。
[0020]该方法可以包括自动地存档或删除所识别的所述生成输出的冗余元素。
[0021]根据本发明的第二方面,提供了一种用于维护代码生成器输出的完整性的系统,包括:生成输出识别部件,用于确定由特定代码生成应用程序基于原始模型生成的生成输出;推断模型生成部件,用于分析所述生成输出以推断原始模型的推断版本的内容;比较部件,用于将所述原始模型的推断版本与原始模型的当前版本进行比较,以检测源元素的差异;以及清理部件,用于使用检测到的差异来确定在所述生成输出中的冗余元素。
[0022]所述生成输出识别部件确定生成输出包括:输入文件系统的文件或内容以及应用基于特定代码生成应用程序的操作的可定制规则进行逆向工程来识别生成输出。
[0023]推断模型生成部件用于分析所述生成输出以推断原始模型的推断版本的内容包括:对所述生成输出应用基于对所述特定代码生成程序的操作的可定制的规则进行逆向工程。
[0024]所述生成输出识别部件还用于扫描文件系统的文件或者内容来找出与所述可定制的规则中定义的一个文件名模式的匹配,其中所述文件名模式是完全合格的文件名模式,并且定位匹配该文件名但是不允许匹配目录的文件。
[0025]在所述生成输出识别部件,所述扫描包括检查相匹配的文件名是否与一个或多个在所述可定制的规则中指定的额外的指令相符,其中额外的指令包括以预期的内容为形式的签名内容。
[0026]在所述生成输出识别部件,使用具有定位的命名变量的匹配的文件名模式来推断所述原始模型的推断版本的源元素。
[0027]在所述清理部件还用于还用于自动地存档或删除所识别的所述生成输出的冗余元素。
[0028]根据本发明的第三方面,提供了一种用于维护代码生成器输出的完整性的计算机程序产品,所述计算机程序产品包括:可被处理电路和存储的指令读取的计算机可读存储介质,由所述处理电路执行来执行根据本发明第一方面的方法。
[0029]根据本发明的第四方面,提供了存储在计算机可读存储介质、并且可被加载到数字计算机内存的计算机程序,包括软件代码部分,当所述程序在计算机上运行时,执行根据本发明第一方面的方法。
[0030]根据本发明的第五方面,提供了一种方法本质上如参考附图所描述的那样。
[0031]根据本发明的第六方面,提供了一种系统本质上如参考附图所描述的那样。
[0032]本发明所描述的实施例提供了其优势,即其可用于回溯性分析,不需要修改应用程序本身就能校正代码生成应用程序的输出。
【附图说明】
[0033]特别指出关于本发明的主题并在说明书的结论部分清楚地要求保护。本发明的组织和操作方法及其目的、特征和优点,可以通过阅读参考下面的结合附图的详细描述而作最好的理解。
[0034]现在将参考以下附图,仅通过举例的方式,描述本发明的优选实施例,其中:
[0035]图1是根据本发明系统实施例的示例框图;
[0036]图2是本发明可以用于实施的计算机系统实施例的框图;
[0037]图3是根据本发明的方法的一个方面的示例性实施例的流程图;以及
[0038]图4是根据本发明的方法的另一方面的示例性实施例的流程图。
【具体实施方式】
[0039]应当理解,为了简单和清楚地说明,在图中所示的元件未必是按比例绘制的。例如,为了清楚,一些元件的尺寸可能被相对于其它元件夸大。此外,在认为适当时,参考数字可以在多个附图中重复出现,以指示相应的或相似的特征。
[0040]在以下的详细描述中,阐述了许多具体的细节以便提供本发明的彻底理解。然而,本领域技术人员会理解,本发明可以在没有这些具体细节的情况下实施。在其他实例中,为了避免掩盖本发明的实质,对众所周知的方法、过程和部件,未予详述。
[0041]提供了用于代码生成过程的逆向工程的方法和系统,以便文件系统上的文件(和/或它们的内容)可以被用来推断具有很高可靠性的源模型内容。可以将所推断的模型内容与任何当前的模型比较,以便检测自代码生成以来应用过的改变。根据这个知识,就可以“清理”(存档和/或删除)冗余的生成资源,以保证当前的源模型与所生成的代码之间的一致性。
[0042]为了对文件系统的内容进行逆向工程,以便推断a)特定代码生成应用程序输出的材料;以及b)代表冗余的杂乱数据、因此可以被自动地除去的该材料的子集,提出一种框架,该框架能够处理定义的规则,并根据需要委派定制的逻辑。
[0043]为了推断源模型,逆向工程产生的代码利用以下事实:代码生成器遵循关于所生成输出的命名和/或内容的可预测的规则,并且还将在原始源中定义的信息注入到输出。对于上面提到的例子,这将包括把表和字段名注入到符合常规的SQL和Java语法的文件。值得注意的是,代码生成器不输出任意结构的或随机的数据。
[0044]因此,可能定义描述生成输出的特定类型的规则并且将任何文件和这样的规则比较,高准确度地确定它是否是(或者包含)来自代码生成器的输出,以及是否注入到它的源元素在源模型仍然存在。
[0045]如果可以确定,文件或文件内容的一些部分代表了从特定代码生成应用程序的输出,并且任何原始源元素都不再出现(由于被删除或重命名),那么输出项代表了可以被删除的冗余的杂乱数据。
[0046]所描述的方法和系统通过从可定制的规则推断源材料而回溯性地(retrospectively)保证生成输出的完整性。
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1