确定测试代码覆盖率的方法、装置和电子设备与流程

文档序号:29860922发布日期:2022-04-30 11:01阅读:107来源:国知局
确定测试代码覆盖率的方法、装置和电子设备与流程

1.本技术属于计算机信息处理领域,具体涉及一种确定测试代码覆盖率的方法、装置和电子设备。


背景技术:

2.代码覆盖(code coverage)是软件测试中的一种度量,描述程序中源代码被测试的比例和程度,所得比例称为代码覆盖率。代码覆盖率是衡量测试质量的一个重要指标。在软件产品开发过程中,需要通过对产品代码覆盖率进行测试,以验证软件产品的质量。如果测试结果表明仅覆盖了代码的一小部分,那么无法保证软件产品质量是有保证的;相反,如果测试覆盖到了软件的绝大部分代码,才能够确保软件产品的测试是有效的。
3.目前,一般使用开源的覆盖率工具jacoco统计测试白盒覆盖率,获取应用代码的覆盖率情况,但现有技术中如果应用代码只修改了一部分,在每次覆盖率测试时仍需要全部重新测试所有应用,比较浪费时间;另外,目前对覆盖率的测试需要基于同一环境执行,不能分布式从多套环境中获取覆盖率数据,需要分别进行不同环境中的覆盖率测试,效率较低。
4.因此,目前亟需一种确定测试代码覆盖率的方法及系统,以提高获取测试覆盖率的效率。


技术实现要素:

