多层测试套件生成的制作方法

文档序号:17439333发布日期:2019-04-17 04:32阅读:238来源:国知局
多层测试套件生成的制作方法

本申请要求于2016年08月24日提交的题为multi-layertestsuitegeneration的美国专利申请no.15/245,258的优先权,其内容通过引用结合于此。

以下公开涉及用于计算设备的测试操作平台。



背景技术:

诸如开放源操作平台之类的一些用于计算设备的操作平台在供应商的设备上实施时能够由供应商进行扩展。扩展可以包括修改操作平台的源代码或者扩展操作平台的一个或多个类以提供特定于供应商的功能。供应商扩展会导致跨操作平台的各种实施方式的不一致性,这会是想要为用户提供一致的用户体验的操作平台提供方所不期望看到的。跨各种实施方式的不一致性还会带来针对想要开发针对于该操作平台的应用的应用提供方而不是具体的供应商实施方式的问题。

操作平台提供方能够通过兼容性测试套件来解决不一致性。兼容性测试套件是应用于供应商设备的所提出发布版本的测试集合,所述供应商设备被配置为执行操作平台的特定于供应商的实施方式。根据供应商和操作平台提供方之间的协议,在供应商发布供应商设备的版本以便作为运行操作平台或者与之相兼容的设备来销售和/或营销供应商设备的该版本之前,供应商可以被要求保证所提出的供应商设备的发布版本通过了兼容性测试套件。



技术实现要素:

在一个方面,一种用于针对操作平台开发测试套件的方法包括执行多个迭代。该多个迭代中的每一个与多个软件错误中所选择的一个相对应。每个迭代可以包括针对该操作平台的修改版本执行,所述第一测试套件包括第一多个测试案例。操作平台的修改版本能够通过改变该操作平台的基线版本以包括该多个软件错误中所选择的一个软件错误而被创建。每个迭代还可以包括在针对该操作平台的修改版本执行该第一测试套件导致该第一多个测试案例中的至少一个失败的情况下递增第一计数器。每个迭代还可以包括针对该操作平台的修改版本执行第二测试套件,所述第二测试套件包括第二多个测试案例,并且在针对该操作平台的修改版本执行该第二测试套件导致该第二多个测试案例中的至少一个失败的情况下递增第二计数器。每个迭代可以进一步包括在针对该操作平台的修改版本执行该第二测试套件并未在该第二多个测试案例中导致失败的情况下递增第三计数器。每个迭代还可以包括确定第一计数器与第二和第三计数器之和的比率,并且在该比率不满足第一阈值的情况下执行另一个迭代。该方法在该比率满足第一阈值的情况下停止经所述多个迭代进行迭代。

该方面的各种实施方式可以包括以下的一个或多个特征。在一些实施方式中,该方法在针对该操作平台的修改版本执行该第一测试套件时该第一多个测试案例中没有失败的情况下针对该操作平台的修改版本执行该第二测试套件。在一些实施方式中,该方法还可以包括在针对该操作平台的修改版本执行该第二测试套件导致该第二多个测试案例中的至少一个失败的情况下向该第一多个测试案例中添加测试案例。在一些实施方式中,该方法在执行多个迭代中的下一个迭代之前向该第一多个测试案例中添加该测试案例。在一些实施方式中,该方法还可以包括在针对该操作平台的修改版本执行该第二测试套件导致该第二多个测试案例中的至少一个失败的情况下标记该多个软件错误中所选择的一个软件错误。该方法还包括基于所标记的该多个软件错误中所选择的一个来开发测试案例和/或基于所标记的该多个软件错误中所选择的一个向该第一多个测试案例中添加测试案例。

在一些实施方式中,该方法针对该操作平台的修改版本执行第一测试套件在该第一测试套件包括至少一个测试案例的情况下被实行。在一些实施方式中,该方法可以基于先前所执行迭代的数量是否无法满足第二阈值而进一步执行下一个迭代。

该方面的其它实施方式包括相对应的计算机系统、装置,以及记录在一个或多个计算机存储设备上的计算机程序,它们均被配置为执行上文所概括的方法的操作。

在另一个方面,一种用于针对操作平台开发测试套件的系统包括处理器以及存储指令的存储器,所述指令在被该处理器执行时使得该处理器实行多个迭代操作。该多个迭代操作中的每一个可以包括针对该操作平台的修改版本执行第一测试套件。在一些实施例中,该操作平台的修改版本通过改变该操作平台的基线版本而被创建。该多个迭代操作中的每一个还可以包括在针对该操作平台的修改版本执行该第一测试套件失败的情况下递增第一计数器。该多个迭代操作中的每一个还可以包括在针对该操作平台的修改版本执行该第一测试套件通过的情况下针对该操作平台的修改版本执行第二测试套件,在针对该操作平台的修改版本执行该第二测试套件失败的情况下递增第二计数器,并且在针对该操作平台的修改版本执行该第二测试套件通过的情况下递增第三计数器。该多个迭代操作中的每一个还可以包括确定第一计数器与第二和第三计数器之和的比率,并且在该比率不满足第一阈值的情况下执行该多个迭代操作中的另一个。该多个迭代操作在该比率满足第一阈值的情况下停止执行。

该方面的各种实施方式可以包括以下的一个或多个特征。在一些实施方式中,该多个迭代操作进一步包括在针对该操作平台的修改版本执行该第二测试套件失败的情况下向该第一测试套件添加测试案例。在一些实施方式中,向该第一测试套件添加测试案例在执行该多个迭代操作中的另一个先前进行。根据一些实施方式,该多个迭代操作中的每一个针对该操作平台的修改版本执行该第一测试套件可以在该第一测试套件包括至少一个测试案例的情况下实行。在一些实施方式中,执行该多个迭代操作中的另一个进一步基于该多个迭代操作中无法满足第二阈值的先前所执行迭代操作的数量。

在一些实施方式中,改变该操作平台的基线版本是通过向该基线版本中注入多个软件错误之一来执行的。

该方面的其它实施方式包括相对应的方法,其被配置为根据存储在递归测试系统的存储器中的指令来执行该递归测试系统的处理器的操作。

