首页> 中国专利> 使用基于事件的遗留应用进行的集成系统组合建模

使用基于事件的遗留应用进行的集成系统组合建模

摘要

本发明涉及使用基于事件的遗留应用进行的集成系统组合建模。具体地,基于事件的集成应用组合建模(CINEMA)工具提供了一种使用基于事件的遗留应用(诸如,图形用户界面(GUI)应用(GAP))来扩展建模环境的方式。CINEMA允许建模人员通过创建表示GAP的GUI对象的建模元素来扩展建模环境的工具箱。CINEMA生成允许集成系统控制和操纵GAP的GUI对象的源代码,该GUI对象由用来创建集成系统模型的建模元素表示。

著录项

  • 公开/公告号CN101996078A

    专利类型发明专利

  • 公开/公告日2011-03-30

    原文格式PDF

  • 申请/专利权人 埃森哲环球服务有限公司;

    申请/专利号CN201010285867.8

  • 发明设计人 M·格雷查尼克;谢晴;傅忱;

    申请日2010-07-19

  • 分类号G06F9/44;

  • 代理机构北京市金杜律师事务所;

  • 代理人酆迅

  • 地址 爱尔兰都柏林

  • 入库时间 2023-12-18 02:05:01

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-04-29

    授权

    授权

  • 2012-08-22

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20100719

    实质审查的生效

  • 2011-03-30

    公开

    公开

说明书

技术领域

本公开涉及一种用于使用基于事件的遗留应用来扩展建模环境的工具。特别地,本公开涉及这样的工具,其允许建模人员创建用于来自图形用户界面(GUI)应用(GAP)的建模环境工具箱的建模元素,以及生成用以控制和操纵由建模元素表示的GAP的GUI对象的源代码。

背景技术

集成系统由交换信息的组件组成,这样的组件也被称为互操作组件。集成系统的组件可以包含基于事件的不同遗留应用,例如图形用户界面(GUI)应用(GAP)。组织使用遗留的GAP来协助业务运营,以使业务处理自动化,例如,增加信息交换的速度和有效性。

组织发现将GAP重新建造到编程组件中是困难的,这是因为脆弱的遗留架构、不良的文档、巨大的编程努力、以及由此导致的这些项目的巨大成本。因为业务成功使用GAP数十年,管理者不愿意批准更改源代码,因这可能破坏GAP和扰乱已经良好建立的业务服务。为了通过增加GAP与新组件(例如网络服务)的互操作性来改善业务处理,许多组织探索如何在新的集成系统中包含遗留GAP。

组织经常依赖建模人员开发新集成系统的模型。建模人员可以使用统一建模语言(UML)图形表示应用(例如,ArgoUMLTM应用),其提供了用来创建描述新集成系统的模型的一套图形符号技术。然而,建模人员发现,对包含GAP的新集成系统进行建模是困难的,因为许多GAP是封闭的、整体的,并且没有以已知的格式公开任何编程接口或数据。尽管建模人员渴望将GAP作为集成系统中的组件使用,但是建模人员发现,捕获GAP的功能和接口以作为基于UML的模型的元素(例如,类和接口)是困难的。建模人员发现,捕获GUI对象的属性和GUI对象间的依赖关系是困难的,因为GUI模型对于遗留应用经常是不可得的。

当前,建模人员使用手工的、费劲的、易于出错的过程来研究GAP以及将GUI对象转换为UML元素,以作为这些GAP功能的抽象。建模人员发现,在建模环境中使用GAP是困难的,因为许多遗留GAP没有公开任何编程接口。建模人员发现,捕获GUI对象的属性和GUI对象间的依赖关系是困难的,因为GUI模型对于遗留应用经常是不可得的。

理论上,能够从GAP的源代码中提取GUI模型,然而,存在两个根本的限制。第一,GAP的源代码经常可能是不可得的。例如,建模可能外包给外部组织,遗留应用的源代码可能不对该组织共享。这样,外部组织没有能力从源代码中导出精确的GUI模型。第二,即使外部组织具有或拥有对源代码的访问权,依然存在使从源代码导出GUI模型的方法低效的限制。例如,Microsoft WindowsTM应用编程接口(API)调用CreatWindow,其用在大量的GAP中,获得包括字符串变量的若干参数变量,该字符串变量保有GUI对象的类型的值,这个值常常是只有在运行时才可知。

另外,从GAP的源代码导出模型依赖于了解创建和操纵GUI对象的API调用的精确语义(例如,CreatWindow)、为用于创建GUI应用的语言建立适当的解析器和分析器以及开发用于从集成开发环境(IDE)GUI资源库中提取GUI模型的IDE特定工具。元组的数量按照“API调用×编程语言×IDE”的成千上万的笛卡尔积来测量,这增加了识别与不同GUI应用的源代码库一起工作的方法的难度。

UML模型中使用GUI对象的一个根本限制是GUI对象不是可以使用UML标准元素来建模的编程对象。在相应的GAP内使用底层GUI框架创建GUI对象,GUI对象不是任何建模环境的一部分。一些GUI对象要求用户在GUI对象实例化之前执行对GAP的多个动作。在未将这些动作嵌入UML元素中的情况下,建模人员发现创建能够转变成使用这些GUI对象的源代码的UML模型是困难的。

