CN104737125B - 用于维护代码生成器输出的完整性的方法和系统 - Google Patents

用于维护代码生成器输出的完整性的方法和系统 Download PDF

Info

Publication number
CN104737125B
CN104737125B CN201380054687.0A CN201380054687A CN104737125B CN 104737125 B CN104737125 B CN 104737125B CN 201380054687 A CN201380054687 A CN 201380054687A CN 104737125 B CN104737125 B CN 104737125B
Authority
CN
China
Prior art keywords
archetype
file
version
generation
content
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201380054687.0A
Other languages
English (en)
Other versions
CN104737125A (zh
Inventor
R·J·麦迪逊
J·A·比文
R·S·古娜拉提
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN104737125A publication Critical patent/CN104737125A/zh
Application granted granted Critical
Publication of CN104737125B publication Critical patent/CN104737125B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven
    • G06F8/355Round-trip engineering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/74Reverse engineering; Extracting design information from source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

提供了一种计算机实现的用于维护代码生成器输出的完整性的方法和系统,方法可以包括:确定由特定代码生成应用程序基于原始模型生成的生成输出;分析所述生成输出以推断原始模型的推断版本的内容;将所述原始模型的推断版本与原始模型的当前版本进行比较,以检测源元素的差异;以及使用检测到的差异来确定在所述生成输出中的冗余元素。其中确定生成输出包括:输入文件系统的文件或内容以及应用基于特定代码生成应用程序的操作的可定制规则进行逆向工程来识别生成输出。并且分析所述生成输出以推断原始模型的推断版本的内容包括:对所述生成输出应用基于对所述特定代码生成应用程序的操作的可定制的规则进行逆向工程。

Description

用于维护代码生成器输出的完整性的方法和系统
技术领域
本发明涉及代码生成领域,尤其是本发明涉及维护代码生成器输出的完整性(integrity)。
背景技术
代码生成或自动编程描述一个过程,其中由代码生成器解释(例如,在XML中捕获的)某种形式的“模型”并将其转换成程序代码和其他资源。
例如,某个模型可以捕捉诸如数据库表的表名加上该表中的域之类的信息。然后代码生成应用程序可以创建结构化查询语言(SQL)语句来在特定类型数据库内定义这些元素,并且与其一起创建Java(Java是Sun Microsystems公司的注册商标)代码,用于程序化地检索和修改它们的值。
代码生成器的吸引力,在于它们能以封装特定的知识和最佳做法,并防止昂贵的、耗时的、由人的失误引入的错误的方式,根据(通常是简单的)输入,快速和一致地创造(通常是复杂的)输出。代码生成应用程序的用户可以,例如,容易且可靠地定义数据库表,而不需要成为各种数据库技术的专家。
然而,代码生成器的本质问题是,他们以“只写”的模式操作;它们发出输出,但不维护输出。所以,假若将一个条目从某模型中删除(或重命名),那么即便该条目不再构成该模型的一部分,来自以前的代码生成的、与该条目相关的输出还存在。这导致冗余的杂乱数据(clutter)的的逐渐累积,而冗余的杂乱数据会干扰更近来的输出,从而导致出错。
由于代码生成器变得更常用于从简化的用户接口创建高质量的复杂代码,保持源和输出之间的一致性(consistency)的能力可能会得到越来越多的担心,这种担心可能抑制对代码生成技术的接受程度。
因此,现有技术中需要解决上述问题。
发明内容
根据本发明的第一方面,提供了一种用于维护代码生成器输出的完整性的方法,包括:确定由特定代码生成应用程序基于原始模型生成的生成输出;分析所述生成输出以推断原始模型的推断版本的内容;将所述原始模型的推断版本与原始模型的当前版本进行比较,以检测源元素的差异;以及使用检测到的差异来确定在所述生成输出中的冗余元素。
确定生成输出包括:输入文件系统的文件或内容以及应用基于特定代码生成应用程序的操作的可定制规则进行逆向工程来识别生成输出。
分析所述生成输出以推断原始模型的推断版本的内容包括:对所述生成输出应用基于对所述特定代码生成应用程序的操作的可定制的规则进行逆向工程。
所述可定制的规则根据的是特定代码生成应用程序用于命名和/或原始模型的内容的规则。
所述可定制的规则包括指令的基本集以及根据需要委托给定制逻辑。
扫描文件系统的文件或者内容来找出与所述可定制的规则中定义的一个文件名模式的匹配,其中所述文件名模式是完全合格的文件名模式,并且定位匹配该文件名但是不允许匹配目录的文件。
所述扫描包括检查相匹配的文件名是否与一个或多个在所述可定制的规则中指定的额外的指令相符,其中额外的指令包括以预期的内容为形式的签名内容。
使用具有定位的命名变量的匹配的文件名模式来推断所述原始模型的推断版本的源元素。
将所述原始模型的所述推断版本与所述原始模型的当前版本进行比较,以检测源元素的差异,包括将所述原始模型的推断版本的内容与所述原始模型的当前版本的所述内容进行比较。
比较包括:将所述原始模型的推断版本的内容和结构与所述原始模型的当前版本的内容和结构进行比较。
在一个实施例中,将所述原始模型的所述推断版本与所述原始模型的当前版本进行比较,以检测源元素的差异,包括一种逐个规则的方式,其中,扫描数据以找出每条规则,并且在存储器中部分地创建所述推断模型以允许进行对该规则的比较。
在另一个实施例中,将所述原始模型的所述推断版本与所述原始模型的当前版本进行比较,以检测源元素的差异,包括在存储器中构建所述原始模型的整个推断版本并且执行模型对模型的直接比较。
该方法可以包括自动地存档或删除所识别的所述生成输出的冗余元素。
根据本发明的第二方面,提供了一种用于维护代码生成器输出的完整性的系统,包括:生成输出识别部件,用于确定由特定代码生成应用程序基于原始模型生成的生成输出;推断模型生成部件,用于分析所述生成输出以推断原始模型的推断版本的内容;比较部件,用于将所述原始模型的推断版本与原始模型的当前版本进行比较,以检测源元素的差异;以及清理部件,用于使用检测到的差异来确定在所述生成输出中的冗余元素。
所述生成输出识别部件确定生成输出包括:输入文件系统的文件或内容以及应用基于特定代码生成应用程序的操作的可定制规则进行逆向工程来识别生成输出。
推断模型生成部件用于分析所述生成输出以推断原始模型的推断版本的内容包括:对所述生成输出应用基于对所述特定代码生成程序的操作的可定制的规则进行逆向工程。
所述生成输出识别部件还用于扫描文件系统的文件或者内容来找出与所述可定制的规则中定义的一个文件名模式的匹配,其中所述文件名模式是完全合格的文件名模式,并且定位匹配该文件名但是不允许匹配目录的文件。
在所述生成输出识别部件,所述扫描包括检查相匹配的文件名是否与一个或多个在所述可定制的规则中指定的额外的指令相符,其中额外的指令包括以预期的内容为形式的签名内容。
在所述生成输出识别部件,使用具有定位的命名变量的匹配的文件名模式来推断所述原始模型的推断版本的源元素。
在所述清理部件还用于还用于自动地存档或删除所识别的所述生成输出的冗余元素。
根据本发明的第三方面,提供了一种用于维护代码生成器输出的完整性的计算机程序产品,所述计算机程序产品包括:可被处理电路和存储的指令读取的计算机可读存储介质,由所述处理电路执行来执行根据本发明第一方面的方法。
根据本发明的第四方面,提供了存储在计算机可读存储介质、并且可被加载到数字计算机内存的计算机程序,包括软件代码部分,当所述程序在计算机上运行时,执行根据本发明第一方面的方法。
根据本发明的第五方面,提供了一种方法本质上如参考附图所描述的那样。
根据本发明的第六方面,提供了一种系统本质上如参考附图所描述的那样。
本发明所描述的实施例提供了其优势,即其可用于回溯性分析,不需要修改应用程序本身就能校正代码生成应用程序的输出。
附图说明
特别指出关于本发明的主题并在说明书的结论部分清楚地要求保护。本发明的组织和操作方法及其目的、特征和优点,可以通过阅读参考下面的结合附图的详细描述而作最好的理解。
现在将参考以下附图,仅通过举例的方式,描述本发明的优选实施例,其中:
图1是根据本发明系统实施例的示例框图;
图2是本发明可以用于实施的计算机系统实施例的框图;
图3是根据本发明的方法的一个方面的示例性实施例的流程图;以及
图4是根据本发明的方法的另一方面的示例性实施例的流程图。
具体实施方式
应当理解,为了简单和清楚地说明,在图中所示的元件未必是按比例绘制的。例如,为了清楚,一些元件的尺寸可能被相对于其它元件夸大。此外,在认为适当时,参考数字可以在多个附图中重复出现,以指示相应的或相似的特征。
在以下的详细描述中,阐述了许多具体的细节以便提供本发明的彻底理解。然而,本领域技术人员会理解,本发明可以在没有这些具体细节的情况下实施。在其他实例中,为了避免掩盖本发明的实质,对众所周知的方法、过程和部件,未予详述。
提供了用于代码生成过程的逆向工程的方法和系统,以便文件系统上的文件(和/或它们的内容)可以被用来推断具有很高可靠性的源模型内容。可以将所推断的模型内容与任何当前的模型比较,以便检测自代码生成以来应用过的改变。根据这个知识,就可以“清理”(存档和/或删除)冗余的生成资源,以保证当前的源模型与所生成的代码之间的一致性。
为了对文件系统的内容进行逆向工程,以便推断a)特定代码生成应用程序输出的材料;以及b)代表冗余的杂乱数据、因此可以被自动地除去的该材料的子集,提出一种框架,该框架能够处理定义的规则,并根据需要委派定制的逻辑。
为了推断源模型,逆向工程产生的代码利用以下事实:代码生成器遵循关于所生成输出的命名和/或内容的可预测的规则,并且还将在原始源中定义的信息注入到输出。对于上面提到的例子,这将包括把表和字段名注入到符合常规的SQL和Java语法的文件。值得注意的是,代码生成器不输出任意结构的或随机的数据。
因此,可能定义描述生成输出的特定类型的规则并且将任何文件和这样的规则比较,高准确度地确定它是否是(或者包含)来自代码生成器的输出,以及是否注入到它的源元素在源模型仍然存在。
如果可以确定,文件或文件内容的一些部分代表了从特定代码生成应用程序的输出,并且任何原始源元素都不再出现(由于被删除或重命名),那么输出项代表了可以被删除的冗余的杂乱数据。
所描述的方法和系统通过从可定制的规则推断源材料而回溯性地(retrospectively)保证生成输出的完整性。
然而在实践中,执行这项任务必须克服性能困难,原因是,文件系统中的所有文件可能都必须被检查,并且还必须避免以似是但却不是所生成的代码的数据为形式的误报(false positives)。
参考图1,框图显示了所描述的系统100的示例性实施例。
可以提供原始模型101,从该模型中,代码生成应用程序110生成以程序代码或资源为形式的生成输出(generated output)102。
所描述的方法提供了维护生成输出102的一致性的输出更新部件120。该输出更新部件120可以是代码生成应用程序整体的一部分,或者也可以是与其分立的。
代码更新部件120可以包括逆向工程部件121,后者的形式是具有可定制的规则122的规则引擎,可定制的规则122使得能够对代码生成应用程序110的生成输出102进行逆向工程。可以为特定类型的生成输出生成可定制的规则122。代码生成应用程序110通常遵循生成程序代码或资源的可预见规则,并且也将信息从原始模型101注入到输出。这种可预见的规则可用于定制逆向工程部件121的规则。
逆向工程部件121可以将其内具有生成输出102的文件系统106的文件或内容作为输入,逆向工程部件121可以包括一个生成输出识别部件123,其用于确定文件、代码或内容,代表从特定代码生成应用程序110的输出。输出识别部件123可以使用可定制的规则122做到这一点。
逆向工程部件121也可以包括一个推断模型生成部件124,其用于使用可定制的规则122从生成输出102生成推断模型103的内容和结构。可定制的规则122提供必要的信息来基于检测到的生成输出102推断原始模型必须看起来像是什么。
在理想的情况下,可以创建一个与原始模型101的每一个细节都等同的推断模型103。在实践中,可能会有差异,例如,原始模型中的文档可能不在生成的材料中,所以不会在推断模型103中被复制。然而,除非在生成输出102中有歧义,否则,有可能建立一个推断模型103,其包含的内容足够用于:a)对模型104的当前视图进行比较;或b)实际重新创建生成输出102。
输出更新部件120可以包括用于将推断模型103的内容与对应于原始模型101的当前模型104进行比较的比较部件。比较部件125可以检测自生成输出102被创建以来施加到原始模型101的任何变化。
输出更新部件120可以包括一个清理部件126,用于存档和/或删除生成输出102的任何现在冗余成分,以提供清理后的生成输出105。
参考图2,本发明实现方面的示例性系统包括适用于存储和/或执行的程序代码的数据处理系统200,包括至少通过系统总线203直接或间接地连接到存储单元的处理器201。存储单元可以包括程序代码实际执行期间使用的本地存储器、海量存储器、以及执行期间为了减少必须从海量存储器取回代码的次数、提供至少一些程序代码的临时存储的高速缓冲存储器。
存储单元可以包括只读存储器(ROM)204和随机存取存储器(RAM)205形式的系统存储器202。基本输入/输出系统(BIOS)206可以被存储在ROM 204中。软件207包括系统软件208和应用软件210,系统软件包括操作系统(OS)209,系统软件208和应用软件210都可以被存储在RAM 205中。
该数据处理系统200还可以包括主存储器211,如磁性硬盘驱动器,和辅助存储器212,如磁盘驱动器和光盘驱动器。驱动器及其相关的计算机可读介质为数据处理系统200的计算机可执行指令、数据结构、程序模块和其他数据提供非易失性存储。软件应用程序可以被存储在主存储器211和辅助存储器212以及系统存储器202中。
数据处理系统200可以在网络环境中通过网络适配器216使用到一个或多个远程计算机的逻辑连接来操作。
输入/输出(I/O)设备213可直接或通过中间的I/O控制器耦合到系统。用户可以通过输入设备如键盘,指示设备,或其他输入设备(例如,麦克风,操纵杆,游戏垫,卫星天线,扫描仪,等)输入命令和信息到数据处理系统200。输出设备可以包括扬声器,打印机,等。显示器214还通过接口,如视频适配器215,连接到系统总线203。
参考图3,流程图300示出了描述的维护代码生成应用程序生成的输出的一致性的方法的实施例。
文件系统的文件或内容可以被用作输入301,在该输入内是要被更新的生成输出。作为被更新的目标的生成程序输出,可能是由基于某原模型的特定代码生成应用程序生成的。
该方法不限于特定的产品。在某源材料(如模型)被用来生成某目标材料(如文件)的情况下,可以使用所描述的方法。
在302,生成输出可以被确定为是该特定代码生成应用程序输出的材料,并且是从源模型生成的材料。该确定可以通过使用定义的可定制规则,对文件系统的文件或内容进行逆向工程来进行。可定制规则可以提供为基于检测到的生成输出推断出原始模型一定像什么所必需的信息。
例如,该确定可以通过扫描和匹配的文件系统的内容来匹配完全合格(fullyqualified)的文件名模式来执行。通过限定“完全合格”,文件而不是目录可以被定位。例如,可以为一个叫做“/a/b/c/d/file.java”的文件找到一个匹配,但是,不允许目录“a/b/c/d”(因此也隐含地包括其内容)被匹配。原因在于不可能准确地知道在目录中到底是什么(在没有阅读所有的文件的情况下),从而也不可能肯定地认为这个目录本身和它的所有内容都是从某特定的源模型生成的。因此,该方法在单个文件级别上可以工作,因此使用术语“完全合格”。
扫描和匹配,可以利用内嵌的命名通配符。
通配符可以是*字符,例如Hello*World。这将匹配任何起始为Hello,结束为World的字符串(例如HelloThereWorld)。在所描述的方法中,提供的通配符能够确定通配符替换的字符串的值。因此,可以给出通配符的名字以便识别它们。在上面的例子中,也可以使用Hello%WildCard1%World。该通配符的名字是“WildCard1”,其之所以被解释为是通配符,是因为被字符%包围。匹配算法可以跟踪这些通配符的值。例如,当匹配HelloThereWorld时,“WildCard1”的值是“There”。这提供了在匹配代码(matching code)和用于检查匹配命中(hits)的逻辑之间的方便的分离。
也可以使用复杂的开放式(open-ended)通配符匹配,开放式通配符匹配可以跨多个文件夹,例如C:\%%whoknowswhere%%\Wibble.txt可以定位名为Wibble.txt的文件,并且返回如“whoknowswhere=myDir\\A\B\C\someOtherDir""whoknowswhere=myDir\X\Y"等的值。
可以检查与规则中的额外的指令(directives)相符,例如,检查“签名”单词或短语的存在。
这可以包括检查内部的文件,以确认某预期内容的存在。例如,响应于名为“Alpha”的原始模型内的实体的存在,可以产生名为AlphaBusinessObject.java的文件。在同一位置,可能遇到名为BetaBusinessObject.jar的文件。这个文件之所以可能存在,是因为在原始模型中曾经有过等效的对象“Beta”,或者该文件是不相关的用户文件。将该文件纳入推断模型之前,可以检查文件的内容,以检查其包含生成内容。可以针对特定的关键字、字符串、文本块以及使得该方法能确保该文件被生成而故意生成的标记,进行检查。
可以根据与生成了生成输出的特定代码生成应用程序相关的可定制规则,对生成输出进行逆向工程303,来获得一个推断模型的内容。该推断模型是该特定生成应用程序生成该生成输出所基于的源模型的逆向工程模型(reverse engineered model)。该推断模型可以包括由步骤302的扫描和匹配过程定位的命名变量的推断源元素(inferred sourceelements)。
在304,将推断模型的内容与当前模型的内容进行比较,该当前模型是原始模型的最新版本,生成的程序代码或资源是由该特定代码生成应用程序从该源模型生成的。
在一个实施例中,可以将推断模型的内容和结构二者都与当前模型的内容和结构进行比较,并且可能要求一个摘录结构和内容匹配(extract structural and contentmatch)。如何进行比较依赖于模型本身的语义。在另一实施例中,推断模型和当前模型在语义上可能是可比较的,但是具有不同的结构。
在305,可以检测推断模型的内容和当前模型的内容之间的任何差异。例如,尝试在当前模型(包括任何子模型部分)中解析(resolve)从扫描和匹配过程定位的命名变量推断出的源元素。任何不能解析的源元素,均表明其相关联的文件或局部是冗余的,可以被自动清理。
扫描和匹配过程可以定位特定类型的模型的冗余的人工制品(artifacts)(如规则所定义的那样),但是可能找到与某个类型的模型的多个不同实例有关的材料,并且能够识别哪些模型适用于哪些冗余的人工制品。
在如图4所示的描述的方法的第一实施例中,可以使用一种逐个规则的方法,其中,扫描文件系统找出每条规则,并在内存中创建推断模型,以允许进行对该规则的比较。在第二个实施例中,可以构建在内存中构建整个模型,然后可以执行模型对模型的直接比较。
参照图4的流程图400,描述所述确定生成输出和检测冗余成分(components)的方法的第一实施例。
在401,可以应用一个逆向工程部件规则来识别在文件系统的输入文件或内容中完全合格的文件名模式。
在402,可以扫描文件系统的输入文件或内容以匹配规则中定义的完全合格的文件名。
一旦找到匹配的完全合格的文件名,在403,用定位的命名变量来推断信息。在404,可以检查所匹配的文件是否符合在规则中规定的任何额外的指令(directives),例如,“签名”的内容。
在405,确定所匹配的文件是否明显是由为其定制了规则的特定生成应用程序生成的生成输出。如果有疑问,那么在406,可以将所匹配的文件标记为“未经证实的“,并且为了进行对该文件的清理,可能需要人工确认。
如果所匹配的文件明显是生成输出,那么在407,可以推断从由扫描和匹配过程定位的命名变量推断源元素。在408,推断的源元素可以被解析为当前源模型。
任何未解析的源元素都是冗余成分,在409可以从所匹配的文件中自动清理。
以下给出了使用第一个实施例的方法识别生成输出的规则的例子。
可以(例如,使用标准的可扩展标记语言(XML))规定完全合格的输出文件名的“形状”如下:
<ruleString>%Project%/src/%%Package%Name%/entity/E%EntityExtension%Ext.java</ruleString>
这是为了识别一个映射到源“项目”的顶级文件夹、一个名为“src”的直接子文件夹、随后的一个映射到名为"PackageName"的元素的不定长度的子文件夹结构、以及最后的一个其文件名间接映射到“entityextension”元素的文件。
也可以规定,匹配这个模式的任何文件还必须直接实现两个特定的类中的一个(该模式已经将其定义为Java文件),并且包含进一步表明该文件已经被生成的某种任意“签名”。
<implements>com.ibm.common.IExtension|
com.ibm.base.IBaseExtension</implements>
<containsString>&lt;!--ExtendedObject--&gt;</containsString>
最后,可以指定定制逻辑来进行和规则相关的源模型的导航。如果规则的语法不足以描述某些标准,可以使用定制逻辑,可以允许用户将自己的代码挂钩到框架中。
定制逻辑一旦被定位,就可以根据个案被用于辅助在文件中导航。例如,一个文件可能包含一系列由模型中的不同元素贡献的类似条目。这些条目的每一个都可以被认为是一个“匹配”(即在单个文件里的多个匹配),这个定制逻辑可以辅助每个匹配的识别。
这后一个特征还允许将任意XML扩展引入到定制逻辑能够处理的规则结构。
为了对文件系统的内容进行逆向工程,以便推断a)特定代码生成应用程序输出的材料;以及b)代表冗余的杂乱数据、因此可以被自动地除去的该材料的子集,提出一种框架,该框架能处理这些类型的规则、处理一组基本的XML指令以及根据需要委托定制逻辑。
这一框架可以首先扫描文件系统寻找完全合格的文件名模式上的匹配。这里使用了嵌入式”命名“通配符(如上图所示通过将变量名使用%或%%符号包围起来),其也带来了性能上的好处,因为这一技术能够快速识别文件系统的无关部分,从而减少扫描量。
采用上面的例子模式,任何不包含名为“src”的直接子文件夹的顶级文件夹永远不会产生匹配,过程就可以直接前进到下一个顶层文件夹。同样,即使这种模式的软件包的名称部分具有不确定的长度,除非遇到名为“实体”的文件夹,否则没有理由在该文件级进一步扫描。
假设发现一个完全合格的文件名的匹配,那么该框架已经定位了(populate)嵌入在文件名模式的命名变量。使用上面的例子,例如文件:
MyProject/src/com/ibm/models/entity/EMyAddressExt.java
会匹配并且推断出下列信息:
Project=MyProject
PackageName=com/ibm/models
EntityExtension=MyAddress
该框架现在可以审查匹配的文件对规则中可能指定的额外指令的顺从度,例如审查“签名”的单词或短语的存在,是否某Java文件实现和/或扩展了特定类。如果它通过了所有这些审查,那么就有合理的确定性:这是(或包含)生成输出。
在还没有充分的证据证明该文件被生成的情况下(例如,“签名”可能丢失,或者有明显的迹象表明用户的定制把单词“not”附加到被注入的"@generated"标签),该框架标注这种匹配为“未经证实的”,为了进行清理,需要手动确认。
在这个阶段,该框架有一组肯定源于特定代码生成应用程序的匹配。现在从由扫描和匹配过程而定位的命名变量(见上文)推断出源元素,并且试图在所有适用的源模型中解析这些源元素。任何不能被解析的源元素,都表明相关的文件或其中的一部分是冗余的,可以被自动清理。在这样方式下,该框架能够确保生成输出总是与源输入一致。
可以使用所描述的方法和系统以及使用可定制的规则引擎,分析任何文件(Java类,XML,文本,等等),可以以非常高的精确度确定,代码是否是由特定类型的代码生成器的应用程序生成的,以及代码是否仍然相关。
所描述的方法和系统能够在没有显式耦合的情况下,从生成的代码逆向工程得到模型信息,而不依赖于专用编辑器来保持模型和代码二者互相对齐。它还支持适合多种不同的模型代码生成场景的可定制的规则。
所描述的方法和系统通过使用描述代码生成器的行为的关键方面的灵活规则,从生成输出推断出代码生成器的输入。
在文件系统中可以有大量的文件,所有这些文件都必须针对大量不同的规则来检查,查找匹配。所描述的方法能够快速做到该点以使该过程集成到代码生成中。
所述方法还包括用于确保仅实际生成的代码被改变的机制。具体而言,文件或者文件的内容不应仅仅因为它与生成的内容相似而被删除。
本发明可以采取完全硬件实施例,完全软件实施例或包含硬件和软件元件的实施例的形式。在一个优选的实施方案中,本发明以软件实现,其包括但不限于固件,驻留软件,微码等。
本发明可以采取从计算机可用或者计算机可读的介质可访问的计算机程序产品的形式来使用或与计算机或任何指令执行系统连接。对于本说明书的目的,计算机可用或计算机可读介质可以是任何可以包含,存储,通信,传播,或通过或结合指令执行系统,装置或设备结合使用的程序的装置。
该介质可以是电子,磁,光,电磁,红外线或半导体系统(或装置或设备)或传播介质。计算机可读介质的实例包括半导体或固态存储器,磁带,可移动计算机磁盘,随机存取存储器(RAM),只读存储器(ROM),硬磁盘和光盘。光盘的当前示例包括只读存储器(CD-ROM)的光盘,光盘读/写(CD-R/W)和DVD。
所属技术领域的技术人员知道,本发明的各个方面可以实现为系统、方法或计算机程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、驻留软件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明的各个方面还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些计算机程序指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。
也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得计算机、其它可编程数据处理装置、或其他设备以特定方式工作,从而,存储在计算机可读介质中的指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品(article of manufacture)。
该计算机程序指令还可以被加载到计算机,其它可编程数据处理设备或其它装置,使要在计算机,其它可编程设备或其他设备上执行的一系列操作步骤以产生计算机实现的过程,使得在计算机或其它可编程装置上执行的指令提供用于实现在流程图和/或框图的块或多个块中指定的功能/动作的过程。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
在不背离本发明范围的情况下,可以对上述公开进行改进和修改。