在另一个方面,一种用于针对操作平台创建测试套件的方法包括执行与多个软件错误相对应的多个迭代,其中该多个迭代中的每一个与该多个软件错误之一相对应。每个迭代可以包括通过向该操作平台的基线版本注入该多个软件错误中相对应的一个而改变该操作平台的基线版本来创建该操作平台的修改版本。每个迭代还可以包括在第一测试套件包括至少一个测试案例的情况下针对该操作平台的修改版本执行该第一测试套件,并且在针对该操作平台的修改版本执行该第一测试套件失败的情况下递增第一计数器。如果针对该操作平台的修改版本执行该第一测试套件通过,则每个迭代可以针对该操作平台的修改版本执行第二测试套件,在针对该操作平台的修改版本执行该第二测试套件失败的情况下递增第二计数器,并且在针对该操作平台的修改版本执行该第二测试套件失败的情况下向用于该多个软件错误中相对应的一个的该第一测试套件添加新的测试案例。每个迭代还可以包括在针对该操作平台的修改版本执行该第二测试套件通过的情况下递增第三计数器。该迭代可以包括确定第一计数器与第二和第三计数器之和的比率,基于在该比率不满足第一阈值时执行另一个迭代,并且在该比率满足第一阈值时停止迭代的执行。

在该方面的一些实施方式中,执行另一个迭代进一步基于该多个迭代中先前所执行迭代的数量是否无法满足第二阈值。在一些实施方式中,该第二阈值基于多个迭代中先前所执行迭代与该多个迭代的总数的比率。

该方面的其它实施例包括相对应的计算机系统、装置,以及记录在一个或多个计算机存储设备上的计算机程序,它们均被配置为执行上文所概括的方法的操作。

一种或多种实施方式的细节在附图和以下描述中给出。其它特征将由于描述和附图以及权利要求而是显而易见的。

附图说明

图1示出了依据所公开实施例的用于多层测试套件生成的示例系统和网络。

图2示出了依据所公开实施例的用于操作平台的示例架构。

图3示出了依据所公开实施例的用于多层测试套件生成的过程的流程图。

图4示出了依据所公开实施例的用于注入软件错误的数据流程图。

图5示出了能够被用来实施本文所描述的技术的计算机设备和移动计算机设备的示例。

各图中同样的附图标记指示同样的要素。

具体实施方式

操作平台可以包括两个层:系统层和架构层。系统层包括操作系统内核,用于访问该操作系统内核的功能的库,以及用于与硬件对接的抽象层。架构层包括能够被在操作平台上执行的应用所使用的服务以及该应用。常规地,当针对兼容性测试套件来测试操作平台时,因为兼容性测试套件是在所提出的被配置由终端用户所使用的设备的发布版本上执行,所以系统层和架构层被一起测试。在这样的版本中,可能无法针对系统层进行直接访问。例如,所提出的设备的发布版本可能并没有被“root”和/或系统层可能针对终端用户的访问而被锁定。结果,针对这样所提出的设备的发布版本的系统层功能就通过对架构层或者在架构层内执行的应用的调用来测试。但是,由于失败可能在系统层或架构层的任一个中导致故障,所以这样的测试使得难以定位错误。

兼容性测试套件能够被配置为在至少一种类型的系统(例如,台式机)上运行并且直接在一个或多个所接合设备或仿真器上执行测试案例。在一些实施方式中,兼容性测试套件包括被设计为整合到搭建设备的工程师的日常工作流中(诸如经由连续构建系统)的单元测试的集合。例如,兼容性测试套件的一种用途可以是提前揭示出不兼容性,并且确保软件在整个开发过程中保持兼容。

测试案例能够由开发方和/或自动化过程(例如,下文所描述的测试案例生成器)来创建。测试案例可以包括用于操作平台的一个或多个代码段和/或测试数据的一个或多个部分。代码段在特定测试平台上的执行或者将测试数据作为参数提供给它就构成了测试案例对该操作平台的测试。在一些实施方式中,测试案例的代码能够被设计为测试操作平台的代码的原子单位(例如,单个类)。在一些实施方式中,测试案例的代码能够被设计为测试一个或多个api(例如,将api的组合共同测试)。例如,测试案例可以包括检测操作平台的公共api实际上能够在供应商的设备上可用(这可以被认为是签名校验)的工具。作为另一个示例,测试案例能够相对可用文档来测试操作平台的api(例如,核心库和/或应用架构的那些api)以确保api的正确性(诸如包括正确的类、属性和/或方法签名,方法的行为正确,和/或执行负面测试以确保针对不正确参数处置的预期行为)。在一些实施方式中,测试案例的代码能够被设计为测试操作平台的持久性。在一些实施方式中,测试案例的代码能够被设计为相对所定义的基准来测试系统的性能。

因此,本公开描述了一种用于创建测试套件(为了便于讨论被称作“第一测试套件(firsttestsuite)”或“供应商测试套件(vendortestsuite)”)的过程,所述测试套件用于独立于所提出的供应商设备的发布版本上的操作平台的架构层来测试该操作平台的系统层。在一些实施方式中,该第一测试套件创建过程使用操作平台的基线版本以及用来生成该第一测试套件的针对操作平台的该基线版本所配置的第二测试套件(例如,兼容性测试套件)。

根据一些实施例,多个软件错误被注入到操作平台的基线版本的系统层之中以创建该操作平台的多个修改版本。针对该操作平台的多个修改版本中的每一个执行该第一测试套件。如果该第一测试套件中的至少一个测试由于当前所注入的错误而失败,则第一计数器被递增。另一方面,如果该第一测试套件中并没有测试失败,则针对该操作平台的修改版本运行第二测试套件。如果当前注入的软件错误导致该第二测试套件中的至少一个测试失败,则与当前所注入的软件错误相对应的测试案例被添加至第一测试套件,或者当前所注入的软件错误就被标记用于(要被添加至第一测试套件的)测试案例的创建并且第二计数器被递增。另一方面,如果第二测试套件中并没有测试由于当前软件错误的注入而失败,则第三计数器被递增。该过程随后通过访问该操作平台使用另一个软件错误的另一个修改版本而重复。针对多个软件错误(以及操作平台的相对应修改版本)继续该过程,直至第一计数器与第二和第三计数器之和的比率满足阈值。一旦阈值被满足,则第一测试套件针对该操作平台的基线版本完成并且能够被用来测试对该操作平台的基线版本进行扩展的特定于供应商的实施方式。

