进程内组件对象的创建方法和系统的制作方法

文档序号:6600034阅读:222来源:国知局
专利名称:进程内组件对象的创建方法和系统的制作方法
技术领域
本发明涉及计算机程序编码和测试领域,更具体地,涉及一种进程内组件的创建方法和系统。
背景技术
随着人们对软件需求的不断增加,软件的功能、可操作性、智能化程度等也迅速发展,从而使软件变得更加复杂、更加庞大,开发的难度也越来越大,开发的周期越来越长,参与开发人数越来越多。为了减少重复劳动,降低被开发软件出错的概率,软件复用技术也就应运而生。在过去的几十年里,软件复用得到了越来越广泛的应用。组件技术是上世纪90年代初出现的一种新技术,它是在结构化设计和面向对象技术的基础上发展起来的,是面向对象技术之后的软件开发的标准方法体系,是面向对象的开发技术的延伸。在组件规范化的过程中,许多公司和组织都做出了许多模型,常见的组件模型有 CORBA (公共对象请求代理体系结构)、C0M(组件对象模型),EJB组件和.Net组件。下面,“组件”以微软公司的COM为例进行说明。COM的使用非常广泛,许多桌面应用都采用了 COM技术,包括自动化技术(OLE自动化),ActiveX控件技术等。根据C0M/DC0M中客户应用程序和组件程序的交互关系,可以将组件分为进程内组件和进程外组件两种。所谓进程内组件是指客户应用程序和组件程序在同一个进程地址空间内;进程外组件指客户应用程序和组件程序分别处在不同的进程空间地址中。进程内组件是通过将组件作为动态链接库(DLL)来实现的,客户应用程序将组件程序加载到自己的进程地址空间后再调用组件程序的函数。对于这两种不同的组件,客户应用程序和组件程序交互的内在方式是完全不同的。但是对于功能相同的进程内和进程外组件,从程序编写的角度看,客户应用程序是以同样的方法来使用组件程序的,客户应用程序不需要做任何的修改。获取和驱动组件有两个重要作用。对于新开发的组件,可以通过获取和驱动组件, 来进行自动测试;对于已经开发出来的组件,在进行应用程序迁移时,通过获取和驱动组件,可以重复利用已经开发出来的组件而不用重新编写。对于进程内组件,如果在另外一个进程中能够获取组件对象的接口,那么驱动组件对象并获取组件对象的数据都非常方便。但是,采用通用方法在另外一个进程中获取进程内组件对象接口较难。现有的可以获取和驱动进程内组件的方法主要包括以下两种1)分析应用程序的内存。在该方法中,在应用程序启动并加载了进程内组件之后, 在应用程序的内存中访问该组件,然后通过分析内存中的数据,来获取组件的数据。该方法针对应用程序中相同组件的不同对象以及不同应用程序的相同组件对象都需要分别进行分析和处理,因此非常复杂;以及2)通过组件句柄得到组件对象。在该方法中,通过应用程序中的组件句柄来访问组件对象,然后通过调用组件对象的函数和方法来获取和驱动组件。这种方法依赖于目标应用程序所使用的开发语言。比如用VB开发的程序和VC开发的程序,获取组件对象的方法都不一样。参考文献[1]给出了一种测试应用程序的方法,其中,将一个测试代理模块嵌入到被测应用程序中,用以完成测试用例中各测试步骤的执行。测试代理按照测试步骤,获取和驱动被测应用程序中的组件,以完成测试。图1是示出了参考文献[1]的测试应用程序的系统的各个单元的示意框图。各个单元描述如下 测试客户端主控樽块101 作为测试客户端应用稈序的主控樽块,负靑加载泖I 试用例到共享数据存储单元300中,并管理测试流程。 测试启动单元102 用于捭索测试代理窗口单元203,向搜索到的测试代理窗口单元203发送测试用例的ID集合以及测试指令。 被测应用稈序主控樽块201 作为被测应用程序的主控模块,用于加载其他模块和/或单元,比如讲稈内组件单元202和测试代理窗口单元203。 讲稈内组件单元202 是被测应用程序的进程内组件,比如.dll或.OCX文件。 进程内组件单元202作为客户端运行在被测应用程序的进程中,是被测应用程序的进程的一部分。 嵌入的测试代理窗口单元203 作为测试代理樽块。嵌入的测试代理窗口单元 203是一个随被测应用程序一起启动的对用户而言隐藏(不可见)的单元。嵌入的测试代理窗口单元203从测试启动单元102接收测试指令,以开始测试,并从共享数据存储单元中读取测试客户端主控模块101加载的测试用例,按照测试用例的测试步骤,在需要时驱动进程内组件单元202,得到测试结果,并将测试结果写入共享数据存储单元中。 共享数据存储单元300 存储测试用例以及测试结果。被测应用程序中嵌入的测试代理窗口单元203和测试客户端的主控模块101均能读写此共享数据存储单元。图2是示出了参考文献[1]的测试应用程序的方法的流程图。在该测试方法开始后,测试客户端主控模块101将测试用例加载到共享数据存储单元300中(步骤S201)。然后,测试客户端主控模块101触发测试启动单元102以搜索测试代理窗口单元203,并将测试用例ID集合以及测试指令发送给搜索到的测试代理窗口单元203(步骤S202)。测试代理窗口单元203接收到测试指令后,开始测试。测试代理窗口单元203根据接收到的测试用例ID集合,从共享数据存储单元300中读取测试用例,并依次处理每一个测试用例(步骤S203)。测试代理窗口单元203按照测试用例的测试步骤, 驱动进程内组件单元202,并获得进程内组件单元的数据(S204)。然后,测试代理窗口单元 203确定测试结果,并将测试结果写入共享数据存储单元300 620 。由此,测试客户端主控模块101可从共享数据存储单元中300中获取测试结果(S206)。图3是示出了根据参考文献[1]的测试应用程序的方法的一个示例的示意图。图3所示的示例以Microsoft Office的spreadsheet ActiveX作为要测试的应用程序的进程内组件为例。在图3中,各个模块之间的连接线上标注的数字表示该示例方法的执行顺序。这种解决方案的缺点在于,测试客户端并不能获取进程内组件对象的接口,对进程内组件的获取和驱动受限制,必须通过共享数据存储进行数据交换,而不能直接在测试客户端驱动进程内组件对象并获取数据。因此,需要一种创建进程内组件的对象的方法,以便能够直接在测试客户端获取所创建的进程内组件对象的接口从而驱动进程内组件的对象并获取其数据。[参考文献]1.中国发明专利申请,申请号=CN 200410079042. 5,发明名称“一种应用程序的
自动测试方法”.

