覆盖率检测方法、装置和设备与流程

文档序号:12597023阅读:331来源:国知局
覆盖率检测方法、装置和设备与流程

本发明涉及计算机技术领域,尤其涉及一种覆盖率检测方法、装置和设备。



背景技术:

代码覆盖率测试,是软件测试过程中最重要的测试方法和测试效果衡量标准之一,覆盖率指的是源代码执行过程中被测试所覆盖到代码的比例和程度,通常用百分比表示。

对不同的编程语言来说,都有相应的检测代码覆盖率的方法。目前较主流的游戏服务器架构之一,是基于C++底层和Python上层构建实现。目前针对Python代码覆盖率的检测,最常用的是基于python类库coverage的技术方案。具体的是利用Python的sys模块中提供settrace函数,跟踪代码的执行情况,将覆盖率数据存储到Collector中的Stack中。每当开始采集时,Collector不断执行入栈操作,停止采集时,通过出栈操作即可获取已采集的覆盖率信息。

然而,在软件测试过程中,往往需要根据操作得到即时的结果反馈,通过覆盖率数据来查看测试操作的执行结果,采用上述测试方式进行覆盖率测试时,必须在开始测试之后,通过相应的命令行操作,来获取覆盖率的输出结果,导致实际测试过程中要不断地停止和开始,无法满足游戏服务器的实时覆盖率测试需要。



技术实现要素:

本发明实施例提供一种覆盖率检测方法、装置和设备,用于解决采用上述测试方式进行覆盖率测试时,必须在开始测试之后,通过相应的命令行操作,来获取覆盖率的输出结果,导致实际测试过程中要不断地停止和开始,无法满足游戏服务器的实时覆盖率测试需要的问题。

本发明第一方面提供一种覆盖率检测方法,包括:

实时接收服务器发送的程序执行数据;程序执行数据为服务器调用数据收集函数获取的服务器正在执行的文件的数据;

解析获取文件对应的源代码文件的总代码行数;

根据程序执行数据和总代码行数,计算获取文件当前的覆盖率。

进一步地,方法还包括:

显示文件当前的覆盖率。

可选的,程序执行数据包括服务器执行的文件被执行的代码行号,根据程序执行数据和总代码行数,计算获取文件当前的覆盖率,包括:

根据被执行的代码行号,获取文件中已执行代码的行数;

根据已执行代码的行数Le和总代码行数Lt,采用R=Le/Lt计算得到文件当前的覆盖率R。

可选的,解析获取文件对应的源代码文件的总代码行数,包括:

对源代码文件进行解析处理,剔除源代码文件中的空白行和注释行,得到源代码文件的总代码行数。

本发明第二方面提供一种覆盖率检测方法,包括:

在执行文件的程序代码的过程中,调用数据收集函数实时获取文件的程序执行数据;

将程序执行数据发送给覆盖率服务端,以使覆盖率服务端根据程序执行数据实时获取文件当前的覆盖率。

进一步地,方法还包括:

将程序执行数据进行存储;程序执行数据包括文件的文件名称和文件被执行的代码行号。

可选的,将程序执行数据进行存储,包括:

根据文件名称,检测本地是否存在与文件对应的程序执行数据;

若存在,则在本地不存在文件被执行的代码行号时,将文件被执行的代码行号存储在程序执行数据中;

否则,在本地增加以文件名称为索引的文件对应的程序执行数据。

本发明第三方面提供一种覆盖率检测装置,包括:

接收模块,用于实时接收服务器发送的程序执行数据;程序执行数据为服务器调用数据收集函数获取的服务器正在执行的文件的数据;

处理模块,用于解析获取文件对应的源代码文件的总代码行数;

处理模块还用于根据程序执行数据和总代码行数,计算获取文件当前的覆盖率。

进一步地,装置还包括:

显示模块,用于显示文件当前的覆盖率。

可选的,程序执行数据包括服务器执行的文件被执行的代码行号,处理模块具体用于:

根据被执行的代码行号,获取文件中已执行代码的行数;