GAP以很多不同的语言编写并运行在很多不同的平台。存在很多从GAP中提取数据的平台和语言特定的技术。然而,在用于不同建模平台和语言的工具中实现这些特定技术导致用于各个工具的多个源代码版本、增加了维护工具的成本、难以维护和演进不同的代码库。

最后,建模人员发现从包含描述GUI对象的元素的UML模型中生成源代码是困难的。表示GUI对象的类应包含访问和操纵这些GUI对象的代码,因为这些GUI对象在GAP进程和底层GUI框架(例如,MS-WindowsTM或JavaTM SWT-标准部件工具包)的上下文中动态地创建。因为模型没有反映GUI对象存在的上下文,建模人员发现维护和利用相应的GAP演进这些模型是困难的。

上述技术没有一个是足够一致的、非侵入性的和有效的。因此,需要解决上述问题和之前经历的其它问题。

发明内容

通过为GAP的GUI对象和GAP的功能定义建模元素,“基于事件的集成应用组合建模”(CINEMA)有效地且非侵入性地扩展了UML建模环境。为了创建模型,CINEMA通过导航GUI对象、选择GUI对象、将GUI对象拖放到建模画布上,允许用户对包含遗留GAP的集成系统进行建模。由于CINEMA广泛的适用性,CINEMA使用不依赖于语言的底层技术,其对于控制和操纵GAP的主要计算平台是通用的。CINEMA从GUI结构分离UML建模环境,并隐藏CINEMA中模型和GAP之间的连接。CINEMA(1)便于用户使用GAP创建集成系统模型,(2)在用户与GAP交互期间捕获结构和状态,以及(3)指定用在模型中并随后部署在产生的集成系统中的GUI对象的类型和名称。

CINEMA可以用于数据集成、GAP复用、协同计算和应用向新平台的移植。使用CINEMA,建模人员花费最少的开发努力来建模集成系统。例如,CINEMA通过在集成系统中简单地复用遗留应用,提供了重写遗留应用的有吸引力的替代方式。CINEMA提供有效和非侵入性的方式,允许工程师使用现有的GAP来创建供CINEMA用来扩展建模环境的组合模型。CINEMA结合了辅助技术的非标准用途以用于访问和控制GAP。CINEMA扩展了UML建模环境,允许建模人员使用GAP特性创建集成环境的模型。通过允许工程师使用现有的GAP创建组合模型,CINEMA逆转了从需求到应用的标准建模方向(例如,GAP到需求)。

CINEMA允许用户(例如,建模人员)将GAP建模为编程对象、将这些GAP的GUI对象建模为这些编程对象的域,并通过调用对编程对象的方法执行对这些编程对象的动作。不幸的是,集成系统和建模环境(IS/ME)不能象纯粹的编程对象那样访问和操纵GUI对象,因为GUI对象只能支持用户级别的交互。辅助技术公开了特殊的接口,其方法能够被调用、其域值能够被设置和获取以控制GUI对象。

为了以一致的方式访问和控制GAP,CINEMA结合了辅助技术的非标准用途。CINEMA使用可视化机制,能够使用户通过对GAP执行点击和拖放操作创建包含GAP的GUI对象的集成系统模型。CINEMA使用可访问性层和钩子将事件监听器注入GAP。为了创建扩展UML建模环境(例如,EclipseTM软件-在Eclipse Public License(EPL)1.0开源许可下发布)的建模元素,事件监听器响应CINEMA记录的事件。

辅助技术对于残障计算机用户提供不同的帮助。由辅助技术提供的一些帮助包括用于视觉受损用户的屏幕阅读器、用于丧失听力的用户的视觉指示器或字幕、以及对行动不便用户进行弥补的软件。大多数计算平台包含辅助技术,因为要求电子信息技术产品和服务满足电子信息辅助标准。例如,MircosoftTM Active Accessibility(MSAATM)技术设计用来改善辅助帮助与运行在MS-WindowsTM上的应用一起工作的方式,Sun MicrosystemTM Accessibility技术帮助在Java虚拟机(JVMTM)上运行软件的残疾人士。为了公开关于用户接口元素的信息,辅助技术被并入计算平台、库和应用中。辅助技术提供了许多复杂的服务,要求这些服务取得GUI对象属性、设置和获取用于GUI对象的值、以及产生和拦截不同的事件。例如,尽管可以使用用于WindowsTM的MSAATM,但是使用一个不同的辅助技术也会产生相似的结果。尽管不存在用于辅助应用编程接口(API)调用的标准,但是不同的技术提供相似的API调用,这意味着达成用于辅助技术的通用编程标准将是缓慢的。辅助技术利用了GUI对象公开了一个公知的接口,该接口输出用于访问和操纵这些对象的属性和行为的方法。例如,实现IAccessibleTM接口的MS-WindowsTM的GUI对象允许使用MSAATM的API调用访问和操纵该GUI对象。辅助技术允许程序员编写代码以如同标准编程对象一样访问和控制GUI对象。使用辅助技术,程序员还能够为GUI对象产生的不同事件注册回调函数,从而及时获得关于GUI对象状态的信息。例如,如果一个GUI对象接收了一个不正确的输入并且GAP显示一个错误消息对话框通知用户这个错误,则先前注册的回调函数能够拦截通知产生错误消息对话框的事件、让该事件离开、并发送一个“非法输入”消息给控制GAP的工具和/或编程指令。