图1以框图形式图示了用于多层测试套件生成的系统100。在图1所示的实施例中,测试套件提供方计算机系统110、操作平台提供方计算机系统150、第一供应商计算机系统165和第二供应商计算机系统170能够使用网络190进行通信。在一些实施方式中,第一供应商所提出的用户设备167能够使用直接连接、局域网或网络190与第一供应商计算机系统165进行通信。类似地,在一些实施例中,第二供应商所提出的用户设备172能够使用直接连接、局域网或网络190与第二供应商计算机系统170进行通信。并且,在一些实施例中,操作平台提供方计算机系统150能够经由直接连接、局域网或网络190与第三供应商提出的用户设备180进行通信。

在一些实施例中,系统100包括测试套件提供方计算机系统110。测试套件提供方计算机系统110能够执行功能和操作以生成用于测试操作平台提供方计算机系统150所提供的操作平台的测试版本的测试套件。例如,测试套件提供方计算机系统110可以执行功能和操作以生成兼容性测试套件130和供应商测试套件140,它们能够被用来测试操作平台的版本,诸如基线操作平台版本155。

在一些实施例中,测试套件提供方计算机系统110包括测试套件生成器120。测试套件生成器120可以执行功能和操作以便生成依据所公开实施例的兼容性测试套件130和/或供应商测试套件140。在一些实施方式中,测试套件生成器120可以创建、访问和/或使用修改的操作平台版本125以便开发兼容性测试套件130和供应商测试套件140。例如,如下文进一步详细描述的,测试套件生成器120可以针对修改操作平台版本125执行兼容性测试套件130和/或供应商测试套件140来修改和/或创建供应商测试套件140。在一些实施例中,测试套件提供方计算机系统110可以包括测试套件生成器120可以在测试套件生成期间访问和/或与之通信的测试套件运行器160的副本。以下讨论测试套件运行器160的实施例。

在一些实施例中,系统100包括操作平台提供方计算机系统150,其能够经由网络190与远程计算机系统通信以提供操作平台的版本。例如,操作平台提供方计算机系统150可以经由网络190将基线操作平台版本155传输至第一供应商计算机系统165、第二供应商计算机系统170或测试套件提供方计算机系统110。在一些实施例中,测试套件提供方计算机系统110和操作平台提供方计算机系统150由相同的实体所维护和控制,所述实体例如是操作平台提供方。并且,在一些实施例中,测试套件提供方计算机系统110的功能和操作可以由操作平台提供方计算机系统150来执行。根据一些实施例,系统100还可以包括第一供应商计算机系统165和第二供应商计算机系统170。第一供应商计算机系统165和第二供应商计算机系统170可以分别由制造、分发和/或销售执行操作平台的一个版本的用户计算设备的供应商来操作。

在一些实施例中,基线操作平台版本155是开源的并且能够由制造运行该操作平台的用户设备的多个供应商所修改。多个供应商可以获得基线操作平台版本155并且对其进行修改以便部署在该供应商计划发布销售的该供应商所制造的用户设备(为了简明,本文称之为“所提出用户设备(proposeduserdevices)”)上。例如,第一供应商能够使用第一供应商计算机系统165获得基线操作平台版本155。第一供应商可以修改基线操作平台版本155以创建第一供应商操作平台版本169,它被部署到第一供应商所提出的用户设备167上。类似地,第二供应商能够使用第二供应商计算机系统170获得基线操作平台版本155。第二供应商可以修改基线操作平台版本155以创建第二供应商操作平台版本174,它被部署到第二供应商所提出的用户设备172。在一些实施例中,第一供应商操作平台版本169和第二供应商操作平台版本174有所不同。在一些实施方式中,供应商可以修改基线操作平台版本155并且将其部署在所提出的用户设备上,并且第三供应商可以将其所提出的用户设备提供至操作平台提供方以便进行测试。例如,如图1所示,第三供应商能够将第三供应商所提出的用户设备180提供至操作平台提供方以便进行测试,所述第三供应商可以修改基线操作平台版本155以创建第三供应商操作平台版本185。

根据一些实施例,操作平台提供方计算机系统150可以包括基线操作平台版本155。基线操作平台版本155可以包括操作平台的最新稳定版本的源代码和可执行代码。例如,基线操作平台版本155可以包括操作平台的版本的源代码和/或可执行代码,该版本已经在没有经第三方修改的情况下完成验证和确认测试并且作为操作平台的开发方提供的的操作平台的稳定版本而向供应商和/或公众发布。例如,如果供应商在针对操作平台的4.5版本设计和或制造用户设备,则基线操作平台版本155可以是如操作平台提供方所提供的未经任何供应商或其它第三方所修改的操作平台的4.5版本。如上文所指出的,供应商可以获得基线操作平台版本155的副本并且对其进行修改以便部署到它们各自所提出的用户设备。因此,诸如第一供应商操作平台版本169、第二供应商操作平台版本174和第三供应商操作平台版本185的经供应商修改的操作平台的版本可以与基线操作平台版本155有所不同。

在一些实施例中,操作平台提供方计算机系统150包括测试套件运行器160。测试套件运行器160可以实行功能和操作以针对基线操作平台版本155的修改版本执行一个或多个测试套件。根据一些实施例,测试套件运行器160能够访问基线操作平台版本155所展现的应用编程接口(api),这允许测试套件运行器160与基线操作平台版本155进行对接从而执行测试套件的一个或多个测试案例。例如,测试套件运行器160可以与基线操作平台版本155的api对接以运行兼容性测试套件130或供应商测试套件140。

在一些实施例中,操作平台提供方计算机系统150经由网络190将测试套件运行器160的副本提供至开发执行操作平台的用户设备的供应商的计算机系统。例如,第一供应商可以从操作平台提供方计算机系统150获得测试套件运行器160的副本,并且针对第一供应商所提出的用户设备167运行兼容性测试套件130和/或供应商测试套件140以测试第一供应商操作平台版本169。类似地,第二供应商可以从操作平台提供方计算机系统150获得测试套件运行器160以测试被部署到第二供应商所提出的用户设备172的第二供应商操作平台版本174。根据一些实施例,操作平台提供方计算机系统150可以使用测试套件运行器160来测试供应商所提出的用户设备。例如,如图1所示,操作平台提供方计算机系统150可以使用测试套件运行器160来测试已经被部署到第三供应商所提出的用户设备180的第三供应商操作平台版本185。