根据已执行代码的行数Le和总代码行数Lt,采用R=Le/Lt计算得到文件当前的覆盖率R。

可选的,处理模块还具体用于:

对源代码文件进行解析处理,剔除源代码文件中的空白行和注释行,得到源代码文件的总代码行数。

本发明第四方面提供一种覆盖率检测装置,包括:

处理模块,用于在执行文件的程序代码的过程中,调用数据收集函数实时获取文件的程序执行数据;

发送模块,用于将程序执行数据发送给覆盖率服务端,以使覆盖率服务端根据程序执行数据实时获取文件当前的覆盖率。

进一步地,装置还包括:

存储模块,用于将程序执行数据进行存储;程序执行数据包括文件的文件名称和文件被执行的代码行号。

可选的,存储模块具体用于:

根据文件的文件名称,检测本地是否存在与文件对应的程序执行数据;

若存在,则在本地不存在文件被执行的代码行号时,将文件被执行的代码行号存储在程序执行数据中;

否则,在本地增加以文件名称为索引的文件对应的程序执行数据。

本发明第五方面提供一种服务器,包括:用于存储程序指令的存储器、用于控制程序指令执行的处理器以及接收器;

接收器用于实时接收服务器发送的程序执行数据;程序执行数据为服务器调用数据收集函数获取的服务器正在执行的文件的数据;

处理器用于:

解析获取文件对应的源代码文件的总代码行数;

根据程序执行数据和总代码行数,计算获取文件当前的覆盖率。

本发明第六方面提供一种服务器,包括:用于存储程序指令的存储器、用于控制程序指令执行的处理器以及发送器;

处理器用于在执行文件的程序代码的过程中,调用数据收集函数实时获取文件的程序执行数据;

发送器用于将程序执行数据发送给覆盖率服务端,以使覆盖率服务端根据程序执行数据实时获取文件当前的覆盖率。

本发明实施例提供的覆盖率检测方法、装置和设备,服务器向覆盖率检测端的服务器实时发送程序执行数据,然后覆盖率检测端的服务器实时接收执行端服务器发送的程序执行数据,并对正在执行的文件的源代码进行解析获取总代码行数,然后结合程序执行数据和总代码行数计算获取该文件当前的覆盖率,不需要额外增加命令,在测试过程中也不需要不断的停止和开始,通过实时接收服务器发送的文件数据,并对该文件数据进行分析处理,能够得到该服务器的实时覆盖率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。

图1为本发明实施例提供的覆盖率检测方法实例一的流程图;

图2为本发明实施例提供的覆盖率检测方法实例二的流程图;

图3为本发明实施例提供的覆盖率检测方法实例三的流程图;

图4为本发明实施例提供的覆盖率检测一实例的系统架构图;

图5为本发明实施例提供的覆盖率检测装置实施例一的结构示意图;

图6为本发明实施例提供的覆盖率检测装置实施例二的结构示意图;

图7为本发明实施例提供的覆盖率检测装置实施例三的结构示意图;

图8为本发明实施例提供的覆盖率检测装置实施例四的结构示意图;

图9为本发明实施例提供的服务器实施例一的结构示意图;

图10为本发明实施例提供的服务器实施例二的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

图1为本发明实施例提供的覆盖率检测方法实例一的流程图,如图1所示,该方案的执行主体为用于检测覆盖率的服务器,或者检测覆盖率的其他设备,该覆盖率检测方法的具体实现步骤为:

步骤S101,实时接收服务器发送的程序执行数据。

在本实施例中,程序执行数据为所述服务器调用数据收集函数获取的所述服务器正在执行的文件的数据。这里发送程序执行数据的服务器为执行该程序的服务器,例如:运行游戏程序的游戏服务器。

步骤S102,解析获取文件对应的源代码文件的总代码行数。

本方案中,检测覆盖率的服务器或者其他的设备对上述程序执行侧执行的程序的源文件进行解析处理,得到文件对应的源代码的行数,这里的行数不包括空格和注释行,即得到程序的总代码行数。