钩子是用户定义的库,包含回调函数(或简称回调),其按照辅助技术指示的一定规则编写。当一个目标GAP启动时,可访问性层在该GAP的进程空间中加载预定义的钩子库,并注册响应特定事件而被调用的回调函数的地址。因为钩子在GAP的进程空间里“生存”,钩子的回调函数能够影响执行这些GAP的每个方面。钩子允许用户扩展GAP的功能,特别是不用改变GAP源代码的情况下将钩子和GAP集成在一起。编写钩子不需要任何关于GAP源代码的知识。钩子库可以是所有GAP通用的。钩子被注入GAP、监听该GAP生成的事件、执行从集成系统接收的指令。作为一个例子指令,钩子可以禁用按钮直到一定的事件发生。钩子库允许程序员改变现有GAP的功能,而无需修改GAP的源代码。通用钩子的功能包括接收对GUI对象执行动作的命令、报告发生在GAP内的事件、响应一定的命令和事件调用预定义的函数。

上面提到的一些概念可以在以下的美国专利申请中更加详细说明,包括:序列号11/710,681,公开号2008/0209356,标题是“Graphical Unit Interface Based Application to Web Services Conversion System”,Mark Grechanik等人,申请日是2007年2月23日;序列号11/710,233,公开号2008/0209348,标题是“Composing Integrated Systems Using GUI-Based Applications and Web Services”,Mark Grechanik等人,申请日是2007年2月23日;序列号11/710,680,公开号2008/0209446,标题是“Design Tool for Converting Legacy Applications to Web Services”,Mark Grechanik等人,申请日是2007年2月23日;序列号11/888,970,公开号2009/0037896,标题是“Legacy Application Decommissioning Framework”,Mark Grechanik等人,申请日是2007年8月2日;序列号11/824,373,公开号2009/0007066,标题是“Refactoring Monolithic Applications into Dynamically Reconfigurable Applications”,Mark Grechanik等人,申请日是2007年6月29日,这些美国专利申请的每一篇的全部公开内容通过引用结合于此。

CINEMA允许建模人员创建集成系统的模型,其高度自动化地利用遗留GAP。使用CINEMA创建的模型可以表示这样的集成系统,该集成系统能够在大型分布式企业环境中提供功能,其协调位于不同计算机和运行在不同平台(例如,操作系统和系统配置)的不同GAP。CINEMA提供非侵入性的方式来创建模型和生成控制GAP的源代码。CINEMA允许建模人员仅需具有为完成业务任务如何与GAP交互的基础知识,就能使用GUI对象创建模型。CINEMA允许建模人员使用GUI对象创建模型而无需为模型编写代码、关于组件源代码的知识、解析任何源代码、也无需编写复杂的代码改变程序可执行文件。

通过研读附图和详细说明,对于本领域技术人员来说,其它系统、方法、特征和优点将会是、或将会变得显然。所有这样的系统、方法、特征和优点包含在说明书中、在要求保护的主题范围内、并由下面的权利要求所保护。

附图说明

参照下面的附图和说明,系统可以被更好理解。附图中的元素并不是必须按比例的,而是重点放在解释系统的原理。附图中,相同的引用数字在所有的不同视图中指示对应的部分。

图1说明CINEMA系统配置的一个例子。

图2说明CINEMA用户界面(CINEMA UI)。

图3说明CINEMA使用GAP的GUI对象来创建新建模元素可以采用的逻辑流程。

图4显示GUI对象的生命周期的状态图。

图5说明CINEMA根据模型生成用于GAP的GUI对象的处理器可执行模型指令可以采用的逻辑流程。

图6说明可以对GAP的GUI对象安全执行的操作,如同对编程对象执行一样。

图7显示用CINEMA创建网络服务所付出努力的测量例子。

图8显示GUI对象属性集的例子。

具体实施方式

图1说明了被称为“基于事件的集成应用组合建模”(CINEMA)102(例如,建模工具)的系统和工具的系统配置100,该系统和工具允许用户建模和创建对GAP和其它编程组件(例如,网络服务)进行组合的集成系统。CINEMA系统配置100包含CINEMA系统102,其包含耦合到处理器106的存储器104,通过通信接口108与CINEMA系统配置100的组件通信。CINEMA系统配置100进一步包含用户接口110、GAP 112、用户114(例如,建模人员)、集成系统(例如,116和118)以及组合集成系统172(例如,组合GAP112和集成系统如116和118)。

存储器104存储基于事件的组合建模(CINEMA)指令120,其由处理器106执行时,使处理器通过用户接口110接收外部GUI应用(GAP)112的GUI对象124的图形用户界面(GUI)对象定义122。用户114从外部GAP 112选择GUI对象124。GUI对象定义112包含GUI对象属性集126。