5.本技术实施例的目的是提供一种确定测试代码覆盖率的方法、装置和电子设备,能够提高获取测试覆盖率的效率。
6.第一方面,提供一种确定测试代码覆盖率的方法,包括:获取覆盖测试任务的轨迹文件,所述覆盖测试任务包括对多个应用进行覆盖测试的任务,所述轨迹文件中包括所述多个应用分别在对应的服务器中进行覆盖测试得到的代码覆盖标记,一个应用对应至少一个服务器;确定所述多个应用中各目标应用对应的测试版本代码与各目标应用对应的基准版本代码之间的差异代码;根据所述多个应用中各目标应用对应的差异代码和所述轨迹文件,确定所述覆盖测试任务的测试覆盖率。
7.第二方面,提供一种确定测试代码覆盖率的装置,包括:
8.获取模块,获取覆盖测试任务的轨迹文件,所述覆盖测试任务包括对多个应用进行覆盖测试的任务,所述轨迹文件中包括所述多个应用分别在对应的服务器中进行覆盖测试得到的代码覆盖标记,一个应用对应至少一个服务器;
9.第一确定模块,确定所述多个应用中各目标应用对应的测试版本代码与各目标应用对应的基准版本代码之间的差异代码;
10.第二确定模块,根据所述多个应用中各目标应用对应的差异代码和所述轨迹文件,确定所述覆盖测试任务的测试覆盖率。
11.应理解,该用于确定测试代码覆盖率的装置可以执行如第一方面所述的方法的步
骤。
12.第三方面,本技术实施例提供了一种电子设备,该电子设备包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如第一方面所述的方法的步骤。
13.第四方面,本技术实施例提供了一种可读存储介质,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如第一方面所述的方法的步骤。
14.本技术提出了一种确定测试代码覆盖率的方法、装置和电子设备,通过获取对测试版本代码与基准版本代码之间的差异代码,并统计差异代码的测试覆盖率,针对性地对差异代码进行测试覆盖率统计,从而提高了获取测试代码覆盖率的效率。
附图说明
15.图1示出了本技术一个实施例确定测试代码覆盖率的方法流程图。
16.图2示出了本技术另一个实施例的测试代码覆盖率的方法流程图。
17.图3提供了本技术一个实施例的用于测试代码覆盖率的系统的示意性结构图。
18.图4提供了本技术一个实施例提供的一种电子设备的示意性结构图。
具体实施方式
19.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员获得的所有其他实施例,都属于本技术保护的范围。
20.本技术的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。
21.下面结合附图,通过具体的实施例及其应用场景对本技术实施例提供的测试覆盖率的方法及系统进行详细地说明。
22.应理解,在本技术各实施例中提到的覆盖率或测试覆盖率,均指白盒测试覆盖率,后续不再赘述。
23.图1示出了本技术一个实施例确定测试代码覆盖率的方法流程图,该方法的执行主体为用于确定测试代码覆盖率的装置,例如可以为测试工具平台所在的服务器,或者是测试覆盖率的服务,等等。如图1所示,该方法包括:
24.s110,获取覆盖测试任务的轨迹文件,其中,所述覆盖测试任务包括对多个应用进行覆盖测试的任务,所述轨迹文件中包括所述多个应用分别在对应的服务器中进行覆盖测试得到的代码覆盖标记,一个应用对应至少一个服务器。
25.应理解,在本技术实施例中,每个应用可配置一个或多个服务器,不同的服务器中的测试环境可以相同,也可以不同。例如,对应用a配置了服务器b和服务器c,其中,服务器b可部署有运行环境d,服务器c可部署运行环境d,也可部署运行环境e。
26.可选地,所述多个应用中目标应用的代码覆盖标记包括目标应用的加入的字节码增强技术所存储的执行信息数据,步骤s110具体可实现为:
27.获取所述多个应用中目标应用的端口信息和目标应用所属服务器的地址信息;
28.根据所述多个应用中各目标应用的端口信息和各目标应用对应的服务器的地址信息,分别建立与所述多个应用中各目标应用的长连接;
29.分别通过所述多个应用中各目标应用对应的长连接,获取所述多个应用中各目标应用加入的字节码增强技术所存储的执行信息数据;
30.根据所述多个应用中各目标应用的加入的字节码增强技术所存储的执行信息数据,生成所述轨迹文件。
31.下面以开源测试工具jacoco为例对本技术实施例获取轨迹文件的过程进行解释说明。
32.在本技术实施例中,测试覆盖率服务在查询到覆盖率测试任务对应的环境配置信息后,可根据应用的端口号和应用对应的服务器的ip地址,连接到服务器。具体地,可利用定制化的jaocococli.jar的dump命令同时创建多个socket连接各服务器中应用的端口的jacocoagent,然后通过socket读取应用中加入的字节码增强技术(executiondatastore)所存储的执行信息数据(executiondata),并将读取到的数据写出到一个.exec文件中,形成轨迹文件。
33.本技术实施例中,通过定制化的jaocococli.jar,同时创建多个socket连接,合并生成一个.exec轨迹文件存储到服务器,从而解决了无法分布式收集同一应用在多个环境的执行数据的问题。
34.当然,应理解,在步骤s110之前,还需要进行相关配置。在本技术实施例中,用户可通过测试工具集成平台页面,进入覆盖率工具页面,调用覆盖率服务创建覆盖率测试任务。此时,用户可查询测试工具集成平台是否有维护了编译过代码的环境信息。如果没有,则在测试工具集成平台的页面中配置环境信息,测试工具集成平台上增加的环境配置信息会同步到测试覆盖率服务中。一般来说,在环境配置信息中,可包括每个应用的测试环境的配置信息,即每个应用对应的端口号和应用对应的服务器的ip地址。一个应用一般可对应于一个或多个服务器。
35.还是以开源测试工具jacoco为例,可通过jenkins一键部署执行脚本将jacocoagent.jar放入到测试覆盖任务的多个应用对应的测试环境中,并且将jacocoagent批量增加到各应用对应的jvm配置信息中。具体地,jenkins可执行shell脚本,脚本中将jacocoagent.jar包上传到对应的环境并修改应用的jvm配置信息,在jvm信息中增加-javaagent指定jacocoagent.jar路径,并且设置当前应用的网络地址和端口。本技术实施例中,通过jenkins和测试工具集成平台页面的配合,让测试使用和接入本方案非常简单易用,且不管是金融云还是物理机都适用。
36.此外,应理解,在通过所述多个应用中的任一个目标应用对应的长链接,获取目标应用的加入的字节码增强技术所存储的执行信息数据之前,所述方法还包括:向所述多个应用中的目标应用对应的服务器上传目标应用对应的覆盖率工具包,其中,目标应用对应的覆盖率工具包用于对目标应用进行覆盖率测试。
37.s120,确定所述多个应用中各目标应用对应的测试版本代码与各目标应用对应的
基准版本代码之间的差异代码。
38.可选地,步骤s120可包括:使用版本差异工具对所述多个目标应用的测试版本代码与所述目标应用的基准版本代码进行比较,以生成各所述目标应用对应的差异数组,所述差异数组中存储目标应用的测试版本代码与基准版本代码之间的差异代码对应的差异代码标识和差异类型。
39.以开源测试工具jacoco为例,可通过jgit工具将测试版本代码和基准版本代码2个版本代码clone到测试工具集成平台服务器,并使用版本差异工具如diff工具等获取差异数组diffentry,判断当diffentry数组中存储的对象的差异类型changetype的值为add类型或modify类型时,表示当前差异代码有变更,并可将变更的差异代码的标识和差异类型(add或modify)组装为一个特定的字符串,然后存储到指定数据库。其中,add表示测试版本代码相对于基准版本代码的新增代码,modify表示测试版本代码相对于基准版本代码的修改代码。
40.当然,应理解,在记录差异代码时,可根据实际的代码粒度需求,确定差异代码标识。可选地,差异代码标识包括差异代码对应的行标识,或者,差异代码标识包括差异代码对应的方法标识,或者,差异代码标识包括差异代码对应的类标识。当然,也不排除其他级别的代码粒度的可能性,本技术实施例不再赘述。
41.s130,根据所述多个应用中各目标应用对应的差异代码和所述轨迹文件,确定所述覆盖测试任务的测试覆盖率。
42.应理解,在本技术实施例中,覆盖测试任务的测试覆盖率可以是增量测试覆盖率,也可以是全量测试覆盖率。当然,应理解,不管覆盖测试任务的测试覆盖率是增量测试覆盖率还是全量测试覆盖率,步骤s130中必然都包含确定增量测试覆盖率的步骤。
43.可选地,当覆盖测试任务的测试覆盖率是增量测试覆盖率时,该步骤s130可包括:根据所述多个应用中目标应用对应的差异代码,以及所述轨迹文件中目标应用对应的测试代码标记,确定目标应用的测试版本代码相对于基准版本代码的增量测试覆盖率。
44.或者,可选地,当覆盖测试任务的测试覆盖率是全量测试覆盖率时,根据所述多个应用中目标应用对应的差异代码,以及所述轨迹文件中目标应用对应的测试代码标记,确定目标应用的测试版本代码相对于基准版本代码的增量测试覆盖率;
45.根据所述多个应用中各目标应用的增量测试覆盖率及各目标应用的基准版本代码的全量测试覆盖率,确定根据所述多个应用中各目标应用的测试版本代码的全量测试覆盖率。
46.当然,应理解,在得到目标应用的测试版本代码的全量测试覆盖率后,该方法还可包括:将目标应用的测试版本代码的全量测试覆盖率存储到指定数据库,并将目标应用的测试版本代码作为目标应用下一次测试的基准版本代码。
47.也就是说,每次执行完测试任务后,将该测试任务的测试版本代码和测试覆盖率都进行存储记录。
48.本技术实施例中,可以把应用对应的历史测试的测试覆盖率存储在数据库,每次新增自动化脚本或者测试动作,可以将前一个测试版本代码作为基准版本代码,通过获取当前测试版本代码相对于基准版本代码的差异代码的增量测试覆盖率,在历史覆盖率的基础上进行叠加,这样可以快速高效地获取现有代码的全量覆盖率。
49.应理解,在确定目标应用的测试版本代码相对于基准版本代码的增量测试覆盖率时,必然需要对差异代码在轨迹文件中对应的测试代码标记进行分析统计。本技术实施例中,目标应用的差异数组可携带目标应用的测试版本代码相对于基准版本代码的差异代码标识和差异类型,以及目标应用在轨迹文件中对应的测试代码标记可携带有执行信息数据。根据目标应用的差异数组和目标应用在轨迹文件中的执行信息数据,可以得到目标应用的差异代码对应的增量测试覆盖率。
50.可选地,根据所述多个应用中目标应用对应的差异代码,以及所述轨迹文件中目标应用对应的测试代码标记,确定目标应用的测试版本代码相对于基准版本代码的增量测试覆盖率,具体可包括:
51.将目标应用对应的差异数组中差异类型表示代码修改或代码添加的差异代码标识注入所述目标应用的测试覆盖率应用包;
52.根据所述目标应用的测试覆盖率应用包对所述轨迹文件中目标应用对应的测试代码标记进行分析处理,以根据注入所述目标应用的测试覆盖率应用包的差异代码标识在所述轨迹文件中的覆盖执行信息确定目标应用的测试版本代码相对于基准版本代码的增量测试覆盖率。
53.还是以开源的测试工具jacoco为例,在根据轨迹文件生成测试报告jacoco.report时,具体实现可如下所示:
54.通过对jacoco.cli增加diff,option命令,将步骤s120中得到的差异数组的内容按照预设字符串拼接规则组成字符串,追加到命令入参中。实现类可将传入的特定格式的字符串解析成一个hashmap,并通过轨迹文件的执行信息中的classname、methodname等代码标识同hashmap比对,以确定是否为差异代码的执行信息。此外,可在jacoco.core的visitmethod分析方法,增加调用方法是否不同的判断,当方法不存在改动将methodprobesvisitor设为empty_method_probes_visitor,这样在jacoco.report中生成html的时候就不会对不存在改动的方法做标记。
55.当然,应理解,测试覆盖率服务将html覆盖率报告生成tomcat请求页面,将地址和任务状态存储到数据库中。此外,功能测试和自动化测试执行过程中,同步在工具集成平台页面可以查看执行结果和白盒覆盖率报告;覆盖率服务中的任务执行器,可按多线程的方式定时重复调用循环逻辑完成结果和报告的同步;同时,工具集成平台覆盖率列表实时更新任务信息显示。
56.本技术实施例中,通过获取测试覆盖任务中的多个应用的测试代码版本在不同服务器中的测试结果形成的轨迹文件,并获取各应用的测试代码版本和基准代码版本之间的差异代码,然后根据各应用的测试代码版本和基准代码版本之间的差异代码和该轨迹文件进行统计分析,从而得到测试覆盖任务的测试覆盖率,能够针对性地对差异代码进行测试覆盖率统计,从而提高了获取测试代码覆盖率的效率。
57.此外,本技术实施例的方法,能够同时获取多个应用在不同服务器的测试结果以形成轨迹文件,从而能够在一个覆盖率测试任务中同时支持多应用多环境地进行覆盖率测试,也大大提高了测试效率。
58.下面结合图2对本技术提出的方法进行进一步地介绍,如图2所示,包括:
59.步骤201,创建任务。
60.用户向测试覆盖率系统发起测试任务的创建过程。这个测试任务指示需要对存在于n个服务器上的同一个待测应用或同一项目中的多个待测应用进行代码覆盖率测试,上述n个服务器也就是对图中示出测试服务器下的的测试环境a、测试环境b
……
和测试环境n;用户提交地测试任务也包括对应的测试代码。
61.工具集成平台在收到用户的测试任务后,开源软件项目jenkins会通过一键部署,将覆盖率测试工具包jacocoagent.jar放入到多套对应的测试环境中(即放入上述n个服务器中),并且将jacocoagent.jar中的参数jacocoagent批量增加到上述m个应用每个应用的java虚拟机jvm配置信息中,该jacocoagent用户记录覆盖率测试工具在每个应用上的测试代码标记。
62.步骤202,查询执行环境。
63.系统在收到用户的测试任务后,会向测试服务查询系统本地环境信息,即各个应用是否配置了测试任务相关的服务器的ip地址信息以及服务器上待测应用的端口port信息。
64.步骤203,返回测试环境信息。
65.测试服务向工具集成平台返回测试环境信息,如果该测试任务的环境信息配置已经配置,则可以执行步骤204,创建测试任务,继续执行覆盖率测试,否则,需要将相应环境信息配置于系统。
66.步骤205,执行测试用例。
67.在测试服务器上执行测试用例,每个服务器上待测任务相关的应用都将执行测试用例,具体地,使用覆盖率测试工具包jacocoagent.jar进行每个应用的覆盖率测试,并将每个应用的测试代码标记存储在相应的参数jacocoagent中。
68.步骤206,查询历史任务信息。
69.系统会根据待测任务从数据库中拉取存储的历史版本代码和历史版本代码对应地覆盖率测试报告,并将历史版本代码作为基准版本代码。应理解,当存在多个历史版本代码时,一般选择最近的一个作为基准版本代码。当然,也可根据实际需要,选择合适的历史版本代码作为基准版本代码。
70.步骤207,将基准版本代码和测试版本代码进行比较,获得差异代码。
71.以开源测试工具jacoco为例,可通过jgit工具将测试版本代码和基准版本代码2个版本代码clone到测试工具集成平台服务器,并使用版本差异工具如diff工具等获取差异数组diffentry,判断当diffentry数组中存储的对象的差异类型changetype的值为add类型或modify类型时,表示当前差异代码有变更,并可将变更的差异代码的标识和差异类型(add或modify)组装为一个特定的字符串,然后存储到指定数据库。其中,add表示测试版本代码相对于基准版本代码的新增代码,modify表示测试版本代码相对于基准版本代码的修改代码。
72.步骤208,连接多个socket。
73.根据每个应用的端口信息和所述每个应用对应的服务器的地址信息,建立与每个应用的套接字(socket)连接,也就是建立多个socket连接。
74.步骤209,读取每个应用的覆盖率信息,生成轨迹文件.exec。
75.具体地,可利用定制化的jaocococli.jar的dump命令同时创建多个socket连接各
服务器中应用的端口的jacocoagent,然后通过socket读取应用中加入的字节码增强技术(executiondatastore)所存储的执行信息数据(executiondata),并将读取到的数据写出到一个.exec文件中,形成轨迹文件。
76.步骤210,根据获得的轨迹文件和差异代码生成覆盖率报告。
77.具体地,使用差异代码过滤轨迹文件,也就是仅需要统计轨迹文件中差异代码部分对应的测试代码标记,生成差异代码部分的覆盖率并生成覆盖率报告,如果需要待测任务的全量的覆盖率报告,则结合基准版本代码的覆盖率报告,生成待测任务的全量覆盖率报告。
78.还是以开源的测试工具jacoco为例,可通过对jacoco.cli增加diff,option命令,将版本差异工具得到的差异数组的内容按照预设字符串拼接规则组成字符串,追加到命令入参中。实现类可将传入的特定格式的字符串解析成一个hashmap,并通过轨迹文件的执行信息中的classname、methodname等代码标识同hashmap比对,以确定是否为差异代码的执行信息。此外,可在jacoco.core的visitmethod分析方法,增加调用方法是否不同的判断,当方法不存在改动将methodprobesvisitor设为empty_method_probes_visitor,这样在jacoco.report中生成html的时候就不会对不存在改动的方法做标记。
79.步骤211,存储任务信息。
80.在数据库中存储待测任务对应的代码,并存储相应的测试覆盖率报告。
81.步骤212,返回覆盖率测试结果。
82.应理解,上述测试服务,工具集成平台和数据库均属于测试覆盖率系统的一部分,可以位于同一台服务器,也可以分布于不同的服务器,本技术不做限定。
83.图3示出了本技术一个用于确定测试代码覆盖率的装置的示意性结构图,如图3所示,该装置300包括:
84.获取模块310,获取覆盖测试任务的轨迹文件,所述覆盖测试任务包括对多个应用进行覆盖测试的任务,所述轨迹文件中包括所述多个应用分别在对应的服务器中进行覆盖测试得到的代码覆盖标记,一个应用对应至少一个服务器;
85.第一确定模块320,确定所述多个应用中各目标应用对应的测试版本代码与各目标应用对应的基准版本代码之间的差异代码;
86.第二确定模块330,根据所述多个应用中各目标应用对应的差异代码和所述轨迹文件,确定所述覆盖测试任务的测试覆盖率。
87.进一步地,获取模块310可包括:
88.第一获取子模块,获取所述多个应用中目标应用的端口信息和目标应用所属服务器的地址信息;
89.长连接建立子模块,根据所述多个应用中各目标应用的端口信息和各目标应用对应的服务器的地址信息,分别建立与所述多个应用中各目标应用的长连接;
90.第二获取子模块,分别通过所述多个应用中各目标应用对应的长连接,获取所述多个应用中各目标应用加入的字节码增强技术所存储的执行信息数据;
91.生成子模块,根据所述多个应用中各目标应用的加入的字节码增强技术所存储的执行信息数据,生成所述轨迹文件。
92.本发明实施例提供的确定测试代码覆盖率的装置能够实现上述图1、图2所示方法
实施例中的各个过程,为避免重复,这里不再赘述。
93.图4为本技术一个实施例提供的一种电子设备的示意性结构图。请参考图4,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(random-access memory,ram),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
94.处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是isa(industry standard architecture,工业标准体系结构)总线、pci(peripheral component interconnect,外设部件互连标准)总线或eisa(extended industry standard architecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
95.存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
96.处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成数据采集装置。处理器,执行存储器所存放的程序,并具体用于执行图1至图2实施例提供的方法。
97.本发明实施例提供的电子设备,能够实现上消息处理方法对应的实施例中的各个过程,为避免重复,这里不再赘述。
98.需要说明的是,本发明实施例提供的电子设备与本发明实施例提供的方法基于同一发明构思,实现相同的有益效果,因此该实施例的具体实施可以参见前述网络资源的配置方法的实施和有益效果,重复之处不再赘述。
99.本技术实施例还提供一种可读存储介质,所述可读存储介质上存储有程序或指令,该程序或指令被处理器执行时实现上述图1至图2实施例提供的方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
100.本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
101.本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
102.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或
多个方框中指定的功能。
103.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
104.在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
105.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
106.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
107.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
108.本领域技术人员应明白,本技术的实施例可提供为方法、系统或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
109.以上所述仅为本技术的实施例而已,并不用于限制本技术。对于本领域技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本技术的权利要求范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1