步骤S103,根据程序执行数据和总代码行数,计算获取文件当前的覆盖率。

在本步骤中,该程序执行数据至少包括能够确定程序已经执行行数的参数,例如:被执行的代码行号,或者已经执行的行数等。

检测覆盖率的服务器根据文件对应的程序执行数据进行处理得到当前已经执行代码的行数,然后根据已执行代码的行数和总代码行数,计算得到覆盖率。

该过程是实时进行的,检测覆盖率的装置(或服务器)实时接收程序执行端的服务器发送来的程序执行数据,按照上述方式进行处理,可以得到每个文件的实时覆盖率。

本实施例提供的覆盖率检测方法,服务器向覆盖率检测端的服务器实时发送程序执行数据,然后覆盖率检测端的服务器实时接收执行端服务器发送的程序执行数据,并对正在执行的文件的源代码进行解析获取总代码行数,然后结合程序执行数据和总代码行数计算获取该文件当前的覆盖率,不需要额外增加命令,在测试过程中也不需要不断的停止和开始,通过实时接收服务器发送的文件数据,并对该文件数据进行分析处理,能够得到该服务器的实时覆盖率。

图2为本发明实施例提供的覆盖率检测方法实例二的流程图,如图2所示,在上述实施例的基础上,提供该覆盖率检测的的具体实现方式:

步骤S201,实时接收服务器发送的程序执行数据。

在本步骤中,通过嵌入在服务器中的工具,实时获取服务器在文件执行过程中得到的程序执行数据,并向覆盖率检测端的设备返回,即在该覆盖率检测设备侧,需要实时接收文件运行的服务器发送的程序执行数据,该程序执行数据包括服务器执行的所述文件被执行的代码行号。

步骤S202,对源代码文件进行解析处理,剔除源代码文件中的空白行和注释行,得到源代码文件的总代码行数。

在本步骤中,覆盖率检测端的设备端接收到的数据中只有对某个文件的执行的相关数据,并没有该文件的送代码行数,因此该覆盖率检测端的设备需要对该文件的源代码文件进行解析,将其中注释行和空白行等无关程序实质的非代码行进行剔除,并统计得到该源代码文件的总代码行数。

步骤S203,根据被执行的代码行号,获取文件中已执行代码的行数。

根据前述步骤,覆盖率检测端的设备已经接收到了文件被执行的代码行号,则将执行过的代码行数作为已经执行代码的行数之和,例如:获取到的被执行的代码行号为50,则认为该文件的代码已经执行了50行,或者,数据显示某文件,第1,3-10,55行已经发生了执行事件,那么此时已执行代码行数的值应当为1+8+1=10行。根据该种方式得到文件中已经执行的代码行数。

步骤S204,根据已执行代码的行数Le和总代码行数Lt,采用R=Le/Lt计算得到文件当前的覆盖率R。

在本步骤中,通过前述步骤覆盖率检测端的设备完成覆盖率数据采集,得到了已执行的代码行数,以及该文件可执行的代码行总数。利用上述两个步骤获得的数据,在此处通过公式采用R=Le/Lt即可计算出当前文件的实时覆盖率R。其中,Le表示已执行代码的行数,Lt表示总代码行数。

步骤S205,显示文件当前的覆盖率。

该步骤S205为可选的步骤,并不是必须要执行的,在覆盖率检测端的设备,如果接收用户通过客户端或者前端发送的数据请求,或者预先配置了需要将得到的覆盖率进行显示,则可以通过显示器或者前端客户端将得到的覆盖率进行显示。

本实施例提供的覆盖率检测方法,通过实时接收服务器发送的文件数据,并对该文件数据进行分析处理,能够得到该服务器的实时覆盖率,不需要额外增加命令,在测试过程中也不需要不断的停止和开始。

图3为本发明实施例提供的覆盖率检测方法实例三的流程图;如图3所示,该方案的执行主体为文件运行端的服务器或者其他装置,该覆盖率检测方法的具体实现步骤为:

步骤S301,在执行文件的程序代码的过程中,调用数据收集函数实时获取文件的程序执行数据。