在一个实现中,CINEMA 102可以调用外部GAP 112。外部GAP112与CINEMA 102分离。换句话说,外部GAP 112可以在没有CINEMA 102运行和/或没有CINEMA 102调用外部GAP 112的情况下运行。在一个实现中,外部GAP 112运行在一个单独的进程空间中,并且不和CINEMA 102共享变量。在另一个实现中,当CINEMA102调用外部GAP 112时,外部GAP 112运行在CINEMA 102的进程空间中。在又一个实现中,用户114可以配置CINEMA 102与外部GAP 112一起操作,以运行在包含低度隔离、中度隔离和高度隔离模式的三个隔离模式之一。在低度隔离模式下,当CINEMA 102调用外部GAP 112时,外部GAP 112运行在与CINEMA 102相同的进程空间中。在中度隔离模式下,多个GAP 112运行在一个进程空间中,而CINEMA 102运行在单独的进程空间中。在高度隔离模式下,多个GAP 112中的每一个运行在单独的进程空间中,而CINEMA102运行在另一单独的进程空间中。用户114可以基于可用于用户114想要用于建模的特定GAP 112和/或CINEMA系统配置100的系统计算资源,选择隔离模式。

CINEMA 102包含建模元素面板128,其包含现有的建模元素130和建模画布132。CINEMA 102允许用户114通过为GUI对象124生成建模元素类136来获得新的建模元素134,从而在建模元素面板128中根据GUI对象定义122创建新的建模元素134。通过定义由GUI对象124执行的动作138、建模元素类型140、数据类型142和由GUI对象124的方法146执行的函数144,CINEMA 102生成建模元素类136。在一个实现中,用户114为用于新的建模元素134的建模元素类136定义动作138、元素类型140、数据类型142和函数144。在一个实现中,通过将GUI对象定义转码以获得GUI建模元素的建模元素表示,CINEMA 102生成新的建模元素134。

CINEMA 102生成模拟与GAP 112交互的人工驱动过程的代码,这被称为转码。CINEMA 102将GUI对象属性集126转码为经转码的GUI对象指令148(例如,编程指令),产生的集成系统和/或组合集成系统(例如,116、118与172)可以执行该指令以控制和操纵GAP 112的GUI对象124。在一个实现中,基于事件的组合建模指令120使处理器将GUI对象属性集126转码以获得经转码的GUI对象指令148,该指令被配置为定位、操纵和控制GUI对象124。CINEMA 102还可以生成异常处理代码,其处理在控制GAP 112时可以被抛出的异常(例如,显示消息框以通知用户不正确格式的输入)。基于事件的组合建模指令120可以进一步使处理器绑定150经转码的GUI对象指令148,以获得处理器106可执行模型指令152,该指令使处理器106根据使用新的建模元素134创建的模型154来操纵GUI对象124。

简要参考图8,GUI对象属性集126包括:决定如何访问GUI对象124的GUI对象访问方法802,以及捕获如何导航到GAP 112中的GUI对象124的GUI对象导航信息804。GUI对象属性集126进一步包括:GUI对象标识符信息806;几何信息808;访问权限810;读写约束812;输入参数814;瞬态值816;和返回参数818。在一个实现中,CINEMA 102将GUI对象属性集126转码,以创建新的建模元素134并生成用于集成系统和/或组合集成系统(例如,116、118与172)的编程指令(例如,经转码的GUI对象指令148),用来控制和操纵GAP 112和其它组件(例如,网络服务和其它GAP),在下面详细讨论。

回到图1,GUI对象属性集126使用启用辅助的接口156(例如,辅助API调用)为CINEMA 102提供关于GAP 112和GUI对象124的结构信息,CINEMA 102在用户114与GAP 112、GUI对象124和GAP 112的GUI屏幕158序列交互(例如,用户交互)时记录这些信息。在一个实现中,CINEMA 102使用辅助API调用156和GAP112中的钩子160(例如,事件监听器)接收GUI对象属性集126。钩子160响应CINEMA 102作为GUI对象属性集126捕获的事件。下面进一步详细讨论,CINEMA可以使用GUI对象属性集126、根据模型154产生所选编程语言(例如,语言选择162)的源代码(例如,模型指令152),并编译和执行该源代码(例如,模型指令152)。CINEMA 102可以生成异常处理代码164,其处理在使用模型指令152控制GAP 112时可能抛出的异常(例如,显示消息框以通知用户不正确格式的输入)。

表1显示了在一个实现中,CINEMA 102如何创建用于GUI对象124的GUI对象类(例如,新的建模元素134)。

图2说明了CINEMA用户接口(CINEMA UI)200。CINEMA UI200包括工具栏202、建模面板204、元素属性206区域和建模画布208。CINEMA指令120使处理器106在图形用户接口(例如,CINEMA UI 200)中将模型154显示在建模画布208中。在一个实现中,CINEMA 102使用GUI对象属性集126在建模面板204中显示GAP 112的结构表示(例如,GAP1层次210和GAP2层次211)。GAP层次210包括GUI屏幕158的图形表示(例如,212和214)以及每个GUI屏幕158内的GUI对象124(例如,新的建模元素216和218)。当用户选择CINEMA类资源管理器220时,CINEMA 102可以显示建模面板204。CINEMA 102使用GUI对象属性集126来生成用于GUI对象124的GUI对象类136(例如,222和224)。

