发明内容
本申请针对现有的方式的缺点,提出一种测试方法、装置、设备、计算机可读存储介质及计算机程序产品,用于解决如何提升定位效率的问题。
第一方面,本申请提供了一种测试方法,包括:
获取针对待测对象的测试数据对应的反汇编文件和原始数据集;
根据所述反汇编文件和所述原始数据集,确定所述待测对象对应的函数调用树;
根据所述待测对象对应的函数调用树,对所述待测对象存在的缺陷进行调试。
在一个实施例中,获取针对待测对象的测试数据对应的反汇编文件和原始数据集,包括:
基于测试数据,对待测对象进行测试,并对待测对象的测试过程进行监控,得到原始数据集,原始数据集包括跟踪日志;
将测试数据进行反汇编处理,得到测试数据对应的反汇编文件。
在一个实施例中,根据反汇编文件和原始数据集,确定待测对象对应的函数调用树,包括:
对反汇编文件进行解析,得到程序计数器的起始值;
基于程序计数器的起始值和原始数据集,得到原始数据集中各函数之间的调用关系;
将各函数之间的调用关系进行格式化处理,得到待测对象对应的函数调用树,函数调用树包括各函数之间的调用关系。
在一个实施例中,基于程序计数器的起始值和原始数据集,得到原始数据集中各函数之间的调用关系,包括:
基于程序计数器的起始值和原始数据集,得到多个程序计数器的第一值,每一个第一值用于表征存储原始数据集中一个函数的内存地址;
将每一个第一值分别反标到相应的函数,得到原始数据集中各函数之间的调用关系。
在一个实施例中,函数调用树包括原始数据集中各函数之间的调用关系、用于反标仿真波形的信息、用于日志查找的信息中的至少一项;
根据待测对象对应的函数调用树,对待测对象存在的缺陷进行调试,包括:
根据各函数之间的调用关系、用于反标仿真波形的信息、用于日志查找的信息中的至少一项,对待测对象存在的缺陷进行调试。
在一个实施例中,待测对象包括被测器件DUT。
第二方面,本申请提供了一种测试装置,包括:
第一处理模块,用于获取针对待测对象的测试数据对应的反汇编文件和原始数据集;
第二处理模块,用于根据反汇编文件和原始数据集,确定待测对象对应的函数调用树;
第三处理模块,用于根据待测对象对应的函数调用树,对待测对象存在的缺陷进行调试。
第三方面,本申请提供了一种电子设备,包括:处理器、存储器和总线;
总线,用于连接处理器和存储器;
存储器,用于存储操作指令;
处理器,用于通过调用操作指令,执行本申请第一方面的测试方法。
第四方面,本申请提供了一种计算机可读存储介质,存储有计算机程序,计算机程序被用于执行本申请第一方面的测试方法。
第五方面,本申请提供了一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时实现本申请第一方面中测试方法的步骤。
本申请实施例提供的技术方案,至少具有如下有益效果:
获取针对待测对象的测试数据对应的反汇编文件和原始数据集;根据反汇编文件和原始数据集,确定待测对象对应的函数调用树;根据待测对象对应的函数调用树,对待测对象存在的缺陷进行调试。如此,通过将仿真环境中产出指令执行的原始数据集结合反汇编文件,通过文件分析,生成待测对象对应的函数调用树,函数调用树包括了在整个程序执行过程中的函数调用流,函数调用树可以方便测试用例编写者快速定位程序执行的异常点,并提供详尽的数据信息,方便在原始数据集中进行定位,从而有效的缩小针对待测对象缺陷的定位范围,从而提高了定位效率。
具体实施方式
下面结合本申请中的附图描述本申请的实施例。应理解,下面结合附图所阐述的实施方式,是用于解释本申请实施例的技术方案的示例性描述,对本申请实施例的技术方案不构成限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请实施例所使用的术语“包括”以及“包含”是指相应特征可以实现为所呈现的特征、信息、数据、步骤、操作、元件和/或组件,但不排除实现为本技术领域所支持其他特征、信息、数据、步骤、操作、元件、组件和/或它们的组合等。应该理解,当我们称一个元件被“连接”或“耦接”到另一元件时,该一个元件可以直接连接或耦接到另一元件,也可以指该一个元件和另一元件通过中间元件建立连接关系。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的术语“和/或”指示该术语所限定的项目中的至少一个,例如“A和/或B”指示实现为“A”,或者实现为“B”,或者实现为“A和B”。
发明人研究发现:在CPU的前仿真验证环境,对较大规模、较抽象层次的测试用例没有有效的定位手段,无法快速找到出问题点,并进一步定位是测试自身或是CPU设计出问题,特别是对较高层次的测试用例,需要从程序指令流(flow)上定位是否运行出错;对上百万行指令级别的测试用例,手动定位非常耗时低效。
基于此,为了解决现有CPU测试中存在的问题中的至少一个,更好的满足CPU测试的需求,本申请提供了一种测试方法,基于该方法可以有效的缩小针对CPU的问题点的定位范围,从而提高了定位效率。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
为了更好的理解及说明本申请实施例的方案,下面对本申请实施例中所涉及到的一些技术用语进行简单说明。
前仿真:在设计实现前,对所创建的逻辑进行的验证其功能是否正确的过程,布局布线以前的仿真为功能仿真,前仿真也就是通常所说的功能仿真。
Bin文件:Bin文件是一个没有内存修改或重定位的纯二进制文件,很可能Bin文件有明确的指令要加载到特定的内存地址。
ELF文件:ELF文件是可执行的可链接格式,ELF文件由一个符号查找表和可重定位表组成,ELF文件可以由内核加载到任何内存地址,并且自动地将所有使用的符号调整为与该内存地址的偏移量被装入。通常,ELF文件有很多部分,例如'data','text','bss'等。
反汇编(Disassembly):反汇编是将目标代码转为汇编代码的过程。
PC:PC(Program Counter,程序计数器)是CPU中用于存放下一条指令地址的寄存器。程序执行时,PC的初值为程序第一条指令的地址,在顺序执行程序时,控制器首先按PC所指出的指令地址从内存中取出一条指令,然后分析和执行该指令,同时将PC的值加1指向下一条要执行的指令。
跟踪日志(trace log):跟踪(trace),是用户用工具对程序按照一定条件进行的一个运行监控说明;日志(log),是开发者开发的时候,按照开发者对程序的理解,对程序做的一个程序运行情况说明。
自动化测试:一般是指软件测试的自动化,软件测试就是在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。
自动化测试流程包括:自动化测试的切入点、可行性分析、抽样分析、测试需求分析、制定测试计划、自动化测试设计、测试用例设计、测试脚本开发、自动化测试数据设计、自动化测试执行、自动化测试结果分析、自动化测试脚本维护等。
c/asm程序:C语言程序或汇编语言asm程序。
DUT:DUT(Device Under Test,被测器件)也称为被测设备(EUT)和被测单元(UUT),是在首次制造时或在其生命周期后期进行测试的制造产品,作为正在进行的功能测试和校准的一部分检查。这可以包括修复后的测试,以确定产品是否按照原始产品规格执行。
下面以具体的实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
本申请实施例所提供的方案可以适用于芯片测试领域中任意需要CPU测试的应用场景。
为了更好的理解本申请实施例提供的方案,下面结合具体的一个应用场景对该方案进行说明。
在一个实施例中,图1中示出了本申请实施例所适用的一种测试系统的架构示意图,可以理解的是,本申请实施例所提供的测试方法可以适用于但不限于应用于如图1所示的应用场景中。
本示例中,如图1所示,该示例中的测试系统的架构可以包括但不限于测试平台10和服务器20,其中,测试平台10上放置待测对象30,待测对象例如CPU。测试平台10和服务器20之间可以通过网络进行交互。测试平台10生成原始数据集,原始数据集例如跟踪日志(trace log);服务器20获取针对待测对象的测试数据对应的反汇编文件和原始数据集;服务器20根据反汇编文件和原始数据集,确定待测对象对应的函数调用树;服务器20根据待测对象对应的函数调用树(function call stack),对待测对象存在的缺陷进行调试。
可理解,上述仅为一种示例,本实施例在此不作限定。
其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器或服务器集群。上述网络可以包括但不限于:有线网络,无线网络,其中,该有线网络包括:局域网、城域网和广域网,该无线网络包括:蓝牙、Wi-Fi及其他实现无线通信的网络。具体也可基于实际应用场景需求确定,在此不作限定。
参见图2,图2示出了本申请实施例提供的一种测试方法的流程示意图,其中,该方法可以由任一电子设备执行,如可以是服务器,作为一可选实施方式,该方法可以由服务器执行,为了描述方便,在下文的一些可选实施例的描述中,将以服务器作为该方法执行主体为例进行说明。如图2所示,本申请实施例提供的测试方法包括如下步骤:
S201,获取针对待测对象的测试数据对应的反汇编文件和原始数据集。
具体地,待测对象可以为芯片,例如CPU。测试数据可以为测试程序,例如c/asm程序,将c/asm程序进行反汇编(Disassembly),可以得到反汇编文件。将测试程序转换为Bin文件或ELF文件,将Bin文件或ELF文件输入至测试平台,例如CPU测试平台,得到仿真输出结果,仿真输出结果包括原始数据集,原始数据集包括跟踪日志(trace log)。
S202,根据所述反汇编文件和所述原始数据集,确定所述待测对象对应的函数调用树。
具体地,函数调用树包括原始数据集中各函数之间的调用关系,即函数调用树包括跟踪日志(trace log)中各函数之间的调用关系。
S203,根据所述待测对象对应的函数调用树,对所述待测对象存在的缺陷进行调试。
具体地,通过在芯片验证仿真环境下,输出函数调用树,为调试大型程序提供可能,能够快速在程序意图与执行函数流(flow)的层次上判断程序执行的问题,并快速找到问题点,反标到仿真波形,从而提高待测对象的调试效率。
本申请实施例中,获取针对待测对象的测试数据对应的反汇编文件和原始数据集;根据反汇编文件和原始数据集,确定待测对象对应的函数调用树;根据待测对象对应的函数调用树,对待测对象存在的缺陷进行调试。如此,通过将仿真环境中产出指令执行的原始数据集结合反汇编文件,通过文件分析,生成待测对象对应的函数调用树,函数调用树包括了在整个程序执行过程中的函数调用流,函数调用树可以方便测试用例编写者快速定位程序执行的异常点,并提供详尽的数据信息,方便在原始数据集中进行定位,从而有效的缩小针对待测对象缺陷的定位范围,从而提高了定位效率。
在一个实施例中,获取针对待测对象的测试数据对应的反汇编文件和原始数据集,包括:
基于测试数据,对待测对象进行测试,并对待测对象的测试过程进行监控,得到原始数据集,原始数据集包括跟踪日志;
将测试数据进行反汇编处理,得到测试数据对应的反汇编文件。
在一个实施例中,测试数据可以为测试激励,将测试激励输入至待测对象,对待测对象进行测试;在测试过程中,通过trace生成模块监控待测对象的内部信号,生成原始数据集;其中,待测对象可以为CPU,原始数据集可以为跟踪日志trace log。可以通过自动化编译系统将测试数据进行反汇编处理,得到测试数据对应的反汇编文件。
在一个实施例中,根据反汇编文件和原始数据集,确定待测对象对应的函数调用树,包括:
对反汇编文件进行解析,得到程序计数器的起始值;
基于程序计数器的起始值和原始数据集,得到原始数据集中各函数之间的调用关系;
将各函数之间的调用关系进行格式化处理,得到待测对象对应的函数调用树,函数调用树包括各函数之间的调用关系。
在一个实施例中,通过自动化测试流程,触发数据分析模块对反汇编文件进行解析,得到程序计数器的起始值;数据分析模块基于程序计数器的起始值和原始数据集,得到原始数据集中各函数之间的调用关系;数据分析模块将各函数之间的调用关系进行格式化处理,得到待测对象对应的函数调用树;数据分析模块生成数据报告,该数据报告包括待测对象对应的函数调用树;其中,原始数据集可以为跟踪日志(trace log)。通过数据报告,可方便高效的问题定位,并提供更高抽象层次的正确性对比手段。
在一个实施例中,基于程序计数器的起始值和原始数据集,得到原始数据集中各函数之间的调用关系,包括:
基于程序计数器的起始值和原始数据集,得到多个程序计数器的第一值,每一个第一值用于表征存储原始数据集中一个函数的内存地址;
将每一个第一值分别反标到相应的函数,得到原始数据集中各函数之间的调用关系。
举例说明,原始数据集包括函数1、函数2、函数3、函数4、函数5、函数6、函数7、函数8、函数9、函数10、函数11和函数12。函数1的地址为X,函数2的地址为X+1,函数3的地址为X+2,函数4的地址为X+3,函数5的地址为X+4,函数6的地址为X+5,函数7的地址为X+6,函数8的地址为X+7,函9的地址为X+8,函数10的地址为X+9,函数11的地址为X+10,函数12的地址为X+11。则多个程序计数器的值(第一值)分别为X、X+1、X+2、X+3、X+4、X+5、X+6、X+7、X+8、X+9、X+10和X+11,其中X为正整数。将每一个程序计数器的值(第一值)分别反标到相应的函数,得到原始数据集中各函数之间的调用关系,例如,函数1调用函数2,函数3调用函数4,函数5调用函数6,函数10调用函数11。
在一个实施例中,函数调用树包括原始数据集中各函数之间的调用关系、用于反标仿真波形的信息、用于日志查找的信息中的至少一项;
根据待测对象对应的函数调用树,对待测对象存在的缺陷进行调试,包括:
根据各函数之间的调用关系、用于反标仿真波形的信息、用于日志查找的信息中的至少一项,对待测对象存在的缺陷进行调试。
在一个实施例中,函数调用树包括原始数据集中各函数的信息、用于反标仿真波形的信息,以及用于日志查找的信息,其中,各函数的信息包括各函数之间的调用关系。
举例说明,如图3所示,函数调用树包括函数1的信息、函数2的信息、函数3的信息、函4的信息、函数5的信息、函数6的信息、函数7的信息、函数8的信息、函9的信息、函数10的信息、函数11的信息和函数12的信息;各函数的信息包括各函数之间的调用关系;其中,各函数之间的调用关系包括函数1调用函数2、函数3调用函数4、函数5调用函数6,以及函数10调用函数11。
在一个实施例中,待测对象包括被测器件DUT。
例如,被测器件DUT可以是芯片,例如CPU。在仿真环境执行较大规模、较复杂程序,被测器件DUT对应的函数调用树也为DUT验证提供了一种更为真实的压力测试激励,在此过程中,能够提前暴露和发现模块级(block level)、芯片IP级(Ip level)过程中没有发现的问题,从而有效的补充常规测试集空间。
应用本申请实施例,至少具有如下有益效果:
通过将仿真环境中产出指令执行的跟踪日志(trace log)结合反汇编文件,通过文件分析,生成待测对象对应的函数调用树,函数调用树包括了在整个程序执行过程中的函数调用流,函数调用树可以方便测试用例编写者快速定位程序执行的异常点,并提供详尽的数据信息,方便在跟踪日志(trace log)和仿真波形中进行定位,从而有效的缩小针对待测对象缺陷的定位范围,从而提高了定位效率。
为了更好的理解本申请实施例所提供的方法,下面结合具体应用场景的示例对本申请实施例的方案进行进一步说明。
本申请实施例所提供的测试方法应用于芯片测试领域中的CPU测试场景。
参见图4,图4示出了本申请实施例提供的另一种测试方法的流程示意图,如图4所示,本申请实施例提供的测试方法包括如下步骤:
S401,获取针对待测CPU的c/asm程序。
具体地,c/asm程序为对待测CPU进行验证的测试程序。
S402,将c/asm程序转换为Bin文件或ELF文件;转到步骤S404处理。
S403,将c/asm程序进行反汇编(Disassembly),得到反汇编文件;转到步骤S405处理。
S404,将Bin文件或ELF文件输入至芯片测试平台,进行测试,得到仿真输出结果。
具体地,仿真输出结果包括原始数据集,原始数据集包括跟踪日志trace log、仿真波形等。
S405,将仿真输出结果和反汇编文件进行分析,得到待测CPU对应的函数调用树。
S406,基于待测CPU对应的函数调用树,对待测CPU存在的问题点进行定位。
应用本申请实施例,至少具有如下有益效果:
将仿真输出结果(如trace log)结合反汇编文件,通过文件分析,生成待测CPU对应的函数调用树,函数调用树包括了在整个程序执行过程中的函数调用流,函数调用树可以方便测试用例编写者快速定位程序执行的异常点,并提供详尽的数据信息,方便在跟踪日志(trace log)和仿真波形中进行定位,从而有效的缩小针对待测CPU问题的定位范围,从而提高了定位效率。
本申请实施例还提供了一种测试装置,该测试装置的结构示意图如图5所示,测试装置60,包括第一处理模块601、第二处理模块602和第三处理模块603。
第一处理模块601,用于获取针对待测对象的测试数据对应的反汇编文件和原始数据集;
第二处理模块602,用于根据反汇编文件和原始数据集,确定待测对象对应的函数调用树;
第三处理模块603,用于根据待测对象对应的函数调用树,对待测对象存在的缺陷进行调试。
在一个实施例中,第一处理模块601,具体用于:
基于测试数据,对待测对象进行测试,并对待测对象的测试过程进行监控,得到原始数据集,原始数据集包括跟踪日志;
将测试数据进行反汇编处理,得到测试数据对应的反汇编文件。
在一个实施例中,第二处理模块602,具体用于:
对反汇编文件进行解析,得到程序计数器的起始值;
基于程序计数器的起始值和原始数据集,得到原始数据集中各函数之间的调用关系;
将各函数之间的调用关系进行格式化处理,得到待测对象对应的函数调用树,函数调用树包括各函数之间的调用关系。
在一个实施例中,第二处理模块602,具体用于:
基于程序计数器的起始值和原始数据集,得到多个程序计数器的第一值,每一个第一值用于表征存储原始数据集中一个函数的内存地址;
将每一个第一值分别反标到相应的函数,得到原始数据集中各函数之间的调用关系。
在一个实施例中,函数调用树包括原始数据集中各函数之间的调用关系、用于反标仿真波形的信息、用于日志查找的信息中的至少一项;
第三处理模块603,具体用于:
根据各函数之间的调用关系、用于反标仿真波形的信息、用于日志查找的信息中的至少一项,对待测对象存在的缺陷进行调试。
在一个实施例中,待测对象包括被测器件DUT。
应用本申请实施例,至少具有如下有益效果:
获取针对待测对象的测试数据对应的反汇编文件和原始数据集;根据反汇编文件和原始数据集,确定待测对象对应的函数调用树;根据待测对象对应的函数调用树,对待测对象存在的缺陷进行调试。如此,通过将仿真环境中产出指令执行的原始数据集结合反汇编文件,通过文件分析,生成待测对象对应的函数调用树,函数调用树包括了在整个程序执行过程中的函数调用流,函数调用树可以方便测试用例编写者快速定位程序执行的异常点,并提供详尽的数据信息,方便在原始数据集中进行定位,从而有效的缩小针对待测对象缺陷的定位范围,从而提高了定位效率。
本申请实施例还提供了一种电子设备,该电子设备的结构示意图如图6所示,图6所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004,收发器4004可以用于该电子设备与其他电子设备之间的数据交互,如数据的发送和/或数据的接收等。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本申请实施例的限定。
处理器4001可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(ExtendedIndustry Standard Architecture,扩展工业标准结构)总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器4003可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(Compact DiscRead Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质、其他磁存储设备、或者能够用于携带或存储计算机程序并能够由计算机读取的任何其他介质,在此不做限定。
存储器4003用于存储执行本申请实施例的计算机程序,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的计算机程序,以实现前述方法实施例所示的步骤。
其中,电子设备包括但不限于:服务器等。
应用本申请实施例,至少具有如下有益效果:
获取针对待测对象的测试数据对应的反汇编文件和原始数据集;根据反汇编文件和原始数据集,确定待测对象对应的函数调用树;根据待测对象对应的函数调用树,对待测对象存在的缺陷进行调试。如此,通过将仿真环境中产出指令执行的原始数据集结合反汇编文件,通过文件分析,生成待测对象对应的函数调用树,函数调用树包括了在整个程序执行过程中的函数调用流,函数调用树可以方便测试用例编写者快速定位程序执行的异常点,并提供详尽的数据信息,方便在原始数据集中进行定位,从而有效的缩小针对待测对象缺陷的定位范围,从而提高了定位效率。
本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。
本申请实施例还提供了一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。
基于与本申请实施例提供的方法相同的原理,本申请实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述本申请任一可选实施例中提供的方法。
应该理解的是,虽然本申请实施例的流程图中通过箭头指示各个操作步骤,但是这些步骤的实施顺序并不受限于箭头所指示的顺序。除非本文中有明确的说明,否则在本申请实施例的一些实施场景中,各流程图中的实施步骤可以按照需求以其他的顺序执行。此外,各流程图中的部分或全部步骤基于实际的实施场景,可以包括多个子步骤或者多个阶段。这些子步骤或者阶段中的部分或全部可以在同一时刻被执行,这些子步骤或者阶段中的每个子步骤或者阶段也可以分别在不同的时刻被执行。在执行时刻不同的场景下,这些子步骤或者阶段的执行顺序可以根据需求灵活配置,本申请实施例对此不限制。
以上所述仅是本申请部分实施场景的可选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请的方案技术构思的前提下,采用基于本申请技术思想的其他类似实施手段,同样属于本申请实施例的保护范畴。