发明内容
鉴于现有技术的上述缺点,本发明提出了一种创建程内组件的对象的方法,其中, 在目标应用程序中嵌入一进程外组件,所述进程外组件具有创建所述进程内组件的对象并记录所创建的进程内组件的对象的接口的功能,在所述目标应用程序发出定位所述进程内组件的请求以创建进程内组件对象时,将请求定向到进程外组件,以创建进程外组件的对象,该进程外组件的对象将创建所述进程内组件的对象并记录所创建的进程内组件的对象的接口。因此,在不同于所述应用程序的应用程序中,可以查询所创建的进程外组件的对象的接口并获取其所记录的进程内组件的对象的接口,进而直接驱动进程内组件的对象。根据本发明的第一方面,提出一种创建进程内组件的对象的方法,包括以下步骤 在一应用程序中嵌入一进程外组件,所述进程外组件具有创建所述进程内组件的对象并记录所创建的进程内组件的对象的接口的功能;启动所述应用程序;在所述应用程序发出定位所述进程内组件的请求以创建进程内组件的对象时,将所述请求定向到所述进程外组件,以创建所述进程外组件的对象;以及所述进程外组件的对象创建所述进程内组件的对象,并记录所创建的进程内组件的对象的接口。优选地,所述方法还包括步骤在接收到所述请求的进程外组件处,分析所述请求,获得所述进程内组件的信息,以确定要创建对象的进程内组件。优选地,将所述请求定向到所述进程外组件的步骤包括拦截所述应用程序发出的定位所述进程内组件的请求;获得所述进程外组件的地址信息;定位所述进程外组件; 以及将所述请求定向到所定位的所述进程外组件。优选地,在不同于所述应用程序的应用程序处,能够通过查询而获取所述进程外组件的对象的接口,并通过所述进程外组件的对象的接口,获取所述进程外组件的对象所记录的进程内组件的对象的接口。优选地,在不同于所述应用程序的应用程序处,通过所获取的所述进程内组件的对象的接口,能够驱动所述进程内组件的对象。优选地,所述应用程序是基于Windows窗口的应用程序。根据本发明的第二方面,提出了一种创建进程内组件的对象的系统,包括进程外组件嵌入单元,用于在一应用程序中嵌入一进程外组件,所述进程外组件具有创建进程内组件的对象并记录所创建的进程内组件的对象的接口的功能;主控单元,用于启动所述应用程序;组件重定向单元,用于在所述应用程序发出定位所述进程内组件的请求以创建进程内组件的对象时,将所述请求定向到所述进程外组件,以创建所述进程外组件的对象;其中,所创建的进程外组件的对象将创建所述进程内组件的对象,并记录所创建的进程内组件的对象的接口。优选地,所述进程外组件包括信息分析单元,用于分析所述请求,获得所述进程内组件的信息,以确定要创建对象的进程内组件。优选地,所述组件重定向单元还包括请求拦截单元,用于拦截所述应用程序发出的定位所述进程内组件的请求;以及定位单元,用于获得所述进程外组件的地址信息,并定位所述进程外组件,以便将所述请求定向到所定位的所述进程外组件。与最相近的现有技术,即参考文献[1]相比,本发明的有益效果至少包括今通过进程外组件,可以获取进程内组件对象的接口,从而可以直接驱动进程内组件对象;令由于通过进程外组件而创建进程内组件的对象,而不需要针对同一个进程内组件的不同对象进行逐个分析和处理,简化了编程的复杂度。