表2显示:在一个实现中,CINEMA 102如何为用于GUI对象124的新的建模元素134捕获操作(例如,函数和/或方法)的一个例子。CINEMA 102标识GAP 112(例如,状态机)和GUI对象124,用户114从中为新的建模元素134(例如,下面的表2和表3中被称作className)捕获操作。为了为新的建模元素134捕获操作(例如,函数和/或方法),用户114对GUI对象124执行动作。用户114将GUI对象124拖放到建模画布132上,CINEMA在建模面板128中创建新的建模元素134。

图3说明CINEMA 102根据GAP 112的GUI对象可以用来创建新的建模元素134(例如,216和218)的逻辑流程。当用户114启动CINEMA 102时,用户114和/或CINEMA 102还可以启动GAP112,其包含感兴趣的GUI对象124,用户114从中创建新的建模元素134(例如,216和218)(302)。当用户114从CINEMA 102启动GAP 112时,CINEMA 102启动监听器(例如,代理166)和分派器(168),与注入到GAP 112中的钩子160进行通信,以便捕获信息和控制GUI对象124。用户114导航GAP 112的GUI屏幕158,以便定位GUI对象124(304)。在一个实现中,用户114将光标移动到GAP 112的GUI对象124(306)。用户114对GUI对象124执行动作,以便CINEMA可以捕获针对GUI对象124发生的操作和转移状态(308)(310)。CINEMA 102使用辅助API调用156获得关于GUI对象124的信息(例如,GUI对象属性集126)。CINEMA102接收和/或捕获描述GAP 112状态的动作(例如,操作和转移状态)。CINEMA 102生成GUI对象类(例如,136、222和234)。GUI对象类(例如,136、222和234)包括方法(例如,146和226),该方法通过设置和取得GUI对象124的值来控制GAP 112和GUI对象124,并引起允许GAP 112切换到不同状态的动作。为了确认对GUI对象124的选择,用户114可以在GUI对象124周围绘制框,其具有显示关于选择的GUI对象124的信息(例如,GUI对象属性集126)的工具提示窗。然后,用户114将GUI对象124(例如,GUI对象124的可视图像表示)拖到建模画布208上(312)。当用户114将GUI对象124拖放到建模画布时,CINEMA 102创建新的建模元素134(例如,216和218)。新的建模元素134(例如,216和218)包含属性,其保有关于定位和控制相应的GAP 112中的GUI对象124的信息(314)。CINEMA 102将新的建模元素134(例如,216和218)向建模面板128(例如,204)添加,以便新的建模元素可以用来创建模型154。

图4说明了GUI对象124的生命周期的状态图400。CINEMA 102接收和/或捕获描述GAP 112状态的动作(例如,操作和转移状态)。图4将GUI对象124的GUI对象状态(例如,402、404、406和408)显示为椭圆,将GUI对象状态之间的转移(例如,410、412、414、416和418)显示为箭头。在GUI框架内,GAP 112将GUI对象124在内部表示为数据结构,其记录指定GUI对象124的属性值。在GUI对象状态“创建”402下,GAP为GUI对象分配记录并将GUI对象124的域初始化一些值。在“创建”402GUI对象状态中,用户不可以访问GUI对象124。GUI对象124的状态从GUI对象状态“创建”402转移(例如,410)到GUI对象状态“去激活”404。

在GUI对象状态“激活”406下,GUI对象对于用户交互可以是可见和可用的。在GUI对象124的生命期期间,GUI对象124可以在GUI对象状态“去激活”404和“激活”406之间进行无限次转移(例如,412和414)。例如,在GAP 112中的多个屏幕(例如,158)之间的来往将隐藏(去激活)包含GUI对象124的一个屏幕而激活另一个屏幕。在GUI对象状态“去激活”404和“激活”406之间的切换不会改变GUI对象124保有的值。即便如此,在GUI对象状态“去激活”404中,用户114也不可以对GUI对象124进行操作。GUI对象状态可以转移(例如,416和418)至“销毁”408,例如当GAP停止时。CINEMA102接收和/或捕获描述GAP 112状态的动作(例如,操作和转移状态)以便决定如何在模型154中使用新的建模元素134。

简要参考图2,通过在CINEMA UI 200中选择相应的屏幕232标签,用户114可以为模型154建模特定屏幕230。CINEMA UI 200显示对应于用户114想要为模型154设计的屏幕的建模画布208。用户114可以指定每个GUI对象124在模型154中执行的函数144。例如,用户114可以指定哪些GUI对象(例如,222和224)接收值和/或作为输入、以及哪些GUI对象产生输出结果(例如,234和236)。使用CINEMA 102,通过将建模元素(例如,216和218)拖放到建模画布208上,用户114使用建模元素(例如,216和218)创建模型154。图2将新的建模元素(例如,216和218)的图形表示显示为对象类(例如,234和222,分别地)。用户114使用连接符(例如,238、240、242)连接建模元素(例如,对象类234和222),该连接符指定建模元素(例如,对象类)间的依赖关系。当用户114完成模型154时,用户114可以生成模型指令152,其使处理器106根据使用新的建模元素134创建的模型154来操纵GUI对象124。