Claims (29)

1.一种计算机实现的用于维护代码生成器输出的完整性的方法,包括:
确定由特定代码生成应用程序基于原始模型生成的生成输出,其中,所述生成输出是程序代码,所述原始模型是可扩展标记语言XML代码,由所述特定代码生成应用程序解释并转换成所述程序代码;
分析所述生成输出以推断原始模型的推断版本的内容;
将所述原始模型的推断版本与原始模型的当前版本进行比较以检测与所述原始模型相比而言所述推断版本的源元素的差异;以及
使用检测到的差异来确定在所述生成输出中的冗余元素,其中,所述冗余元素是所述特定代码生成应用程序用当前模型生成的生成输出中不会生成的元素。
2.根据权利要求1所述的方法,其中确定生成输出包括:
输入文件系统的文件或内容以及应用基于特定代码生成应用程序的操作的可定制的规则进行逆向工程来识别生成输出。
3.根据权利要求1或2所述的方法,其中分析所述生成输出以推断原始模型的推断版本的内容包括:
对所述生成输出应用基于对所述特定代码生成程序的操作的可定制的规则进行逆向工程。
4.根据权利要求2所述的方法,其中所述可定制的规则根据的是特定代码生成应用程序用于命名和/或原始模型的内容的规则。
5.根据权利要求3所述的方法,其中所述可定制的规则根据的是特定代码生成应用程序用于命名和/或原始模型的内容的规则。
6.根据权利要求2所述的方法,其中所述可定制的规则包括指令的基本集以及根据需要委托给定制逻辑。
7.根据权利要求3所述的方法,其中所述可定制的规则包括指令的基本集以及根据需要委托给定制逻辑。
8.根据权利要求2所述的方法,通过扫描文件系统的文件或者内容来找出与所述可定制的规则中定义的一个文件名模式的匹配,其中所述文件名模式是完全合格的文件名模式,并且定位匹配文件名但是不允许匹配目录的文件。
9.根据权利要求3所述的方法,通过扫描文件系统的文件或者内容来找出与所述可定制的规则中定义的一个文件名模式的匹配,其中所述文件名模式是完全合格的文件名模式,并且定位匹配文件名但是不允许匹配目录的文件。
10.根据权利要求8所述的方法,所述可定制的规则中定义的文件名模式包括嵌入式命名通配符。
11.根据权利要求8所述的方法,其中所述扫描包括检查相匹配的文件名是否与一个或多个在所述可定制的规则中指定的额外的指令相符,其中额外的指令包括以预期的内容为形式的签名内容。
12.根据权利要求8所述的方法,通过使用具有定位的命名变量的匹配的文件名模式来推断所述原始模型的推断版本的源元素。
13.根据权利要求1或2所述的方法,其中,所述将所述原始模型的所述推断版本与所述原始模型的当前版本进行比较以检测与所述原始模型相比而言所述推断版本的源元素的差异包括:将所述原始模型的推断版本的内容与所述原始模型的当前版本的内容进行比较。
14.根据权利要求10所述的方法,其中,所述将所述原始模型的所述推断版本与所述原始模型的当前版本进行比较以检测与所述原始模型相比而言所述推断版本的源元素的差异包括:将所述原始模型的推断版本的内容和结构与所述原始模型的当前版本的内容和结构进行比较。
15.根据权利要求1或2所述的方法,其中,所述将所述原始模型的所述推断版本与所述原始模型的当前版本进行比较以检测与所述原始模型相比而言所述推断版本的源元素的差异包括:一种逐个规则的方式,其中,扫描数据以找出每条规则,并且在存储器中部分地创建推断模型以允许进行对该规则的比较。
16.根据权利要求1或2所述的方法,其中,所述将所述原始模型的所述推断版本与所述原始模型的当前版本进行比较以检测与所述原始模型相比而言所述推断版本的源元素的差异包括:在存储器中构建所述原始模型的整个推断版本并且执行模型对模型的直接比较。
17.根据权利要求1或2所述的方法,包括:自动地存档或删除所识别的所述生成输出的冗余元素。
18.一种用于维护代码生成器输出的完整性的系统,包括:
生成输出识别部件,用于确定由特定代码生成应用程序基于原始模型生成的生成输出,其中,所述生成输出是程序代码,所述原始模型是可扩展标记语言XML代码,由所述特定代码生成应用程序解释并转换成所述程序代码;
推断模型生成部件,用于分析所述生成输出以推断原始模型的推断版本的内容;
比较部件,用于将所述原始模型的推断版本与原始模型的当前版本进行比较,以检测与所述原始模型相比而言所述推断版本的源元素的差异;以及
清理部件,用于使用检测到的差异来确定在所述生成输出中的冗余元素,其中,所述冗余元素是所述特定代码生成应用程序用当前模型生成的生成输出中不会生成的元素。
19.根据权利要求18所述的系统,其中所述生成输出识别部件确定由
特定代码生成应用程序基于原始模型生成的生成输出包括:
输入文件系统的文件或内容以及应用基于特定代码生成应用程序的操作的可定制规则进行逆向工程来识别生成输出。
20.根据权利要求18或19所述的系统,其中推断模型生成部件用于分析所述生成输出以推断原始模型的推断版本的内容包括:对所述生成输出应用基于对所述特定代码生成程序的操作的可定制的规则进行逆向工程。
21.根据权利要求20所述的系统,其中所述可定制的规则根据的是特定代码生成应用程序用于命名和/或原始模型的内容的规则。
22.根据权利要求20所述的系统,其中所述生成输出识别部件还用于扫描文件系统的文件或者内容来找出与所述可定制的规则中定义的一个文件名模式的匹配,其中所述文件名模式是完全合格的文件名模式,并且定位匹配文件名但是不允许匹配目录的文件。
23.根据权利要求21所述的系统,其中所述生成输出识别部件还用于扫描文件系统的文件或者内容来找出与所述可定制的规则中定义的一个文件名模式的匹配,其中所述文件名模式是完全合格的文件名模式,并且定位匹配文件名但是不允许匹配目录的文件。
24.根据权利要求23所述的系统,所述可定制的规则中定义的文件名模式包括嵌入式命名通配符。
25.根据权利要求23所述的系统,其中在所述生成输出识别部件,所述扫描包括检查相匹配的文件名是否与一个或多个在所述可定制的规则中指定的额外的指令相符,其中额外的指令包括以预期的内容为形式的签名内容。
26.根据权利要求24所述的系统,其中在所述生成输出识别部件,所述扫描包括检查相匹配的文件名是否与一个或多个在所述可定制的规则中指定的额外的指令相符,其中额外的指令包括以预期的内容为形式的签名内容。
27.根据权利要求23所述的系统,其中在所述生成输出识别部件,使用具有定位的命名变量的匹配的文件名模式来推断所述原始模型的推断版本的源元素。
28.根据权利要求18或19所述的系统,其中在所述清理部件还用于自动地存档或删除所识别的所述生成输出的冗余元素。
29.一种用于维护代码生成器输出的完整性的计算机可读介质,其中存储有计算机程序,当所述计算机程序在计算机上运行时,执行根据权利要求1-17之一的方法。
CN201380054687.0A 2012-10-23 2013-06-12 用于维护代码生成器输出的完整性的方法和系统 Active CN104737125B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1219023.7 2012-10-23
GB1219023.7A GB2507273A (en) 2012-10-23 2012-10-23 Maintaining integrity of output of code generators
PCT/IB2013/054818 WO2014064545A1 (en) 2012-10-23 2013-06-12 Maintaining integrity of output of code generators