结合附图,根据下面对本发明的非限制性实施例的详细描述,本发明的上述及其他目的、特征和优点将变得更加清楚,附图中图1是示出了参考文献[1]的测试应用程序的系统的各个单元的示意框图;图2是示出了参考文献[1]的测试应用程序的方法的流程图;图3是示出了根据参考文献[1]的测试应用程序的方法的一个示例的示意图;图4是示出了根据本发明实施例的创建进程内组件的对象的系统的示意框图;图5是示出了根据本发明实施例的创建进程内组件的对象的方法的流程图;以及图6是示出了根据本发明实施例的创建进程内组件的对象的方法的一个示例的示意图。附图中,用相同的附图标记表示相关的单元,以示出它们之间的相关性。以加粗的实线表示主要反映了本发明的发明思想的那些单元。
具体实施例方式下面,根据附图描述本发明。在以下描述中,一些具体实施例仅用于描述目的,而不应该理解为对本发明有任何限制,而只是本发明的示例。在可能导致对本发明的理解造成混淆时,将省略常规结构或构造。图4是示出了根据本发明实施例的创建进程内组件的对象的系统的示意框图。各个单元描述如下 测试客户端主控樽块101 作为测试客户端应用稈序的主控樽块,负靑管理泖I 试流程。 进程外组件对象接口杳询单元103 用于查询进程外组件对象接口的单元。 进程内组件对象接口获取单元104 用于通过进程外组件对象接口杳询单元 103所查询到的进程外组件对象的接口,访问进程外组件所提供的服务,以获取进程内组件对象的接口。 进程内组件驱动和数据获取单元105 是业务逻辑处理单元。通过进程内组件对象接口获取单元104所获取的进程内组件对象的接口,可以自由且方便地驱动进程内组件,并获取进程内组件的数据。 被测应用稈序主控樽块201 作为被测应用程序的主控模块,用于启动被测应用程序,以及加载其他模块和/或单元,比如组件重定向单元204和讲稈外组件单元205。 讲稈内组件单元202 是被测应用程序的进程内组件单元,比如.dll或.0CX文件。进程内组件单元202作为客户端运行在被测应用程序的进程中,是被测应用程序的进程的一部分。 组件重定向单元204 用于在被测应用程序发送定位进程内组件单元202的请求以创建进程内组件的对象时,将请求定向到进程外组件单元205。 讲稈外组件单元205 用于提供创建进程内组件对象、并记录下所创建的进程内组件对象的接口的功能。并且,进程外组件单元205对外提供获取所记录的进程内组件对象接口的服务。其它应用程序通过查询进程外组件单元205的接口,可以访问进程外组件单元205,通过其提供的服务,获取所记录的进程内组件对象的接口。 讲稈外组件嵌入单元206 用于在(被测)应用程序中嵌入进程外组件单元。如图4所示,组件重定向单元204可包括请求拦截单元2041和定位单元2042。请求拦截单元2041监控被测应用程序,在被测应用程序发出定位进程内组件单元202以创建进程内组件对象时拦截该请求。定位单元2042用于获得进程外组件单元205的地址信息, 并定位该进程外组件单元205,以便可以将请求定向到所定位的进程外组件单元205。此外,如图4所示,进程外组件单元205可包括信息分析单元2051,用于分析接收到的请求,获得所述进程内组件的信息,以确定要创建对象的进程内组件。图5是示出了根据本发明实施例的创建进程内组件的对象的方法的流程图。如图5所示,在该方法开始后,首先启动被测应用程序(步骤S501)。与此同时, 启动组件重定向单元204(步骤S5(^)。组件重定向单元204用于将定位进程内组件单元 202的请求重定向到进程外组件单元205。在被测应用程序向操作系统查询进程内组件单元202的相关信息以定位进程内组件单元并创建(加载)进程内组件单元202时,该请求被定向到进程外组件单元205(步骤S503)。如图4所示,也可以在组件重定向单元204中设置请求拦截单元2041和定位单元 2042。在被测应用程序向操作系统发送定位进程内组件单元202的请求时,请求拦截单元 2041拦截该请求,定位单元202用于获得与请求的进程内组件单元相关联的进程外组件单元的地址信息,定位该进程外组件单元,以便组件重定向单元将该请求定向到所定位的进程外组件单元。响应于该请求,进程外组件单元205创建进程外组件对象。然后,所创建的进程外组件对象将创建被测应用程序所请求的进程内组件的对象,并在所创建的进程外组件对象中记录所创建的进程内组件对象的接口(步骤S504)。至此,被测应用程序的启动完成(步骤 S505)。测试客户端应用程序要驱动进程内组件对象并获取数据时,测试客户端应用程序的进程外组件对象接口查询单元103查询进程外组件对象的接口。进程内组件对象接口获取单元104通过查询到的接口,访问进程外组件对象,获取进程外组件对象所记录的进程内组件对象的接口(步骤S506)。然后,测试客户端应用程序的进程内组件驱动和数据获取单元105通过进程内组件对象接口获取单元104所获取的进程内组件对象的接口,可以方便地、直接地驱动进程内组件对象,并获取进程内组件对象的数据(步骤S507)。图6是示出了根据本发明实施例的创建进程内组件的对象的方法的一个示例的示意图。与图3所示的示例一样,图6所示的示例以MicrosoftOffice的spreadsheet ActiveX作为要驱动的进程内组件为例。在图6中,各个模块之间的连接线上标注的数字表示该示例方法的执行顺序。在图6所示的示例中,首先启动被测应用程序和组件重定向单元。在被测应用程序向组件重定向单元请求创建进程内组件的对象时(步骤Si),组件重定向单元将该请求重定向到进程外组件(步骤S2)。在另一示例中,修改注册表,将注册表中注册的进程内组件的动态链接库DLL修改为指向进程外组件。被测应用程序要创建进程内组件时,要访问注册表以获得进程内组件的DLL。在该示例中,被测应用程序将被导向进程外组件。因而,在被测应用程序向进程内组件单元请求创建对象时,该请求被定向到进程外组件单元,实现了重定向的功能。在另一个示例中,在被测应用程序中嵌入了请求拦截单元。如图4所示,请求拦截单元也可以被集成在组件重定向单元中。在该示例中,请求拦截单元将监控被测应用程序对操作系统的动作,并在监测到被测应用程序向操作系统发送查询以定位进程内组件的请求时,拦截该请求并由组件重定向单元将该请求定向到进程外组件。在图6所示的示例中,进程外组件是封装有进程内组件spreadsheetActiveX的 COM。因此,将创建COM对象。COM对象将创建进程内组件spreadsheet ActiveX的对象,并返回被测应用程序(步骤S3)。如果被测应用程序还需要创建/加载其它进程内组件,则重复步骤S1-S3。在创建了所有需要的进程内组件(和对应的进程外组件)对象之后,被测应用程序的启动完成。测试客户端使用Windows API "CoCreatelnstance",查询COM对象的接口(步骤 S4)。然后,访问COM对象,以获取spreadsheet ActiveX对象的接口(步骤S5)。通过所获取的spreadsheet ActiveX对象的接口,可以驱动spreadsheet ActiveX对象并获取数据 (步骤S6)。在该示例中,可以通过如下调用方法来驱动spreadsheet ActiveX对象并获取其数据spreadsheet. SetCellDatad, 1,20);spreadsheet. SetCellDatad, 2, 30);spreadsheet. SetCellData(l, 3, "= (A1+B1),,);spreadsheet. ShowAbout ().从图6所示的示例可见,根据本发明实施例的创建进程内组件的对象的方法,通过将创建进程内组件对象的请求重定向到一个进程外组件,该进程外组件提供创建进程内组件对象、并记录所创建的进程内组件对象的功能,测试客户端通过调用进程外组件对象的服务可以获取所创建的进程内组件对象的接口,从而可以在与被测应用程序不同的另一个进程中,容易且方便地驱动进程内组件。因此,可以提高编写自动测试用例的效率。在图6所示的示例中,进程外组件封装有进程内组件,因此对于每个进程内组件, 需要在被测应用程序中嵌入一个对应的进程外组件,用于创建该进程内组件的对象并对外提供所创建的进程内组件对象的接口。因此,不需要针对相同进程内组件的不同对象进行逐个分析和处理,提高了编写测试程序的效率。在图6所示的示例中,以应用程序是基于Windows窗口的应用程序为例进行了说明。当然,本领域技术人员可以认识到,本发明同样适应于其它应用程序。在其它示例中,可以在被测应用程序中嵌入对于所有进程内组件公共的进程外组件。此时,在将请求重定向到公共的进程外组件时,进程外组件分析请求,获得进程内组件的信息,以确定要创建对象的进程内组件。然后,进程外组件可以创建所确定的进程内组件的对象,并记录所创建的进程内组件的对象的接口。在这种情况下,不需要针对每个需要驱动的进程内组件而嵌入一个进程外组件。因此,可以进一步提高编写测试程序的效率。这里所公开的本发明实施例的其他设置包括执行在先概述并随后详述的方法实施例的步骤和操作的软件程序。更具体地,计算机程序产品是如下的一种实施例具有计算机可读介质,计算机可读介质上编码有计算机程序逻辑,当在计算设备上执行时,计算机程序逻辑提供相关的操作,从而提供上述单向代理转密方案。当在计算系统的至少一个处理器上执行时,计算机程序逻辑使得处理器执行本发明实施例所述的操作(方法)。本发明的这种设置典型地提供为设置或编码在例如光介质(例如CD-ROM)、软盘或硬盘等的计算机可读介质上的软件、代码和/或其他数据结构、或者诸如一个或多个ROM或RAM或PROM芯片上的固件或微代码的其他介质、或专用集成电路(ASIC)、或一个或多个模块中的可下载的软件图像、共享数据库等。软件或固件或这种配置可安装在计算设备上,以使得计算设备中的一个或多个处理器执行本发明实施例所述的技术。结合诸如一组数据通信设备或其他实体中的计算设备进行操作的软件过程也可以提供根据本发明的系统。根据本发明的系统也可以分布在多个数据通信设备上的多个软件过程、或者在一组小型专用计算机上运行的所有软件过程、或者单个计算机上运行的所有软件过程之间。应该理解,严格地讲,本发明的实施例可以实现为计算机设备上的软件程序、软件和硬件、或者单独的软件和/或单独的电路。以上描述仅给出了本发明的优选实施例,而并不是要以任何方式限制本发明。因此,本发明的范围应涵盖在本发明精神和原理内进行的任何修改、替换、改进等。
9
权利要求
1.一种创建进程内组件的对象的方法,包括以下步骤在一应用程序中嵌入一进程外组件,所述进程外组件具有创建所述进程内组件的对象并记录所创建的进程内组件的对象的接口的功能; 启动所述应用程序;在所述应用程序发出定位所述进程内组件的请求以创建进程内组件的对象时,将所述请求定向到所述进程外组件,以创建所述进程外组件的对象;以及所述进程外组件的对象创建所述进程内组件的对象,并记录所创建的进程内组件的对象的接口。
2.根据权利要求1所述的方法,还包括步骤在接收到所述请求的进程外组件处,分析所述请求,获得所述进程内组件的信息,以确定要创建对象的进程内组件。
3.根据权利要求1所述的方法,其中,将所述请求定向到所述进程外组件的步骤包括 拦截所述应用程序发出的定位所述进程内组件的请求;获得所述进程外组件的地址信息;定位所述进程外组件;以及将所述请求定向到所定位的所述进程外组件。
4.根据权利要求1所述的方法,其中,在不同于所述应用程序的另一应用程序处,能够通过查询而获取所述进程外组件的对象的接口,并通过所述进程外组件的对象的接口,获取所述进程外组件的对象所记录的进程内组件的对象的接口。
5.根据权利要求4所述的方法,其中,在不同于所述应用程序的所述另一应用程序处,通过所获取的所述进程内组件的对象的接口,能够驱动所述进程内组件的对象。
6.根据权利要求1所述的方法,其中,所述应用程序是基于Windows窗口的应用程序。
7.一种创建进程内组件的对象的系统,包括进程外组件嵌入单元,用于在一应用程序中嵌入一进程外组件,所述进程外组件具有创建进程内组件的对象并记录所创建的进程内组件的对象的接口的功能; 主控单元,用于启动所述应用程序;以及组件重定向单元,用于在所述应用程序发出定位所述进程内组件的请求以创建进程内组件的对象时,将所述请求定向到所述进程外组件,以创建所述进程外组件的对象;其中,所创建的进程外组件的对象将创建所述进程内组件的对象,并记录所创建的进程内组件的对象的接口。
8.根据权利要求7所述的系统,其中,所述进程外组件包括信息分析单元,用于分析所述请求,获得所述进程内组件的信息,以确定要创建对象的进程内组件。
9.根据权利要求7所述的系统,其中,所述组件重定向单元包括请求拦截单元,用于拦截所述应用程序发出的定位所述进程内组件的请求;以及定位单元,用于获得所述进程外组件的地址信息,并定位所述进程外组件,以便将所述请求定向到所定位的所述进程外组件。
全文摘要
本发明提出了一种创建进程内组件的对象的方法,包括以下步骤在一应用程序中嵌入一进程外组件,所述进程外组件具有创建所述进程内组件的对象并记录所创建的进程内组件的对象的接口的功能;启动所述应用程序;在所述应用程序发出定位所述进程内组件的请求以创建进程内组件的对象时,将所述请求定向到所述进程外组件,以创建所述进程外组件的对象;所述进程外组件的对象创建所述进程内组件的对象,并记录所创建的进程内组件的对象的接口。在不同于该应用程序的另一应用程序处,可以获取进程外组件对象的接口并访问进程外组件所提供的服务,以获取进程内组件对象的接口,从而可以直接驱动进程内组件对象。此外,本发明还提出了一种创建进程内组件的对象的系统。
文档编号G06F9/44GK102207856SQ20101013701
公开日2011年10月5日 申请日期2010年3月29日 优先权日2010年3月29日
发明者刘慧峰, 刘晓炜, 史敬威, 孟昕, 宋才良, 王炼 申请人:日电(中国)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1