在本步骤中,文件运行端的服务器中嵌入实时收集执行数据的客户端,或者将该实时收集程序执行数据的客户端嵌入在文件的程序中,在运行文件的过程中,启动数据采集线程,实时获取该文件的程序执行数据。

步骤S302,将程序执行数据进行存储。

在本步骤中,该程序执行数据至少包括所述文件的文件名称和所述文件被执行的代码行号。文件运行端的服务器或者其他装置可以将收集的程序执行数据按照文件名称进行存储,当发生了新的代码执行事件之后,可以根据文件名称对该程序执行数据进行更新。

具体的,对程序执行数据进行存储的实现方式为:根据所述文件名称,检测本地是否存在与所述文件对应的程序执行数据;若存在,则在本地不存在所述文件被执行的代码行号时,将所述文件被执行的代码行号存储在所述程序执行数据中;若不存在,则在本地增加以所述文件名称为索引的所述文件对应的所述程序执行数据。

上述步骤S302为可选的步骤,并不一定要执行,文件运行端的服务器或者其他装置在收集到程序执行数据之后可以直接将其发送给覆盖率检测端的设备。

步骤S303,将程序执行数据发送给覆盖率服务端,以使覆盖率服务端根据程序执行数据实时获取文件当前的覆盖率。

文件运行端的服务器或者其他装置将获取到的程序执行数据实时发送给覆盖率服务端,以使覆盖率检测端的服务端(例如服务器)实时接收执行端服务器发送的程序执行数据,并对正在执行的文件的源代码进行解析获取总代码行数,然后结合程序执行数据和总代码行数计算获取该文件当前的覆盖率,不需要额外增加命令,在测试过程中也不需要不断的停止和开始,通过实时接收服务器发送的文件数据,并对该文件数据进行分析处理,能够得到该服务器的实时覆盖率。

在上述实施例一至实施例三的基础上,下面以覆盖率检测端为基于Twsited框架的覆盖率服务器、文件执行端为游戏服务器为例,对本发明覆盖率检测方法进行说明。

图4为本发明实施例提供的覆盖率检测一实例的系统架构图;如图4所示,该系统架构主要分为三个部分,图中下方,是本技术方案的核心覆盖率服务器,基于Twisted框架实现,主要模块是数据接收,处理,存储,读取和发送,主要功能是从游戏服务器收集覆盖率数据并做相应的处理和存储,然后根据前端的需求进行对应的数据的展示。

图中右上方,是本系统的测试对象-游戏服务器代码,本系统的采集客户端嵌入到所有待测试的游戏服务器代码中,并通过启动采集线程,数据采集,数据发送三个模块完成实时覆盖率数据的获取和发送给覆盖率服务器功能。

图中左上方,是覆盖率检测工具的前端部分,主要用于展示相应的覆盖率数据。

游戏服务器端(本系统的测试对象-游戏服务器代码):

用于检测程序执行数据的工具的客户端,用于嵌入到游戏服务器代码中,并获取实时的覆盖率相关的数据(也就是程序执行数据)后发送到覆盖率工具服务端,即上述的覆盖率服务器。数据收集功能由三个模块实现,分别是启动采集线程,数据收集,数据发送。

在游戏服务器启动时,同时启动采集线程(websocket连接到覆盖率服务器)并开始数据采集,具体数据采集过程如下:

首先,利用sys.settrace函数,获取当前被执行文件的文件名以及执行的代码行号,具体代码如下:

其中,通过python的frame(栈帧),可以获取文件名filename为frame.f_code.co_filename,以及当前跟踪到的被执行的代码行号lineno为frame.f_lineno。

然后,数据收集(代码中的collect函数)功能模块对数据进行收集。

如图4所示,进行数据收集时,将数据以字典(文件名为键,已执行过的代码行号为值)形式存储,当发生了新的代码执行事件后,通过sys.settrace获取到当前执行文件的名称和被执行的代码行号,接下来搜索数据中是否已有该文件名索引的值,如果没有,则添加该文件名;如果已有,则判断当前执行的代码行号是否已在数据中,没有则添加。