Publications (2)

Publication Number Publication Date
CN104737125A CN104737125A (zh) 2015-06-24
CN104737125B true CN104737125B (zh) 2018-03-06

Family

ID=47359327

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201380054687.0A Active CN104737125B (zh) 2012-10-23 2013-06-12 用于维护代码生成器输出的完整性的方法和系统

Country Status (6)

Country Link
US (1) US9354870B2 (zh)
JP (1) JP6282281B2 (zh)
CN (1) CN104737125B (zh)
DE (1) DE112013004668T5 (zh)
GB (1) GB2507273A (zh)
WO (1) WO2014064545A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109683936B (zh) * 2018-12-20 2023-03-14 恒生电子股份有限公司 灰度发布方法及装置、存储介质及电子设备
CN113031995B (zh) * 2021-05-21 2021-09-14 北京神州泰岳智能数据技术有限公司 一种更新规则的方法、装置、存储介质以及电子设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1346466A (zh) * 1998-12-22 2002-04-24 电脑联合想象公司 用于在数据库中执行程序设计语言/结构化查询语言存储的代码对象的方法和设备
CN1382280A (zh) * 1999-02-05 2002-11-27 坦斯利卡公司 用于设计可配置的处理器的自动处理器产生系统及其方法

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6502239B2 (en) * 1998-11-12 2002-12-31 Computer Associates Think, Inc Method and apparatus for round-trip software engineering
US8321457B2 (en) * 2000-09-08 2012-11-27 Oracle International Corporation Techniques for automatically developing a web site
US6339776B2 (en) * 1999-10-04 2002-01-15 International Business Machines Corporation Dynamic semi-structured repository for mining software and software-related information
US7810069B2 (en) * 1999-10-05 2010-10-05 Borland Software Corporation Methods and systems for relating data structures and object-oriented elements for distributed computing
US6604110B1 (en) 2000-08-31 2003-08-05 Ascential Software, Inc. Automated software code generation from a metadata-based repository
US7237190B2 (en) * 2001-03-07 2007-06-26 International Business Machines Corporation System and method for generating multiple customizable interfaces for XML documents
US7035866B1 (en) * 2001-10-09 2006-04-25 Microsoft Corporation System and method providing diffgram format
US9521209B2 (en) * 2002-11-06 2016-12-13 Code Valley Corp Pty Ltd Code generation
US8589861B2 (en) * 2002-11-06 2013-11-19 Code Valley Corp Pty Ltd Code generation
GB2405499A (en) * 2003-09-01 2005-03-02 Isis Innovation Information system development
US7533365B1 (en) * 2004-02-03 2009-05-12 Borland Software Corporation Development system with methodology for run-time restoration of UML model from program code
US7856621B2 (en) 2004-05-19 2010-12-21 International Business Machines Corporation Method for synchronization of concurrently modified interdependent semi-derived artifacts
CA2566000C (en) * 2004-05-20 2016-11-08 Code Valley Corp Pty Ltd. Code generation techniques
US7617479B2 (en) * 2005-06-28 2009-11-10 International Business Machines Corporation Method and apparatus for generating service frameworks
US20070234278A1 (en) * 2006-03-02 2007-10-04 Microsoft Corporation Managing source code in a model-based development environment
US8429601B2 (en) * 2007-11-29 2013-04-23 Red Hat, Inc. Code completion for object relational mapping query language (OQL) queries
US8010578B2 (en) * 2008-06-27 2011-08-30 Microsoft Corporation Method of refactoring a running database system
EP2294508A4 (en) * 2008-06-30 2013-10-16 Mominis Ltd METHOD FOR GENERATING AND DISTRIBUTING A COMPUTER APPLICATION
US8813024B2 (en) * 2008-09-22 2014-08-19 International Business Machines Corporation System and a method for cross-platform porting of business application and making them contextually-aware on target platforms
US20100125827A1 (en) * 2008-11-18 2010-05-20 International Business Machines Corporation Developing software code using parameterized annotations
US8024688B1 (en) * 2008-12-12 2011-09-20 Xilinx, Inc. Deterring reverse engineering
US20100198844A1 (en) * 2009-01-30 2010-08-05 Thales-Raytheon Systems Company, LLC Automatic Code Generation
US8239823B2 (en) * 2009-03-20 2012-08-07 Microsoft Corporation Generating libraries for reflection without project compilation
US8407667B2 (en) * 2009-03-20 2013-03-26 Microsoft Corporation Inferring missing type information for reflection
US20110023014A1 (en) * 2009-07-24 2011-01-27 Ensequence, Inc. Method and apparatus for modifying an executable application using in-memory object representation
US8364651B2 (en) * 2009-08-28 2013-01-29 Optuminsight, Inc. Apparatus, system, and method for identifying redundancy and consolidation opportunities in databases and application systems
US20110060895A1 (en) * 2009-09-09 2011-03-10 Neal Solomon System and methods for generating and organizing modular program code components
US20110088011A1 (en) * 2009-10-14 2011-04-14 Vermeg Sarl Automated Enterprise Software Development
US8549468B2 (en) * 2010-02-08 2013-10-01 National Tsing Hua University Method, system and computer readable storage device for generating software transaction-level modeling (TLM) model
CA2734199C (en) 2010-03-18 2017-01-03 Accenture Global Services Limited Evaluating and enforcing software design quality
US9262158B2 (en) * 2010-12-13 2016-02-16 Microsoft Technology Licensing, Llc Reverse engineering user interface mockups from working software
US8918885B2 (en) * 2012-02-09 2014-12-23 International Business Machines Corporation Automatic discovery of system integrity exposures in system code

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1346466A (zh) * 1998-12-22 2002-04-24 电脑联合想象公司 用于在数据库中执行程序设计语言/结构化查询语言存储的代码对象的方法和设备
CN1382280A (zh) * 1999-02-05 2002-11-27 坦斯利卡公司 用于设计可配置的处理器的自动处理器产生系统及其方法