图1中所概括的系统100能够被计算机化,其中每个所图示的组件包括被配置为经由网络190与其它计算设备进行通信的计算设备。例如,测试套件提供方计算机系统110可以包括一个或多个计算设备,诸如被配置为经由网络190而往来于其它计算设备传送和接收数据的台式机、笔记本或手持计算设备。类似地,操作平台提供方计算机系统150、第一供应商计算机系统165和第二供应商计算机系统170可以包括被配置为经由网络190通信数据的一个或多个计算设备。例如,操作平台提供方计算机系统150、第一供应商计算机系统165和第二供应商计算机系统170可以包括一个或多个服务器或计算集群。在一些实施例中,这些计算系统能够使用专用于执行如本文所描述系统的相应操作的一个或多个计算设备来实施。

根据实施例,网络190可以包括一种或多种任意类型的网络,诸如一个或多个局域网、广域网、个人域网络、电话网络和/或互联网,它们能够经由任意可用的有线和/或无线通信协议进行访问。例如,网络190可以包括测试套件提供方计算机系统110和第一供应商计算机系统165通过其进行通信的互联网连接。包括安全和非安全网络通信链路在内的任意其它网络组合也被预见到在本文所描述的系统中使用。

图2示出了依据所公开实施例的用于操作平台200的示例架构示图。在一些实施例中,操作平台200可以是开源操作平台,其中操作平台的源代码能够由在计算设备上安装操作平台的第三方和/或公众所获取。在一些实施例中,操作平台200可以包括在诸如膝上计算机、台式机或其它通用计算设备的通用计算设备或者诸如移动电话、智能电话或平板计算设备的移动计算设备上执行的通用操作系统。操作平台200可以支持计算设备的基本功能,诸如调度任务、执行应用、控制外围设备,和/或管理通用计算设备的资源。

在一些实施例中,操作平台200包括能够被划分为上方抽象层和下方抽象层的若干抽象层。例如,如图2所示的操作平台200沿线210被划分为上方抽象层或架构层220以及下方抽象层或系统层230。

在一些实施例中,架构层220可以包括两个子层,例如应用层240和应用架构层250。在一些实施例中,应用层240可以包括诸如所提供应用242和第三方应用246之类的用户应用在其中执行的应用或用户空间。例如,所提供应用242可以包括诸如电子邮件客户端、电话应用、web浏览器应用和/或备忘录应用之类的应用。第三方应用246可以包括用户从第三方应用提供方下载并安装的应用。第三方应用246例如可以包括文字处理应用、电子表格应用、社交媒体应用和游戏。在一些实施例中,执行操作平台200的计算设备的用户有权直接访问应用层240的功能。

根据一些实施例,安装在应用层240内的应用能够与应用架构层250中的服务或管理器对接从而访问系统层230所提供的功能。在一些实施例中,用户可能不能访问应用架构层250,而是可以通过应用层240的应用来间接访问它。例如,应用架构层250可以包括能够被应用层240中安装的应用所使用的各种服务251,仅给出几个示例,诸如输入输出服务、蓝牙服务或数据库服务。在一些实施例中,应用架构层250还可以包括诸如位置管理器252、活动管理器253、分组管理器254、资源管理器255和电话管理器256的各种管理器,它们可以管理后台过程(例如,没有用户界面的过程)。例如,位置管理器252可以提供为应用层240内执行的应用提供有关执行操作平台200的设备的当前位置的位置信息(诸如gps坐标)的api。例如,活动管理器253可以向应用层240内执行的应用提供有关执行操作平台200的设备的线程、过程或其它资源的信息。在一些实施例中,分组管理器254可以提供用于安装、卸载、升级或配置应用层240内所安装的应用的功能。在一些实施例中,资源管理器255可以提供用于管理诸如cpu执行周期或存储器的资源的功能。在一些实施例中,操作平台200提供允许通过ip网络或蜂窝网络的电话呼叫的应用,并且在这样的实施例中,应用架构层250可以包括向电话应用提供功能的电话管理器256。

在一些实施例中,系统层230包括三个子层,库层260、硬件抽象层280和内核层290。在一些实施例中,库层260包括向应用层240内的应用或者位于应用架构层250内的服务或管理器提供共用功能的一个或多个库。例如,库层260可以包括数据库的库262,其提供用于访问和利用在操作平台200上执行的数据库的库。库层260还可以包括能够向应用层240或应用架构层250提供用于使用互联网协议的功能的互联网库264。根据一些实施例,库层260还可以包括能够提供用于在执行操作平台200的设备的显示器上渲染图形的功能的图形库266。共用库268例如可以包括可以由应用层240或应用架构层250使用的共用功能。这样的共用功能例如可能包括过程间通信库、输入/输出库或数据管理库。在一些实施例中,库层260可以包括运行时间270。运行时间270可以包括核心库273,以及向执行操作平台200的计算设备提供用于执行(应用架构层250中的)服务、管理器以及(应用层240中的)应用的功能的虚拟机277。例如,在一些实施例中,应用层240内的应用可以在一个或多个虚拟机上执行,并且在这样的实施例中,这些一个或多个虚拟机可以位于库层260的运行时间270内。

在一些实施例中,操作平台200的系统层230包括硬件抽象层280。在一些实施例中,硬件抽象层280可以在执行操作平台200的计算设备的物理硬件和该计算设备上运行的软件之间提供抽象层。

系统层230还可以包括内核层290。内核层290可以提供用于操作平台200的中心核心的功能。例如,内核层290能够提供用于管理操作平台200的启动、来自应用层240和应用架构层250的输入/输出请求(例如,经由驱动器292)、过程启动和终止的管理(例如,经由过程管理296)、电源管理(例如,经由电源管理294)以及存储器操作的管理(例如,经由存储器管理298)的功能。在一些实施例中,应用层240和应用架构层250。

在测试执行操作平台200的用户设备时,一个或多个测试套件可以被使用。但是,这些测试套件的入口点通常是在应用层240或应用架构层250中,这是因为测试通常在准备供用户使用的设备上进行,并且可以防止对系统层230进行访问。作为结果,如果在操作平台上执行测试案例导致缺陷,则可能难以在操作平台200内标识出导致该缺陷的错误的位置。例如,如果测试案例在使用用户电话资源的应用上进行了呼叫,并且该测试案例触发了缺陷,则可能难以确定导致该缺陷的错误是位于应用层240(或所提供应用242)内、应用架构层250(或电话管理器256)内、硬件抽象层280还是内核层290内。因此,所公开的实施例描述了一种用于创建测试套件的过程,所述测试套件被设计为独立于架构层220的功能来测试系统层230的功能而不必使系统层230。

图3示出了表示用于执行多层测试套件生成的示例测试套件生成过程300的流程图。根据一些实施例,测试套件生成过程300能够由测试套件提供方计算机系统110中诸如测试套件生成器120的一个或多个组件来执行。虽然以下讨论将测试套件生成过程300描述为由测试套件生成器来执行,但是诸如测试套件提供方计算机系统110的被配置为执行测试套件生成的计算机系统中的其它组件也能够执行测试套件生成过程300,而并不背离本公开该的精神和范围。

测试套件生成器能够执行测试套件生成过程300以创建第一测试套件并且向其添加测试案例,所述第一测试套件能够被用来独立于操作平台的架构层测试该操作平台的系统层。该第一测试套件例如可以是供应商测试套件140。在一些实施例中,测试套件生成过程300通过在已经被修改以包括一个或多个可能导致软件缺陷的错误的操作平台的版本上执行已经是第一测试套件和第二测试套件的一部分的测试案例来生成测试案例以添加至第一测试套件,所述第二测试套件测试该操作平台的架构层和系统层两者。该第二测试套件例如可以是兼容性测试套件130。

在一些实施例中,测试套件生成过程300是迭代过程,并且每个迭代能够与已经通过向操作平台的基线版本中注入错误而被修改的该操作平台的修改版本相对应。在这样的实施例中,在所注入错误和操作平台的修改版本之间可以存在一对一的对应关系。在一些实施例中,测试套件生成过程300的一个迭代对应于一个所注入的错误以及操作平台的一个修改版本,并且测试套件生成过程300的一个迭代可以进一步对应于被设计为执行被注入该错误的位置处的代码的一个测试案例。所注入错误、操作平台的修改版本和针对所注入错误的测试案例之间的对应关系可以被存储在能够由测试套件生成器所访问的存储器(例如,测试套件提供方计算机系统110的存储器)内的数据结构或数据库中。此外,操作平台的修改版本(均对应于所注入的错误)和测试案例也可以被存储在能够由测试套件生成器所访问的存储器内的数据结构或数据库中。在一些实施例中,测试套件生成器可以针对存储在它所能够访问的存储器内的所有经修改的操作平台执行测试套件生成过程300。例如,如果测试套件提供方计算机系统具有已经通过向基线操作平台版本中注入两百个独立错误而被修改的基线操作平台的两百个不同版本,则测试套件生成器可以将测试套件生成过程执行两百次。

在一些实施例中,测试套件生成器可以执行测试套件生成过程300直至测试套件阈值指示已经生成了足够数量的测试案例。在一些实施方式中,该测试套件阈值能够有助于确定何时停止针对操作平台生成新的测试案例,从而不会在这项任务上花费不必要的时间和资源。在一些实施例中,该测试套件阈值可以表示导致来自第一测试套件的至少一个测试案例失败的所注入错误的计数相比导致来自第二测试套件的至少一个测试案例失败的所注入错误的计数和并且导致来自第二测试套件的测试案例失败的所注入错误的计数之和(或者针对操作平台的修改版本执行第二测试套件的次数)的百分比或比率(为了方便而称作“测试套件比率(testsuiteratio)”)。例如,该测试套件阈值可以是0.90,导致来自第一测试套件的至少一个测试案例失败的所注入错误的数量可以是72,导致来自第二测试套件的至少一个测试案例失败的所注入错误的计数可以是45,并且并未导致来自第二测试套件的测试案例失败的所注入错误的计数可以是40。在这样的示例中,测试套件生成器将继续执行测试套件生成过程300的迭代,因为它将会计算出测试套件比率为0.847(72/(45+40)),其低于测试套件阈值0.90。在一些实施方式中,测试套件生成器能够执行测试套件生成过程300直至测试套件阈值被达到或者另一个终止条件被满足(例如,预定义时间过期)。

除了计算测试套件比率并且将它与测试套件阈值相比较之外,测试套件生成器还可以使用与测试套件生成过程300已经被执行的次数相对应的第二阈值(为了方便被称作“样本计数阈值(samplecountthreshold)”)以确保相当数量的测试案例已经被添加至第一测试套件。例如,样本计数阈值可以是500,测试套件生成器可以计算出测试套件比率为0.95,测试套件阈值可以是0.75,并且测试套件生成器可能已经执行了测试生成过程378次(产生了样本计数值378)。在这样的示例中,由于尚未满足样本计数阈值,所以即使已经满足了测试套件阈值,测试套件生成器也将继续经测试套件生成过程300进行迭代。

根据一些实施例,测试套件生成器可以在步骤310开始测试套件生成过程300的迭代,其中测试套件生成器在步骤310访问操作平台的修改版本。在一些实施例中,测试套件生成器从诸如测试套件提供方计算机系统110的测试套件提供方计算机系统的数据存储访问操作平台的修改版本。在这样的实施例中,开发方可能已经通过修改操作平台的基线版本的源代码并且将它保存至测试套件提供方计算机系统的存储器而创建了操作平台的修改版本。

在一些实施例中,测试套件生成器能够通过使用自动错误注入技术向操作平台的基线版本中注入错误来创建操作平台的修改版本。例如,图4示出了用于向操作平台的基线版本中注入软件错误的数据流程的一个实施例。在一些实施例中,测试套件生成器包括错误注入器420或者与之通信。错误注入器420可以是能够修改代码库而使得经修改的代码库包括意在建模测试期间的软件缺陷的错误的处理、应用、服务或其它可执行软件组件,所述软件缺陷诸如数据计算缺陷或存储器访问曲线。在一些实施例中,错误注入器420能够执行诸如编译时间注入之类的软件错误注入,其中源代码被修改以创建错误。例如,错误注入器420能够通过修改源代码中的算子来注入错误,诸如将加法运算修改为减法运算(例如,将total=a+b变为total=a-b)。作为另一个示例,错误注入器420能够注入导致空指针的错误,诸如通过修改源代码而不为特定变量分配存储器,或者在调用该变量之前将指针值强制设置为空。在一些实施例中,错误注入器420可以是第三方工具,仅举出几个示例,诸如betorm、lfi、xception和exhaustif。

根据一些实施例,错误注入器420访问或接收错误参数410和基线操作平台版本155。错误参数410可以包括错误注入器420用来向基线操作平台版本155中注入错误的信息。使用错误参数410,错误注入器420能够创建经修改的操作平台版本425,它能够与一个或多个其它经修改的操作平台版本125一起被存储在存储器中。经修改的操作平台版本125可以由测试套件生成过程300在步骤310所访问。在一些实施例中,错误注入器420还可以产生修改数据430。修改数据430可以包括有关被注入到经修改的操作平台版本452中的错误的信息从而促成用于触发该错误的测试案例的生成。例如,修改数据430可以包括修改的文件和行列编号,将会在经修改的操作平台版本425中触发该错误的函数调用,或者将会导致该错误被注入的代码位置被执行的输入。

在一些实施例中,测试套件生成器120可以包括测试案例生成器440或者与之通信。测试案例生成器440可以执行基于修改数据430创建测试案例的功能和操作。例如,测试案例生成器440可以包括生成能够对修改数据430中所标识的函数或方法进行调用的可执行代码的脚本。在这样的实施例中,测试案例生成器440能够接收修改数据430并且生成测试案例445。测试案例445可以被存储在存储器中,所述存储器能够由测试套件生成器进行访问,从而测试套件生成器能够基于测试套件生成过程300的执行而在适当时将测试案例445添加至第一测试套件,诸如供应商测试套件140。根据一些实施例,测试套件生成器可以保存或访问将错误参数410、经修改的操作平台版本425、修改数据430和/或测试案例445进行链接的数据库,从而当测试套件生成器执行测试套件生成过程300时,它拥有在执行测试套件生成过程300时所使用的修改操作平台和依据与该修改操作平台相对应的测试套件生成过程300迭代的执行而被加入到第一测试套件中的测试案例之间的链接。

返回参考图3,测试套件生成器120在步骤315继续执行测试套件生成过程300,其中它确定第一测试套件是否已经包括测试案例。在一些实施例中,第一测试套件在到达步骤315时可能尚未包括测试案例。这例如可能在测试套件生成器已经开始开发第一测试套件并且仅执行了测试套件生成过程300的几次迭代时发生。如果第一测试套件中没有测试案例(步骤315:否),则测试套件生成器将在步骤340针对操作平台的修改版本运行第二测试套件。另一方面,如果第一测试套件中有测试案例(步骤315:是),则测试套件生成器将在步骤320针对操作平台的修改版本运行第一测试套件。

在一些实施例中,如果步骤320的执行导致来自第一测试套件的至少一个测试案例失败(步骤325:是),则测试套件生成器可以在步骤330递增第一计数器。该第一计数器可以与所注入错误导致第一测试套件中的至少一个测试失败的次数相对应。在一些实施例中,测试套件生成器连同第二和第三计数器(下文更详细地描述)一起使用第一计数器来计算测试套件数值,所述测试套件数值与测试套件阈值相比较以确定测试套件生成器是否应当继续经测试套件生成过程300进行迭代(在步骤370)。如果测试套件阈值被满足(步骤370:是),则测试套件生成器不再执行测试套件生成过程300的迭代,并且测试套件生成过程300结束。然而,如果测试套件阈值并未被满足(步骤370:否),则测试套件生成器通过返回步骤310而再次执行测试套件生成过程300。在一些实施例中以及如图3所示,当来自第一测试套件的至少一个测试失败时,测试套件生成器将不会针对被测试的操作平台的修改版本执行来自第二测试套件的任何测试案例,并且执行将基于步骤370的结果继续进行至下一个迭代(以及操作平台的下一个修改版本)或者终止。

在一些实施例中,当步骤340的执行并未导致来自第二测试套件的测试案例失败时(步骤345:否),则测试套件生成器可以在步骤350递增第二计数器。在一些实施例中,第二计数器可以对应于并未导致来自第二测试套件(并且也从第一测试套件延伸)的测试案例失败的所注入错误的数量。一旦测试套件生成器在步骤350递增了第二计数器,它就可以继续在步骤370执行测试套件生成过程300,其中它将测试套件比率与测试套件阈值相比较。如果测试套件阈值被满足,则测试套件生成器将停止测试套件生成过程300的执行。另一方面,如果测试套件尚未被满足,则测试套件生成器将对基于不同于当前迭代的所注入错误的操作平台的下一个修改版本执行测试套件生成过程300的下一个迭代。

根据一些实施例,如果来自第二测试套件的至少一个测试案例失败(步骤345:是),则测试套件生成器将与被注入操作平台的修改版本的错误相对应的测试案例添加至第一测试套件。例如,如果来自第二测试套件的测试案例的执行导致arrayoutofbounds异常,则测试套件生成器可以确定对应于导致arrayoutofbounds异常的所注入错误的测试案例。在一些实施例中,测试套件生成器参照将操作平台的修改版本映射到可以测试案例生成器基于在错误注入器注入导致arrayoutofbounds异常的错误时来自错误注入器的输出所生成的测试案例的数据结构(例如,上文关于图4所描述的)。在一些实施例中,当前迭代的操作平台的修改版本(及其相关的所注入错误和/或修改数据430)被标记以供开发方创建与该所注入错误相对应的测试案例。在开发方创建了测试案例之后,测试套件生成器可以将其添加至第一测试套件。

在一些实施例中,当第二测试套件的至少一个测试失败时(步骤345:是),测试套件生成器可以递增与所注入错误导致来自第二测试套件的测试案例失败的次数相对应的第三计数器(在步骤360)。在递增第三计数器之后,测试套件生成器可以在步骤370比较测试套件比率(第一计数器与第二和第三计数器之和的比率)以确定它是否满足测试套件阈值。如果测试套件阈值被满足(步骤370:是),则测试套件生成器结束测试套件生成过程300的执行,但是如果测试套件阈值并未被满足(步骤370:否),则测试套件生成器使用对应于另一个所注入错误的操作平台的下一个修改版本来执行测试套件生成过程300的下一个迭代。如上文所提到的,测试套件生成器可以执行测试套件生成过程300直至该阈值在步骤370被满足或者它已经针对测试套件提供方计算机系统110的存储器内所存储的所有经修改的操作平台都执行了测试套件生成过程300。

在一些实施例中,测试套件生成器还可以将(对应于它已经执行测试套件生成过程300的次数的)样本计数与样板计数阈值相比较。测试套件生成器可以除了步骤370的比较之外使用该比较来确定是否需要执行测试套件生成过程300的附加迭代。

下文是实施方式的示例。一种用于针对操作平台开发测试套件的系统可以包括:处理器;和存储指令的存储器,所述指令在被该处理器执行时使得该处理器实行多个迭代操作。该多个迭代操作中的每一个可以包括:针对该操作平台的修改版本执行第一测试套件,其中该操作平台的修改版本通过改变该操作平台的基线版本而被创建;在针对该操作平台的修改版本执行该第一测试套件失败的情况下递增第一计数器,在针对该操作平台的修改版本执行该第一测试套件通过的情况下针对该操作平台的修改版本执行第二测试套件,在针对该操作平台的修改版本执行该第二测试套件失败的情况下递增第二计数器,在针对该操作平台的修改版本执行该第二测试套件通过的情况下递增第三计数器,确定第一计数器与第二和第三计数器之和的比率,在该比率不满足第一阈值的情况下执行该多个迭代操作中的另一个,并且在该比率满足第一阈值的情况下停止该多个迭代操作的执行。

以上实施方式中的系统可以包括任意或全部的以下特征。该多个迭代操作中的每一个可以进一步包括在针对该操作平台的修改版本执行该第二测试套件失败的情况下向该第一测试套件添加测试案例。向该第一测试套件添加测试案例在执行该多个迭代操作中的另一个之前进行。针对该操作平台的修改版本执行该第一测试套件可以在该第一测试套件包括至少一个测试案例的情况下实行。执行该多个迭代操作中的另一个可以进一步基于该多个迭代操作中无法满足第二阈值的先前所执行迭代操作的数量。改变该操作平台的基线版本通过向该基线版本中注入多个软件错误之一来执行。该多个迭代操作中的每一个可以对应于该多个软件错误中的每一个。

以下是实施方式的另一个示例。一种用于针对操作平台创建测试套件的方法可以包括:执行对应于多个软件错误的多个迭代,其中该多个迭代中的每一个对应于该多个软件错误之一,并且该多个迭代中的每一个包括:通过向该操作平台的基线版本注入该多个软件错误中相对应的一个而改变该操作平台的基线版本来创建该操作平台的修改版本;在第一测试套件包括至少一个测试案例的情况下针对该操作平台的修改版本执行该第一测试套件,并且在针对该操作平台的修改版本执行该第一测试套件失败的情况下递增第一计数器;并且,如果针对该操作平台的修改版本执行该第一测试套件通过:则针对该操作平台的修改版本执行第二测试套件,在针对该操作平台的修改版本执行该第二测试套件失败的情况下递增第二计数器,并且在针对该操作平台的修改版本执行该第二测试套件失败的情况下向用于该多个软件错误中相对应的一个的该第一测试套件添加新的测试案例;在针对该操作平台的修改版本执行该第二测试套件通过的情况下递增第三计数器;确定第一计数器与第二和第三计数器之和的比率;基于在该比率是否满足第一阈值而执行该多个迭代中的另一个,并且在该比率满足第一阈值的情况下停止该多个迭代的执行。

以上实施方式中的方法可以包括任意或全部的以下特征。执行该多个迭代中的另一个可以进一步基于该多个迭代中先前所执行迭代的数量是否无法满足第二阈值。该第二阈值可以基于该多个迭代中先前所执行迭代与该多个迭代的总数的比率。

图5示出了可以结合本文所描述技术来使用的通用计算机设备500和通用移动计算机设备550的示例。计算设备500意在表示各种形式的数字计算机,诸如膝上计算机、台式机、平板、工作站、个人数字助理、电视机、服务器、刀锋服务器、主机和其它适当计算机。计算设备550意在表示各种形式的移动设备,诸如个人数字助理、移动电话、智能电话和其它类似的计算设备。这里所示的组件、其连接和关系以及其功能仅意在是示例性的,而并不意味着对本文中所描述和/或要求保护的发明的实施方式进行限制。

计算设备500包括处理器502、存储器504、存储设备506、连接到存储器504和高速扩展端口510的高速接口508,以及连接到低速总线514和存储设备506的低速接口512。处理器502可以是基于半导体的处理器。存储器504可以是基于半导体的存储器。每个组件502、504、506、508、510和512使用各种总线进行互连,并且可以安装在共用主板上,或者以其它适宜方式进行安装。处理器502能够处理指令以便在计算设备500内执行以在诸如耦合到高速接口508的显示器516的外部输入/输出设备上显示用于gui的图形信息,所述指令包括存储在存储器504中或者存储设备506中的指令。在其它实施方式中,如果适宜,可使用多个处理器和/或多个总线,以及多个存储器和存储器类型。而且,多个计算设备500可以与提供各部分必要操作的每个设备进行连接(例如,作为服务器群、刀刃服务器组或多处理器系统)。

存储器504存储计算设备500内的信息。在一种实施方式中,存储器504是一个或多个易失性存储单元。在另一实施方式中,存储器504是一个或多个非易失性存储单元。存储器504还可以是其它形式的计算机可读介质,诸如磁盘或光盘。

存储设备506能够为计算设备500提供大型存储。在一种实施方式中,存储设备506可以是或者可包含计算机可读介质,诸如软盘设备、硬盘设备、光盘设备、磁带设备、闪存或其它类似固态存储设备、或者设备阵列,包括存储域网络或其它配置中的设备。计算机程序产品可有形地实现在信息载体中。所述计算机程序产品还可包含指令,当被执行时,所述指令执行诸如以上所描述的一个或多个方法。所述信息载体是计算机或机器可读介质,诸如存储器504、存储设备506、处理器502上的存储器。

高速控制器508管理用于计算设备500的带宽密集操作,而低速控制器512管理较低带宽密集的操作。这样的功能分配仅是示例性的。在一种实施方式中,高速控制器508耦合到存储器504、显示器516(例如,通过图形处理器或加速器),并且耦合到可接受各种扩展卡(未示出)的高速扩展端口510。在所述实施方式中,低速控制器512耦合到存储设备506和低速扩展端口514。可以包括各种通信端口(例如,usb、蓝牙、以太网、无线以太网)的低速控制端口可耦合到一个或多个输入/输出设备,诸如键盘、指针设备、扫描仪,或者例如通过网络适配器耦合到诸如交换机和路由器之类的联网设备。

如图所示,计算设备500能够以各种不同形式来实现。例如,其可以实现为标准服务器520,或者这种服务器分组中的多个服务器。其还可以被实现为机架式服务器系统524的一部分。此外,其还可以在诸如膝上计算机522的个人计算机中实施。替选地,来自计算设备500的组件可以与诸如设备550的移动设备(未示出)中的其它组件相组合。每个这样的设备可包含一个或多个计算设备500、550,并且整个系统可由多个彼此通信的计算设备500、550所构成。