图5说明CINEMA 102可以用来根据模型154生成用于GUI对象124的处理器可执行模型指令152的逻辑流程。CINEMA 102使用辅助API调用156来获得关于GUI对象124的信息(例如,GUI对象属性集126)(502)。CINEMA 102根据GUI对象属性集126为GUI对象124创建新的建模元素134(504)。通过将新的建模元素134放到建模画布208上,用户114使用新的建模元素134定义模型154(506)。通过CINEMA UI 200,用户114为用于新的建模元素134的建模元素类136定义动作138、元素类型140、数据类型142和函数144(508)。结果,模型154包含多个建模元素(例如,新的建模元素134和现有的建模元素130),用户114通过在建模画布208中的建模元素之间放置建模连接符(例如,238和240),和/或在个体建模元素250上放置建模连接符(例如,242),来定义建模元素(例如,234和222)之间的依赖关系(例如,如建模画布208上显示的连接符238和240所示)(510)。

CINEMA 102生成模拟与GAP 112交互的人工驱动过程的代码,这被称为转码。在一个实现中,基于事件的组合建模指令120使用GUI对象属性集126、建模元素类136和建模依赖关系170,将新的建模元素134转码为编程指令(例如,经转码的GUI对象指令148)(512)。集成系统和/或组合集成系统(例如,116、118与172)可以执行经转码的GUI对象指令,以定位、控制和操纵GAP 112的GUI对象124。

CINEMA 102使用钩子160、监听器(例如,代理166)和分派器168来记录GAP 112的状态。GAP 112可以用树形结构来表示,该结构包括GUI屏幕158和每个GUI屏幕158内的GUI对象124,连同每个GUI屏幕158和GUI对象124的属性,以及GUI对象124函数(例如,方法)。为了捕获GUI对象属性集126,CINEMA 102使用辅助技术后序遍历GAP 112的GUI树。对于GAP 112的GUI树的每个节点,CINEMA 102发出用于GUI对象124的GUI对象类(例如,222和224)的代码。用户114可以从GAP 112的GUI对象124中获取数据和向其中输入数据。用户可以通过发出一些动作(例如,选择菜单项或点击按钮)发起转移(例如,GUI对象状态改变)。GAP 112可以基于用户114的动作执行一些计算,并呈现不同的GUI屏幕158。用户114可以继续这个循环,直到用户114已经允许CINEMA 102捕获所有想要的GAP 112的动作。

表3显示了为GUI对象124声明经转码的GUI对象类(例如,222和224)。CINEMA 102将生成的GUI对象类(例如,136、222和224)与GUI对象124连接。经转码的GUI对象指令148可以包括GUI对象类声明,如表3所示。GUI对象类声明包括用于以下的方法:定位GAP 112中给定GUI对象124,设置和得到用于GUI对象124的值,以及对GUI对象124执行动作。GUI对象124包括语义上有意义的数据类型,用户114使用该类型将GUI对象124建模为新的建模元素134(例如,216和218)。CINEMA 102允许用户114键入GUI对象124并将名称与GUI对象124绑定。使用CINEMA,用户114捕获GUI对象124的属性并给GUI对象124分配名称和类型。例如,用户114可以给不同的GUI对象124分配不同的名称但是相同的类型,这些GUI对象124保有相同语义概念的值(例如,地址或信用卡号),即使GUI对象124可以由不同的GAP 112所拥有。

当GAP 112启动时,操作系统给每个窗口(例如,特殊的GUI对象124)分配正整数,用于标识序号,当通过GUI屏幕158导航时,GUI对象124以此序号获得关注。GUI序号由私有变量ElementId表示,其被初始化为一个负数(表3第2行所示)。私有方法Locate将GAP 112的进程标识符作为参数,并为用于GAP 112的给定GUI对象124获取ElementId(表3第3行所示)。当CINEMA 102为Locate方法发出代码时,CINEMA 102使用辅助API函数在GUI树中获得关于GUI对象124的信息(例如,GUI对象属性集126),其位于到给定GUI对象124的路径上。当CINEMA 102在构造函数中执行方法Locate(表3第4-5行所示)时,方法Locate使用位置信息(例如,GUI对象属性集126)来导航GUI对象124,和获得GUI对象的标识符,CINEMA 102在方法setValue、getValue和DoIt(表3第6,7,8行所示)中使用该标识符来访问GUI对象124。

方法setValue、getValue(表3第6,7行所示)设置和获取GUI对象124的值。数据类型默认为字符串型,除非用户将其类型指定为整型或浮点型。用于setValue、getValue方法的代码通过ElementId、使用辅助API函数来定位GUI屏幕158中的GUI对象124,并设置或获取GUI对象124的值。方法DoIt(表3第8行所示)获得变元,其指定涉及对GUI对象124的动作,方法DoIt的变元为空时,执行由辅助API函数提供的缺省动作。CINEMA 102生成异常处理代码164,其处理在使用这些方法控制GAP 112时可以抛出的异常(例如,显示消息框以通知用户不正确格式的输入)。

在一个实现中,当用户114完成模型154的设计时,通过在CINEMA UI 200上选择生成模型源248选项,用户114生成模型指令152。CINEMA 102可以提示用户114选择要使用的源代码语言,以便根据模型154生成所选语言的源代码(514),并编译和执行源代码152。