最后,游戏服务器侧的数据发送功能模块将上一步骤收集到的程序执行数据,按照指定时间间隔(例如1s)通过websocket线程,发送到覆盖率服务器即可。

覆盖率服务器端:

覆盖率工具服务端负责收集和处理数据,有如下功能:

首先,接收游戏服务器发送的程序执行数据数据,将接收到的数据,按照ip地址和游戏服务器名称,分别进行存储。

其次,进行数据处理,收集到的数据中,只有某文件被执行的代码行集合,但是没有总的代码行数。此时在覆盖率服务器侧,通过对源码文件进行解析,即排除注释行和空白行等非代码行,统计出代码行的总数。

最后,进行覆盖率计算,已知游戏服务器覆盖率计算公式为:其中,Rate表示覆盖率,lineexecuts表示当前文件中已经执行过的代码行数,linetotal表示当前文件的可执行代码行总数。

根据之前接收到的覆盖率数据,可以知道某个pyc文件,执行过的代码行数就是其传输过来的数据中,执行代码的行数之和。例如,数据显示某py文件,第1,3-10,55行已经发生了执行事件,那么此时已执行代码行数的值应当为1+8+1=10行。

通过游戏服务器的覆盖率数据采集,获得了lineexecute,也就是已执行的代码行数。通过本地源码的解析,获得了linetotal,也就是当前文件可执行的代码行总数。利用上述两个步骤获得的数据,在此处通过公式即可计算出当前文件的实时覆盖率。

最后,当前端有数据请求时,将计算出的实时覆盖率通过websocket发送到前端进行显示。

前端在收到覆盖率之后,可通过网页实时显示覆盖率情况。具体的网页中显示的内容包括:第一,游戏服务器(采集客户端)源码的目录结构,显示每个目录层级所对应的文件夹以及文件。第二,每个文件的实时代码覆盖率情况。

通过上述方案可以实时获取覆盖率数据,也可以同时对多个运行服务器或者程序运行客户端的覆盖率进行采集。

图5为本发明实施例提供的覆盖率检测装置实施例一的结构示意图,如图5所示,本实施例提供的覆盖率检测装置10包括:

接收模块11,用于实时接收服务器发送的程序执行数据;所述程序执行数据为所述服务器调用数据收集函数获取的所述服务器正在执行的文件的数据;

处理模块12,用于解析获取所述文件对应的源代码文件的总代码行数;

所述处理模块12还用于根据所述程序执行数据和所述总代码行数,计算获取所述文件当前的覆盖率。

本实施例提供的覆盖率检测装置,用于执行前述任一实施例提供的方法中覆盖率检测端的技术方案,其实现原理和技术效果类似,在此不再赘述。

在本发明覆盖率检测装置的实施例二中,图6为本发明实施例提供的覆盖率检测装置实施例二的结构示意图,如图6所示,在上述实施例一的基础上,该覆盖率检测装置10还包括:

显示模块13,用于显示所述文件当前的所述覆盖率。

在上述任一实施例的基础上,可选的,所述程序执行数据包括所述服务器执行的所述文件被执行的代码行号,所述处理模块12具体用于:

根据所述被执行的代码行号,获取所述文件中已执行代码的行数;

根据所述已执行代码的行数Le和所述总代码行数Lt,采用R=Le/Lt计算得到所述文件当前的覆盖率R。

可选的,所述处理模块12还具体用于:

对所述源代码文件进行解析处理,剔除所述源代码文件中的空白行和注释行,得到所述源代码文件的所述总代码行数。

本实施例提供的覆盖率检测装置,用来执行前述任一实施例提供的方法中覆盖率检测端的技术方案,其实现原理和技术效果类似,在此不再赘述。

图7为本发明实施例提供的覆盖率检测装置实施例三的结构示意图,如图7所示,该覆盖率检测装置20包括:

处理模块21,用于在执行文件的程序代码的过程中,调用数据收集函数实时获取所述文件的程序执行数据;