Also Published As

Publication number Publication date
CN104737125A (zh) 2015-06-24
JP6282281B2 (ja) 2018-02-21
US20140115559A1 (en) 2014-04-24
GB2507273A (en) 2014-04-30
JP2016500875A (ja) 2016-01-14
DE112013004668T5 (de) 2015-07-09
GB201219023D0 (en) 2012-12-05
WO2014064545A1 (en) 2014-05-01
US9354870B2 (en) 2016-05-31

Similar Documents

Publication Publication Date Title
US9600403B1 (en) Method and system for creating functional model of test cases
Hegedüs et al. Back-annotation of simulation traces with change-driven model transformations
CN104636409B (zh) 促进搜索结果的显示的方法、设备和产生搜索结果的方法
US9311062B2 (en) Consolidating and reusing portal information
CN108139891A (zh) 针对外部文件的缺失包括建议
US20180074818A1 (en) Source code mapping through context specific key word indexes and fingerprinting
CN111507086A (zh) 本地化应用程序中翻译文本位置的自动发现
US10311404B1 (en) Software product development defect and issue prediction and diagnosis
WO2015159501A1 (ja) 検証性質統合装置、検証性質統合方法および検証性質統合プログラムが記録された記憶媒体
US20170161335A1 (en) Analyzing Tickets Using Discourse Cues in Communication Logs
US11048621B2 (en) Ensuring source code integrity in a computing environment
JP2022091685A (ja) プログラミング言語コーパスの生成
KR102462541B1 (ko) 오픈소스 소프트웨어의 라이선스를 검증하는 방법 및 시스템
JP2008299723A (ja) プログラム検証方法、プログラム検証装置
Molka et al. Conformance checking for BPMN-based process models
Martínez et al. Efficient model similarity estimation with robust hashing
CN104737125B (zh) 用于维护代码生成器输出的完整性的方法和系统
CN104572439A (zh) 回归警告方法和系统
JP5164919B2 (ja) テストデータ生成方法及び装置及びプログラム
US20130152205A1 (en) Interactive analysis of a security specification
US20130275939A1 (en) Efficient file system object-based deduplication
WO2021183382A1 (en) Graph-based method for inductive bug localization
JP2017522639A5 (zh)
Cantenot et al. Test generation with Satisfiability Modulo Theories solvers in model‐based testing
Hóu et al. Proof tactics for assertions in separation logic

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant