发明内容
本说明书实施例提供一种回归测试用例的选择方法、装置及设备,用于解决通过现有技术选择出的测试用例进行回归测试时,测试效果不佳的问题。
本说明书实施例采用下述技术方案:
一种回归测试用例的选择的方法,包括:
根据聚类模型初始的超参数,对测试用例集进行聚类;
针对聚类得到每个簇,从该簇中选择部分测试用例随机注入错误数据后,对需要进行回归测试的应用进行测试,确定测试结果;
根据选择出的各测试用例的测试结果,确定反馈数据;
根据确定出的反馈数据调整所述超参数,并根据调整后的超参数重新对所述测试用例集进行聚类以及重新确定测试结果,直至所述超参数满足训练条件为止;
根据训练得到的超参数,确定所述回归测试选择的测试用例。
一种回归测试用例的选择装置,包括:
聚类模块,根据聚类模型初始的超参数,对测试用例集进行聚类;
第一选择模块,针对聚类得到每个簇,从该簇中选择部分测试用例随机注入错误数据后,对需要进行回归测试的应用进行测试,确定测试结果;
奖励信号确定模块,根据选择出的各测试用例的测试结果,确定反馈数据;
训练调整模块,根据确定出的反馈数据调整所述超参数,并根据调整后的超参数重新对所述测试用例集进行聚类以及重新确定测试结果,直至所述超参数满足训练条件为止;
第二选择模块,根据训练得到的超参数,确定所述回归测试选择的测试用例聚类模块,根据聚类模型初始的超参数,对测试用例集进行聚类;
第一选择模块,针对聚类得到每个簇,从该簇中选择部分测试用例随机注入错误数据后,对需要进行回归测试的应用进行测试,确定测试结果;
奖励信号确定模块,根据选择出的各测试用例的测试结果,确定反馈数据;
训练调整模块,根据确定出的反馈数据调整所述超参数,并根据调整后的超参数重新对所述测试用例集进行聚类以及重新确定测试结果,直至所述超参数满足训练条件为止;
第二选择模块,根据训练得到的超参数,确定所述回归测试选择的测试用例。
一种服务器,其中,所述服务器包括:一个或多个处理器及存储器,存储器存储有程序,并且被配置成由一个或多个处理器执行以下步骤:
根据聚类模型初始的超参数,对测试用例集进行聚类;
针对聚类得到每个簇,从该簇中选择部分测试用例随机注入错误数据后,对需要进行回归测试的应用进行测试,确定测试结果;
根据选择出的各测试用例的测试结果,确定反馈数据;
根据确定出的反馈数据调整所述超参数,并根据调整后的超参数重新对所述测试用例集进行聚类以及重新确定测试结果,直至所述超参数满足训练条件为止;
根据训练得到的超参数,确定所述回归测试选择的测试用例。
本说明书实施例采用的上述至少一个技术方案能够达到以下有益效果:
通过本说明书提供的方法、装置以及设备,在从测试用例集中选择用于回归测试的测试用例时,可通过对聚类模型的超参数进行训练(通过对初始超参数选择出的测试用例,注入错误数据的方法,注入错误数据后的测试用例在测试应用时的测试结果,再根据测试结果确定反馈数据,最后根据反馈数据训练该超参数,直至满足训练条件为止),确定用于选择测试用例的超参数,从而提高回归测试的测试效果。由于聚类模型采用超参数,是基于实际对需要测试的应用进行测试的测试结果,来调整训练的,因此训练的超参数相对于人工调整的超参数更加准确,可提高了回归测试的效果。
具体实施方式
为使本说明书的目的、技术方案和优点更加清楚,下面将结合本说明书具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图1为说明书实施例提供的一种回归测试用例的选择过程,具体可包括以下步骤:
S100:根据聚类模型初始的超参数,对测试用例集进行聚类。
由于回归测试通常是在应用程序开发或者调整阶段进行的,因此在本说明书一个或多个实施例中,可由应用程序开发方的服务器执行测试用例的选择过程。其中,该服务器可以是单独的一台设备,或者也可以是由多台设备组成的系统,本说明书对此不做限定。
具体的,在本说明书中,该服务器可基于聚类算法的方法,选择用于回归测试的测试用例。而通过聚类算法选择测试用例的核心就是超参数(K值)的选择。于是,服务器可根据预先设置的初始超参数的数值,对测试用例集进行聚类。
当然,本说明书并不限定初始的超参数的具体数值,可根据需要设置。并且,初始的超参数仅为训练启动时采用的数值,对于最终训练得到的超参数影响较小。因此,也可已采用随机选择的方式,确定初始的超参数。
另外,对于具体如何进行聚类本说明书不做限定,如可通过采用现有的K-means聚类算法的聚类模型进行聚类。具体过程由于现有技术已经相当成熟,因此本说明书不再赘述。
S102:针对聚类得到每个簇,从该簇中选择部分测试用例随机注入错误数据后,对需要进行回归测试的应用进行测试,确定测试结果。
在本说明书中,当服务器通过聚类模型确定聚类得到的若干簇之后,可针对每个簇,从该簇中选择若干测试用例,以便后续步骤的操作。
具体的,在本说明书中,服务器采用基于强化学习的异步优势演员评论员(Asynchronous Advantage Actor-Critic,A3C)算法,对聚类模型的超参数进行训练。
首先,服务器可确定用于训练超参数的训练样本。
具体的,服务器可针对每个簇,从该簇中选择若干用于训练超参数的训练样本。由于通常测试用例集中的测试用例数量很多,因此聚类得到每个簇中的测试用例的数量一般也较多。若将测试用例集中的所有测试用例作为训练样本,可能使得训练过程耗时较多,且训练成本较高。于是,为了提高训练效率以及减少训练过程的成本,服务器可从每个簇中,至少选择两个测试用例。
其次,针对每个簇,服务器可对从该簇中选择部分测试用例随机注入错误数据。
具体的,由于A3C算法是基于强化学习来训练该超参数的,而强化学习需要根据执行相应的动作Action,得到对应Action的奖励信息Reward,从而进行训练调整,因此服务器可针对每个簇,从该簇中选择至少两个测试用例,对选择出的测试用例中的部分测试用例随机注入错误数据,作为不同的Action,以便后续确定对应的Reward。也就是说,对于每个簇中选择出的不同的测试用例,服务器可对各测试用例分别执行注入错误数据和不注入错误数据的操作,以便后续进行回归测试后,确定Reward。
例如,假设服务器聚类后得到的簇如图2所示,包含A~D4个簇。为了方面描述,图2中为对存在二维属性的测试用例进行聚类后得到的簇,其中,每个实心点为一个测试用例,每个簇以虚线包围的圆圈表示,每个簇都包含了若干测试用例。对应图2本说明书提供的服务器从各簇中选择部分测试用例随机注入错误数据的示意图,如图3所示。图3中服务器从每个簇中选择了至少两个测试用例用于后续的回归测试,并且对选择的测试用例中的部分注入了错误数据。其中,以“×”号标记的测试用例为注入错误数据的测试用例。
然后,服务器可根据选择出的注入错误数据的测试用例以及选择出的未注入错误数据的测试用例,进行回归测试。
具体的,由于服务器最终选择出的测试用例,是用于对待测试的应用进行回归测试的,因此为了确定前一步注入错误数据的Action的反馈,服务器可通过该应用,运行选择出的各测试用例。
最后,服务器可确定测试结果,从而在后续步骤中,根据测试结果确定A3C算法中的Reward,以进行对超参数的调整。
具体的,当服务器通过应用运行各选择出的测试用例后,便可得到该测试用例是否可以正常运行,应用执行业务是否出错的测试结果。其中,根据各注入了错误数据的测试用例以及各未注入错误数据的测试用例,分别进行测试后得到的业务结果,确定真正率(True Positive Rate,TPR)、假负率(False Negative Rate,FNR)、真负率(TrueNegativeRate,TNR)以及假正率(False Positive Rate,FPR)的至少一种,并进一步确定测试结果。
其中,注入错误数据的测试用例作为负例,未注入错误数据的测试用例作为正例,将业务结果为正确的各测试用例,作为为预测正例,反之为预测负例。根据公式:TPR=预测正例/正例,TNR=预测负例/负例,FPR=预测正例/负例,FNR=预测负例/正例计算。
另外,通常每个测试用例中可包含多种不同类型的业务数据,例如,用户信息中就可包含:用户ID、用户年龄、用户性别等等多种类型的数据,而每一种不同的业务数据都可作为一个可注入错误数据的维度。于是,在本说明书中,服务器对需要注入错误数据的测试用例,还可随机选择一种业务数据的维度,利用错误数据替换该维度的业务数据。如前例中的3个维度的用户信息中,将用户性别替换为错误数据。
进一步地,为了通过不同的业务数据的维度,进行回归测试,服务器也可先确定测试用例中业务数据的维度数量,之后选择大于该维度数量进行测试。例如,假设测试用例中业务数据的维度数量为10,则服务器可对每个簇,选择至少11个测试用例,并且对其中10个测试用例,注入不同维度的错误数据,对1个测试用例不注入错误数据,再进行测试。以保证可通过业务数据涉及的所有维度,进行对超参数的测试。当然,在本说明书中,对于从簇中选择测试用例的数量和业务数据的维度数量的关系不做限定,服务器也选择少于维度数量的测试用例,或者选择超过维度数量的测试用例,具体可根据需要设置。
S104:根据选择出的各测试用例测试结果,确定反馈数据。
在本说明书中,服务器在进行测试之后,便可根据测试结果确定反馈数据。
具体的,如在步骤S102中所述的,服务器可将注入错误数据的操作定义为A3C算法中的Action,根据测试结果(如前述的,TPR、TNR、FPR、FNR中的一种),确定Reward作为反馈数据。当然,由于现有技术中A3C已经是较为成熟的技术,因为本说明书对于确定Reward的过程不再赘述,可根据需要设置。具体的在一些实施例中,后续调整超参数可以利用均方误差作为目标函数,采用梯度下降方法进行调整,则均方误差可根据上述测试结果确定,于是Reward可通过梯度下降方法确定。
S106:根据确定出的反馈数据调整所述超参数,并根据调整后的超参数重新对所述测试用例集进行聚类以及重新确定测试结果,直至所述超参数满足训练条件为止。
在本说明书中,服务器在确定出反馈数据之后,便可根据反馈数据调整该超参数,之后重复步骤S102至步骤S104的过程,直至确定对超参数的训练满足训练条件为止,确定该超参数训练完成。
具体的,在本说明书中,该训练条件可以是当超参数取值收敛至预设阈值,或者训练次数达到预设的数量,则服务器都可以确定训练结束。当然,对该阈值或者训练次数的数量本说明书不做限定,可根据需要设置。
其中,超参数的取值收敛,可以是当两次调整后的超参数的差值小于预设阈值。例如,预设阈值为0.1,超参数在围绕7收敛,其中两次超参数取值分别6.9以及6.8,则服务器可确定训练完成。
另外,在本说明书汇总,服务器也可测试结果收敛至预设阈值确定训练结束。服务器可在确定两次测试结果之间的差值处于收敛过程,并且差值小于预设阈值时,确定训练结束。例如,预设阈值为0.1,两次测试结果中的TPR为0.90和0.91,服务器也可确定该测试结束。
S108:根据训练得到的超参数,确定所述回归测试选择的测试用例。
在本说明书中,当服务器确定训练结束后,可根据训练过程中得到的各超参数,确定超参数的概率分布,之后服务器可再根据该超参数的概率分布,确定用于选择测试用例的超参数。最后,从测试用例集中通过聚类模型,确定各簇,并从各簇中选择用于回归测试的测试用例。
具体的,由于在测试过程中,超参数是一个不断收敛的过程,因此服务器可根据在对超参数训练过程中调整超参数时的各个取值,确定超参数的概率分布,如图4所示。
图4为本说明书提供的超参数概率分布的示意图,竖线表示超参数在训练过程中的取值,服务器根据该取值可确定超参数的概率分布的曲线,之后服务器可选择出现概率大于预设值的超参数,或者服务器可选择概率最大的超参数,如图5所示。
图5为本说明书提供的选择超参数的示意图,假设预设值为90%,则服务器可选择概率高于90%的任一数值的超参数,或者服务器也可选择出现概率最大点对应的超参数数值。如图5中,A点为出现概率最大的超参数,B段弧度对应的各超阐述数值为概率高于90%的任一数值的超参数。
最后,服务器在确定出超参数之后,便可重复步骤S100,并针对聚类得到的每个簇,选择该簇中的部分测试用例,用于回归测试。
基于图2所述的回归测试用例的选择过程,聚类模型中的核心超参数,不再由人工根据经验设置,而是通过A3C的强化学习方法,训练得到的。同时训练时又是基于待进行回归测试的应用,因此选择出的超参数是针对性适应该应用的,可有效地提高聚类得到的各簇的质量,从而提高通过训练得到的超参数选择出的测试用例的质量,并提高基于本方法选择出的测试用例进行回归测试的效率。
另外,在本说明书步骤S102确定测试结果之后,也可采用其他机器学习方法,训练该超参数。具体的,服务器可将每个测试用例作为训练样本,将测试用例的不同纬度的业务数据作为该训练样本的属性,将添加错误数据的测试用例作为负例,未添加错误数据的测试用例作为正例。之后在步骤S104中,根据测试结果,调整该超参数,并重新对测试用例集进行聚类,确定用于添加错误数据的测试用例,重复上述训练过程,直到测试结果准确性达到预设阈值,或者训练次数达到预设次数为止。确定训练结束时采用的超参数为步骤S108中,确定回归测试用例的超参数。其中,本说明书对与机器学习方法具体为何种方法不做限定,可根据需要进行设置。
需要说明的是,本说明书实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤S100和步骤S102的执行主体可以为设备1,步骤S102的执行主体可以为设备2;或者,步骤S100的执行主体可以为设备1,步骤S102和步骤S104的执行主体可以为设备2;等等。上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
基于图1所述的选择方法,本说明书实施例还提供一种回归测试用例的选择装置,如图6所示。
图6为本说明书实施例提供的一种回归测试用例的选择装置的结构示意图,包括:
聚类模块200,根据聚类模型初始的超参数,对测试用例集进行聚类;
第一选择模块202,针对聚类得到每个簇,从该簇中选择部分测试用例随机注入错误数据后,对需要进行回归测试的应用进行测试,确定测试结果;
奖励信号确定模块204,根据选择出的各测试用例的测试结果,确定反馈数据;
训练调整模块206,根据确定出的反馈数据调整所述超参数,并根据调整后的超参数重新对所述测试用例集进行聚类以及重新确定测试结果,直至所述超参数满足训练条件为止;
第二选择模块208,根据训练得到的超参数,确定所述回归测试选择的测试用例。
所述第一选择模块202,从该簇中选择至少两个测试用例,对选择出的测试用例中的部分测试用例随机注入错误数据,根据所述选择出的测试用例进行回归测试。
所述第一选择模块202,对所述部分测试用例中包含的各业务数据,随机选择至少一个业务数据替换为错误数据。
所述第一选择模块202,根据从该簇中选择出的注入错误数据的测试用例,以及选择出的未注入错误数据的测试用例,进行回归测试。
所述第一选择模块202,根据注入错误数据的各测试用例进行测试后得到的业务结果,以及未注入错误数据的各测试用例进行测试后得到的业务结果,确定真正率、假负率、真负率以及假正率的至少一种,根据确定出的真负率、假正率、真正率以及假负率的至少一种,确定测试结果。
所述奖励信号确定模块204,将注入错误数据作为动作Action,根据选择出的各测试用例测试结果以及异步优势演员评论员A3C算法,确定奖励信号Reward,作为反馈数据。
所述训练调整模块206,根据A3C算法以及确定出的反馈数据,调整所述超参数,根据所述调整后的超参数,重新对所述测试用例集进行聚类以及重新确定测试结果,直至所述超参数取值收敛至阈值为止,确定训练结束。
所述第二选择模块208,根据训练得到所述超参数的概率分布,选择概率大于预设值的超参数,根据选择出的超参数,从所述测试用例集中确定用于所述回归测试的测试用例。
基于图1所示的选择方法,本说明书实施例还提供一种服务器,如图7所示,其中,所述服务器包括:一个或多个处理器及存储器,存储器存储有程序,并且被配置成由一个或多个处理器执行以下步骤:
根据聚类模型初始的超参数,对测试用例集进行聚类;
针对聚类得到每个簇,从该簇中选择部分测试用例随机注入错误数据后,对需要进行回归测试的应用进行测试,确定测试结果;
根据选择出的各测试用例的测试结果,确定反馈数据;
根据确定出的反馈数据调整所述超参数,并根据调整后的超参数重新对所述测试用例集进行聚类以及重新确定测试结果,直至所述超参数满足训练条件为止;
根据训练得到的超参数,确定所述回归测试选择的测试用例。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。