CINEMA绑定经转码的GUI对象指令148以获得处理器可执行模型指令152,集成系统(例如,116和118)和/或组合集成系统172可以执行该指令以定位、控制和操纵GUI对象124(516)。使用操作符“new”将GUI对象类(例如,经转码的GUI对象指令148)绑定到GUI对象124的实例,对现代面向对象(OO)语言如JavaTM来说是很容易的过程。然而,当操作牵扯到GAP创建的GUI对象时,“new”操作的语义是复杂的。从建模人员(例如,用户114)的视角,GUI对象看起来是异步地,并且GAP 112作为内部计算的结果而改变GUI对象124的状态。尽管用户114可能不能指定如何使用集成系统来管理GUI对象124的生命周期,但用户114可以使用CINEMA102将GUI对象124部署成集成系统和/或组合集成系统(例如,172、116和118)的源代码中的编程对象(例如,经转码的GUI对象指令148)。

CINEMA 102定义模型154中的编程对象(例如,经转码的GUI对象指令148)和GUI对象124之间的绑定。回想,相应的GAP 112的上下文内存在GUI对象124,模型154中的编程对象(例如,建模元素GUI对象类136、222和234)表示相应的GUI对象124。CINEMA 102充当模型154和GAP 112之间的连接器,其使编程对象能够绑定到相应的GUI对象124。使用CINEMA 102,编程对象的生命周期可以紧紧地和编程对象所表示的GUI对象124的生命周期联系在一起。然而,一些操作在编程对象上执行时没有意义,例如,使用操作符“new”创建对象。这样,编程对象(例如,经转码的GUI对象指令148)和GUI对象124之间的绑定决定可以对编程对象执行什么操作,使得编程对象不会抛出运行时异常。

图6说明可以在GAP 112的GUI对象124上安全执行的操作600,如同对编程对象执行一样。当CINEMA 102将GAP 112的GUI对象124转变为建模元素(例如,134、216和218)时,利用建模元素(例如,134、216和218)组成的模型154紧紧地连接到拥有GUI对象124的GAP 112。为了实例化模型154以便根据模型154生成源代码(例如,模型指令152),CINEMA 102将GUI对象类(例如,136、222和234)和接口向相应的GUI对象124连接。CINEMA 102将可以在编程对象上安全执行的操作(例如,读、写、调用)看做是相应的GUI对象124的类型实例化时间和绑定602的函数。

“GUI对象实例化时间”604指示在执行GAP 112的什么时刻,GAP 112对GAP 112所主控的GUI对象124进行实例化。“GUI对象实例化时间”604标识三个时间帧,包括:过去606、当前608和将来610。可以在过去606实例化GUI对象124,这表明GUI对象124先前对用户是可用的,以对GUI对象124执行动作,直到执行GAP 112期间的某点。当前可用(例如,当前608)的GUI对象124允许用户执行不同的动作,一些GUI对象124可以在将来610的某点被实例化。用户114可能发现,预测将来实例化的GUI对象124所保有的值是困难的。CINEMA 102允许用户114使用编程对象对等体来设置GUI对象124的值,以便当GAP 112实例化GUI对象124时,GUI对象124的值可以被设置。

可以使用三种绑定类型,包括主动612、被动614和静态618。GUI对象124和编程对象之间的主动612绑定表明GUI对象124在GUI屏幕158上是激活的(例如,406)。相反,被动614绑定表明GUI对象124处于去激活状态(例如,404)。静态618绑定表明GUI对象124可以被看作是静态变量,比如在JavaTM中。当变量的范围可重新输入时,静态变量是激活的。在一些情况下,GUI对象124存在于屏幕上,这个屏幕被另一个屏幕遮挡(例如,网络浏览器中的图层),即使GUI对象124不能被用户114访问,仍可以对GUI对象124执行操作。在这样的情况下,用于GUI对象124的绑定可以视为静态而不是被动。

对于实例化时间和绑定指示的三种组合的操作是禁止的,包括:过去和主动620;当前和被动622;以及将来和主动624。符号“X”(例如,620、622和624)表明对于实例化时间和绑定指示的特定组合禁止的操作。当GUI对象124在过去606被实例化时,其不能具有主动612绑定。类似地,在将来610的某个时间点被实例化的GUI对象124不能具有主动612绑定。当前可用(例如,608)的GUI对象124不能看作是被动614的。

可以对GUI对象124执行三种操作类型,包括从GUI对象124读取值、向其写入值和在其上调用方法(例如,动作、操作和/或函数)。对于在过去606实例化的带有被动614绑定的GUI对象124,只能执行读取GUI对象124值的操作。当GUI对象124被去激活时,GUI对象124的值被获取并存储,以便GUI对象124的值可以在以后的时间被获取。对于在将来610实例化的带有被动614绑定的GUI对象124,只能执行将值写入GUI对象的操作。换句话说,即使GUI对象124还没有被GAP 112实例化,也可以设置GUI对象124的值。为GUI对象124设置的值可以被存储,以便可以在GUI对象124被创建并激活时设置GUI对象124的值。

表4显示:在一个实现中,CINEMA 102如何根据模型154生成网络服务。

表5显示:在一个实现中,CINEMA 102如何根据GUI对象类生成JavaTM代码。

表6显示:在一个实现中,CINEMA 102如何为GAP 112生成XML。