除其它组件之外,计算设备550包括处理器552、存储器564、诸如显示器554的输入/输出设备、通信接口566和收发器568。设备550还可提供以诸如微驱动器或其它设备的存储设备以提供附加存储。每个组件550、552、564、554、566和568使用各种总线进行互连,并且若干组件可安装在共用主板上或者以其它适宜方式进行安装。

处理器552能够执行计算设备550内的指令,包括存储在存储器564中的指令。所述处理器可被实现为包括单独且多个的模拟和数字处理器的芯片的芯片集。例如,所述处理器可提供设备550的其它组件的协同,诸如用户接口的控制、设备550所运行的应用以及设备550所进行的无线通信。

处理器552可以通过耦合到显示器554的控制接口558和显示接口556与用户进行通信。显示器554例如可以是tftlcd(薄膜晶体管液晶显示器)显示器或oled(有机发光二极管)显示器,或者其它适当的显示技术。显示接口556可以包括用于驱动显示器554向用户呈现图形和其它信息的适当电路。控制接口558可以从用户接收命令并且对其进行转以便向处理器552进行提交。此外,可提供与处理器552进行通信的外部接口562,从而使得设备550能够与其它设备进行近域通信。例如,外部接口562在一些实施方式中可提供有线通信,或者在其它实施方式中提供无线通信,并且也可使用多个接口。

存储器564存储计算设备550内的信息。存储器564可以实施为一个或多个计算机可读介质(medium)或介质(media)、一个或多个易失性存储器单元或者一个或多个非易失性存储器单元。也以提供扩展存储器574并通过扩展接口572连接到设备550,例如,所述扩展接口572可以包括simm(单列存储组模)卡接口。这样的扩展存储器574可为设备550提供额外的存储空间,或者还可以为设备550存储应用或其它信息。特别地,扩展存储器574可以包括指令以执行或补充以上所描述的过程,并且还可以包括安全信息。例如,扩展存储器574由此可被提供作为设备550的安全模块,并且可利用允许对设备550进行安全使用的指令进行编程。此外,可经由simm卡提供安全应用以及附加信息,诸如以不可破坏的方式在simm卡上设置识别信息。

例如,如以下所讨论的,所述存储器可以包括闪存和/或nvram存储器。在一种实施方式中,计算机程序产品以有形方式体现于信息载体中。所述计算机程序产品还可包含指令,当被执行时,所述指令执行诸如以上所描述的一个或多个方法。所述信息载体是计算机或机器可读介质,诸如存储器564、扩展存储器574、处理器552上的存储器,其例如可以在收发器568或外部接口562上被接收。

设备550可通过通信接口566进行无线通信,在必要情况下,所述通信接口566包括数字信号处理电路。通信接口566可在各种模式或协议下提供通信,除其它之外,所述模式或协议诸如gsm语音呼叫、sms、ems或mms消息发送、cdma、tdma、pdc、wcdma、cdma2000或gprs。例如,这样通信可通过射频收发器568进行。此外,诸如可使用蓝牙、wifi或其它这样的收发器(未示出)进行短范围通信。此外,gps(全球定位系统)接收器模块570可为设备550提供附加的导航和位置相关的无线数据,其可由设备550上运行的应用适当使用。

设备550还使用音频编解码器560进行可听通信,所述音频编解码器560接收来自用户的话音信息并且将其转换为可用的数字信息。音频编解码器560同样可以诸如通过扬声器为用户生成可听声音,例如在设备550的听筒中。这样的声音可以包括来自语音电话呼叫的声音,可以包括录制的声音(例如,语音消息、音乐文件等),并且还可以包括设备550上运行的应用所生成的声音。

如图所示,计算设备550可以以多种不同方式来实现。例如,其可以实现为移动电话550。其还可以实现为智能电话582、个人数字助理或其它类似移动设备的一部分。

系统和技术的各种实施方式可以以数字电路、集成电路、专门设计的asic(应用特定集成电路)、计算机硬件、固件、软件和/或其组合来实现。这些各种实施方式可以包括一个或多个计算机程序中的实施方式,所述计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,所述可编程系统可以为专用或通用,其耦合以从存储系统、至少一个输入设备以及至少一个输出设备接收数据和指令并且向其传送数据和指令。

这些计算机程序(也称作程序、软件、软件应用或代码)包括用于可编程处理器的机器指令,并且能够以高级程序和/或面向对象编程语言来实施,和/或以汇编/机器语言来实施。如这里所使用的,术语机器可读介质、计算机可读介质是指用来向可编程处理器提供机器指令和/或数据的任意计算机程序产品、装置和/或设备(例如,磁碟、光盘、存储器、可编程逻辑设备pld),其包括接收机器指令作为机器可读信号的机器可读介质。术语“机器可读信号”是指被用来为可编程处理器提供机器指令和/或数据的任意信号。

为了提供与用户的交互,这里所描述的系统和技术可在具有用于向用户显示信息的显示设备(例如,crt(阴极射线管)或lcd(液晶显示器)监视器)和用户能够通过其为计算机提供输入的键盘和指针设备(例如,鼠标或轨迹球)的计算机上实施。也可以使用其它类型的设备来提供与用户的交互;例如,提供给用户的反馈可以为任意形式的传感器反馈(例如,视觉反馈、听觉反馈或触觉反馈);并且来自用户的输入可以以任意形式接收,包括声音、话音或触觉输入。

这里所描述的系统、方法、装置和技术能够在计算系统中实现,所述计算系统包括后端组件(例如,数据服务器),或者其包括中间件组件(例如,应用服务器),或者其包括前端组件(例如,具有用户能够通过其与这里所描述的系统和技术的实施方式进行交互的图形用户节目或web浏览器的客户端计算机),或者这些后端、中间件或前端组件的任意组合。所述系统的组件可通过任意形式的介质或数字数据通信(例如,通信网络)进行互连。通信网络的示例包括局域网("lan")、广域网("wan")和互联网。

计算系统可以包括客户端和服务器。客户端和服务器通常彼此远离并且典型地通过通信网络进行交互。客户端和服务器的关系通过在各自计算机上运行的计算机程序所建立并且彼此具有客户端-服务器关系。

已经描述了多个实施例。然而将要理解的是,可以进行各种修改而并不背离本发明的精神和范围。

此外,图中所描绘的逻辑流程并非要求所示出的特定顺序或连续顺序来实现所期望的结果。此外,可以提供其它步骤,或者步骤可以从所描述的流程中被省去,并且可以向所描述的系统添加其它组件或者从中移除组件。因此,其它实施例处于以下权利要求的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1