发送模块22,用于将所述程序执行数据发送给覆盖率服务端,以使所述覆盖率服务端根据所述程序执行数据实时获取所述文件当前的覆盖率。

本实施例提供的覆盖率检测装置,用来执行前述任一实施例提供的方法中程序运行侧的技术方案,其实现原理和技术效果类似,在此不再赘述。

图8为本发明实施例提供的覆盖率检测装置实施例四的结构示意图,如图8所示,该覆盖率检测装置20还包括:

存储模块23,用于将所述程序执行数据进行存储;所述程序执行数据包括所述文件的文件名称和所述文件被执行的代码行号。

在上述实施例三和实施例四的基础上,所述存储模块23具体用于:

根据所述文件的文件名称,检测本地是否存在与所述文件对应的程序执行数据;

若存在,则在本地不存在所述文件被执行的代码行号时,将所述文件被执行的代码行号存储在所述程序执行数据中;

否则,在本地增加以所述文件名称为索引的所述文件对应的所述程序执行数据。

本实施例提供的覆盖率检测装置,用来执行前述任一实施例提供的方法中程序运行侧的技术方案,其实现原理和技术效果类似,在此不再赘述。

图9为本发明实施例提供的服务器实施例一的结构示意图,如图9所示,该服务器可以被具体实现为:存储有程序指令的存储器31、接收器32以及用于控制程序指令执行的处理器33;

所述接收器32用于实时接收服务器发送的程序执行数据;所述程序执行数据为所述服务器调用数据收集函数获取的所述服务器正在执行的文件的数据;

所述处理器33用于:

解析获取所述文件对应的源代码文件的总代码行数;

根据所述程序执行数据和所述总代码行数,计算获取所述文件当前的覆盖率。

可选的,还可以包括显示器,用于显示所述文件当前的所述覆盖率。

可选的,所述程序执行数据包括所述服务器执行的所述文件被执行的代码行号,所述处理器33具体用于:

根据所述被执行的代码行号,获取所述文件中已执行代码的行数;

根据所述已执行代码的行数Le和所述总代码行数Lt,采用R=Le/Lt计算得到所述文件当前的覆盖率R。

可选的,所述处理器33还具体用于:

对所述源代码文件进行解析处理,剔除所述源代码文件中的空白行和注释行,得到所述源代码文件的所述总代码行数。

本实施例提供的服务器为覆盖检测端的服务器,用来执行前述任一实施例提供的方法中覆盖率检测端的技术方案,其实现原理和技术效果类似,在此不再赘述。

图10为本发明实施例提供的服务器实施例二的结构示意图,如图10所示,该服务器可以被具体实现为:用于存储程序指令的存储器41、用于控制程序指令执行的处理器42以及发送器43;

所述处理器42用于在执行文件的程序代码的过程中,调用数据收集函数实时获取所述文件的程序执行数据;

所述发送器43用于将所述程序执行数据发送给覆盖率服务端,以使所述覆盖率服务端根据所述程序执行数据实时获取所述文件当前的覆盖率。

可选的,存储器41用于将所述程序执行数据进行存储;所述程序执行数据包括所述文件的文件名称和所述文件被执行的代码行号。

可选的,所述存储器41具体用于:

根据所述文件的文件名称,检测本地是否存在与所述文件对应的程序执行数据;

若存在,则在本地不存在所述文件被执行的代码行号时,将所述文件被执行的代码行号存储在所述程序执行数据中;

否则,在本地增加以所述文件名称为索引的所述文件对应的所述程序执行数据。

本实施例提供的服务器为程序运行服务器,用来执行前述任一实施例提供的方法中程序运行侧,例如游戏服务器的技术方案,其实现原理和技术效果类似,在此不再赘述。

在上述任一服务器的实施例中,应理解,处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application Specific Integrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。

本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:只读存储器(英文:read-only memory,缩写:ROM)、RAM、快闪存储器、硬盘、固态硬盘、磁带(英文:magnetic tape)、软盘(英文:floppy disk)、光盘(英文:optical disc)及其任意组合。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

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