图7显示用CINEMA 102创建网络服务所花费努力的测量700,与使用GAP 112的源代码创建相同的服务所花费的编程努力进行对比。考虑两个商业GAP:费用核算(EA)GAP,和发票与预算(InE)GAP。EA GAP和InE GAP是运行在MS-WindowsTM上封闭的、整体的GAP 112。InE允许用户创建和打印发票、预算、报表和跟踪客户付款和未支付的发票。CINEMA 102允许用户为GAP 112创建模型和网络服务而无需编写任何额外的代码、修改应用、或访问它们私有的数据存储。因为EA和InE是封闭的、整体的商业应用,其既不公开任何编程接口、也不以公知的格式发布它们的数据,可以用CINEMA 102通过使用关于用户如何与GAP 112交互从而完成任务的基础信息,根据GAP 112创建网络服务。

参考CINEMA 102的一个实现例子,测量700包含在一台带有Intel PentiumTM IV 3.2GHz CPU和2GB RAM的计算机上的Windows XP ProTM。“GAP名称状态号”702栏列出了GAP(例如,704)的名称和逗号分隔的GAP状态标识符706,该标识符是GUI屏幕158的序号。可见、不可见和使用栏(例如,708、710和712),显示在“GUI元素数模”下面,表明可见和不可见GUI元素(例如,GUI对象124)的数目以及包含层次中GUI元素父节点的GUI元素的数目,这些数目用作网络服务中的参数和/或动作目标。状态XML字节栏716说明CINEMA 102生成的XML的大小以描述GAP 112的给定状态。时间秒栏718说明用来生成和解析状态XML的时间量。

将使用CINEMA 102创建网络服务需要的努力与通过使用GAP112的源代码创建相同服务的编程努力进行对比。建立一个带有核算功能的应用。使用大约9小时创建和测试核算GAP。然后,使用MicrosoftTM Visual Studio 2005创建网络服务,其具有对用于建立网络服务的自动化任务的本领域技术状态的支持。大约1小时内,用户从核算GAP中提取代码、将代码向网络服务项目移到并使用Studio编译调试代码。相对上面的场景,使用CINEMA 102,用户使用不到10分钟产生网络服务。

代替CINEMA 102的选择包括UniFrameTM框架,它是一个用于通过组装之前开发的异种分布式软件组件来建立集成系统的框架。粘合/包装代码实现分布式异种软件组件间的互操作,能从描述性模型中生成这些代码。然而,UniFrameTM框架需要用户为模型编写代码并拥有组件源代码的知识。

在另一个方法,即网络浏览器外壳方法中,建模人员可以使用网络浏览器外壳使HTML接口自动化,该外壳将命令解释器集成到浏览器的位置方块中。浏览器外壳用HTML/CGI图形接口包装遗留的CLP。网络浏览器外壳方法严重依赖于解析HTML和从命令行输入/输出提取数据。

当将可执行程序集成到组合系统中时,代码补丁和二进制重写技术修改可执行程序的二进制代码以便控制和操纵它们。然而,代码补丁和二进制重写技术是依赖于平台的,并需要程序员编写复杂的代码来改变程序的可执行文件。程序员发现使用代码补丁和二进制重写技术是困难的并易于出错,而且经常使程序变得不稳定和崩溃。

使用各种其它不可行的技术从GAP和GUI元素提取信息可以被称为屏幕抓取。宏记录器通过记录用户鼠标的移动和击键使用该技术,然后通过在系统队列中嵌入模拟的鼠标和键盘事件回放它们。

上述的逻辑、电路和处理可以被编码或存储在机器可读或计算机可读介质中,如压缩只读存储器(CDROM)、磁盘或光盘、闪存、随机存储器(RAM)或只读存储器(ROM)、可擦可编程只读存储器(EPROM)或其它的机器可读介质,比如象由处理器、控制器或其它处理设备执行的指令。介质可以实现为任何设备,设备包含、存储、通信、传播或运输由指令可执行系统、装置或设备使用或与其结合的可执行指令。备选地或附加地,逻辑可以用硬件实现为模拟或数字逻辑,比如一个或多个集成电路、或一个或多个处理器执行指令;或者是实现为应用编程接口(API)或动态链接库(DLL)中的软件、共享内存中可用的函数或定义为本地或远程过程调用的函数;或者作为硬件和软件的结合。

在其它的实现中,逻辑可以表示为信号或传播信号的介质。例如,实现任何给定程序的逻辑的指令可以表示为电、磁、光、电磁、红外或其它类型信号的形式。上述系统可以在通信接口接收这样的信号,该接口比如光纤接口、天线或其它模拟或数字信号接口;从信号中恢复指令;将其存储在机器可读存储器中;和/或用处理器执行指令之。

系统可以包括附加的或不同的逻辑,可以通过很多不同的方式实现。处理器可以实现为控制器、微处理器、微控制器、专用集成电路(ASIC)、离散逻辑或其它类型电路或逻辑的组合。类似地,存储器可以是DRAM、SRAM、闪存或其它类型的存储器。参数(例如,条件或阈值)和其它数据结构可以分别存储和管理、可以并入单一存储器或数据库、或可以通过多种不同的方式逻辑地或物理地组织。程序和指令可以是单一程序的一部分、分开的程序或跨越几个存储器和处理器分布。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号