一种检查方法、装置、计算机设备及存储介质
技术领域
本申请涉及计算机软件编程技术领域,具体而言,涉及一种检查方法、装置、计算机设备及存储介质。
背景技术
软件在编程过程中,在编程进行到一定阶段时,通常需要对已经编写的程序代码进行检查,以排除代码中所存在的各种问题。程序代码一般存储在程序文件中,因此代码检查一般是以程序文件为最小单位来进行的;在对程序文件进行检查时,例如包括对程序代码进行语法检查,如检查程序代码中的类名和方法名是否匹配、参数是否完整、数据类型是否一致等;这种检查通常通过集成开发工具内置的检查逻辑就可以实现;例如在基于集成开发工具Xcode进行苹果操作系统(iphone Operating System,iOS)项目开发,通过Xcode内置的代码检查功能进行代码检查。另外,还需要在业务层面中对程序代码进行检查,如检查子类重写父类方法是否调用了对应的父类方法、调用是否存在赋值的指针等;由于不同的程序在业务层面的不同,因此不同的程序代码在业务层面进行检查时,需要针对性的制订检查规则,这就造成了无法通过开发工具内置的检查逻辑来实现软件代码在业务层面的检查。因此,当前的代码检查方法存在效率低的问题。
发明内容
本申请实施例至少提供一种检查方法、装置、计算机设备及存储介质。
第一方面,本申请实施例提供了一种检查方法,基于多个代码文件中每个代码文件的状态信息,从所述多个代码文件中确定至少一个更新代码文件;从所述至少一个更新代码文件中确定在历史检查过程中未经过检查的目标代码文件;基于预先获得的各个所述目标代码文件的文件路径信息,按照预设的检查规则对所述目标代码文件进行代码检查,得到各个所述目标代码文件对应的检查结果。
一种可选实施方式中,所述从所述至少一个更新代码文件中确定在历史检查过程中未经过检查的目标代码文件,包括:生成各个所述更新代码文件的第一校验码;基于各个所述更新代码文件的第一校验码,以及在历史代码检查过程中得到的第二校验码,确定各个所述更新代码文件是否被检查过;若任一更新代码文件在历史检查过程中未被检查过,则将所述任一更新代码文件确定为目标代码文件。
一种可选实施方式中,所述状态信息包括下述至少一项:创建时间、以及修改时间。
一种可选实施方式中,当所述状态信息包括创建时间时,所述基于多个代码文件中每个代码文件的状态信息,从所述多个代码文件中确定至少一个更新代码文件,包括:确定最近一次代码文件提交时间;依次将各个所述代码文件的创建时间和所述最近一次代码文件提交时间进行比对;针对任一所述代码文件,若该任一代码文件的创建时间晚于所述最近一次代码文件提交时间,则将该任一代码文件确定为更新代码文件;当所述状态信息包括修改时间时,所述基于多个代码文件中每个代码文件的状态信息,从所述多个代码文件中确定至少一个更新代码文件,包括:确定最近一次代码文件提交时间;依次将各个所述代码文件的修改时间和所述最近一次代码文件提交时间进行比对;针对任一所述代码文件,若该任一代码文件的修改时间晚于所述最近一次代码文件提交时间,则将该任一代码文件确定为更新代码文件。
一种可选实施方式中,所述生成各个所述更新代码文件的第一校验码,包括:基于各个所述更新代码文件的文件路径信息,读取所述更新代码文件,并基于读取的各个所述更新代码文件,计算与读取的各个所述更新代码文件对应的第一校验码。
一种可选实施方式中,所述基于预先获得的各个所述目标代码文件的文件路径信息,按照预设的检查规则对所述目标代码文件进行代码检查,得到各个所述目标代码文件对应的检查结果,包括:读取代码检查参数,并将所述代码检查参数、与预设的检查规则对应的检查指令信息、以及各个目标代码文件的文件路径信息进行拼接,生成代码检查指令;基于所述代码检查指令,对各个所述目标代码文件进行代码检查,得到各个所述目标代码文件的检查结果。
一种可选实施方式中,基于预先确定的各个所述目标代码文件的文件路径信息,对所述目标代码文件进行代码检查,得到各个所述目标代码文件的检查结果,包括:基于预先确定的各个所述目标代码文件的文件路径信息,以及预先读取的各个代码文件的头文件,对所述目标代码文件进行代码检查,得到各个所述目标代码文件的检查结果。
一种可选实施方式中,在得到各个所述目标代码文件的检查结果之后,还包括:生成各个所述目标代码文件的第三校验码;基于新生成的第三校验码,对原有的第二校验码进行更新;更新后的第二校验码用于下次对程序代码的检查。
一种可选实施方式中,在得到各个所述目标代码文件对应的检查结果之后,还包括:对所述检查结果进行下述至少一种操作:将所述检查结果转换为目标格式;将所述检查结果进行拼装,生成代码检查文件;将所述检查结果进行展示。
第二方面,本申请实施例还提供一种检查装置,包括:第一确定模块,用于基于多个代码文件中每个代码文件的状态信息,从所述多个代码文件中确定至少一个更新代码文件;第二确定模块,从所述至少一个更新代码文件中确定在历史检查过程中未经过检查的目标代码文件;检查模块,用于基于预先获得的各个所述目标代码文件的文件路径信息,按照预设的检查规则对所述目标代码文件进行代码检查,得到各个所述目标代码文件对应的检查结果。
一种可选实施方式中,所述第二确定模块,用于采用下述方式从所述至少一个更新代码文件中确定在历史检查过程中未经过检查的目标代码文件:生成各个所述更新代码文件的第一校验码;基于各个所述更新代码文件的第一校验码,以及在历史代码检查过程中得到的第二校验码,确定各个所述更新代码文件是否被检查过;若任一更新代码文件在历史检查过程中未被检查过,则将所述任一更新代码文件确定为目标代码文件。
一种可选实施方式中,所述状态信息包括下述至少一项:创建时间、以及修改时间。
一种可选实施方式中,当所述状态信息包括创建时间时,所述第一确定模块,用于采用下述方式基于多个代码文件中每个代码文件的状态信息,从所述多个代码文件中确定至少一个更新代码文件:确定最近一次代码文件提交时间;依次将各个所述代码文件的创建时间和所述最近一次代码文件提交时间进行比对;针对任一所述代码文件,若该任一代码文件的创建时间晚于所述最近一次代码文件提交时间,则将该任一代码文件确定为更新代码文件;当所述状态信息包括修改时间时,所述第一确定模块,用于采用下述方式基于所述多个代码文件中每个代码文件的状态信息,从所述多个代码文件中,确定至少一个更新代码文件:确定最近一次代码文件提交时间;依次将各个所述代码文件的修改时间和所述最近一次代码文件提交时间进行比对;针对任一所述代码文件,若该任一代码文件的修改时间晚于所述最近一次代码文件提交时间,则将该任一代码文件确定为更新代码文件。
一种可选实施方式中,所述第一确定模块,用于采用下述方式生成各个所述更新代码文件的第一校验码:基于各个所述更新代码文件的文件路径信息,读取所述更新代码文件,并基于读取的各个所述更新代码文件,计算与读取的各个所述更新代码文件对应的第一校验码。
一种可选实施方式中,所述检查模块,用于采用下述方式基于预先确定的各个所述目标代码文件的文件路径信息,按照预设的检查规则对所述目标代码文件进行代码检查,得到各个所述目标代码文件对应的检查结果:读取代码检查参数,并将所述代码检查参数、与预设的检查规则对应的检查指令信息、以及各个目标代码文件的文件路径信息进行拼接,生成代码检查指令;基于所述代码检查指令,对各个所述目标代码文件进行代码检查,得到各个所述目标代码文件的检查结果。
一种可选实施方式中,所述检查模块,用于采用下述方式基于预先确定的各个所述目标代码文件的文件路径信息,对所述目标代码文件进行代码检查,得到各个所述目标代码文件的检查结果:基于预先确定的各个所述目标代码文件的文件路径信息,以及预先读取的各个代码文件的头文件,对所述目标代码文件进行代码检查,得到各个所述目标代码文件的检查结果。
一种可选实施方式中,还包括:更新模块,用于在得到各个所述目标代码文件的检查结果之后,生成各个所述目标代码文件的第三校验码;基于生成的第三校验码,对原有的第二校验码进行更新;更新后的第二校验码用于下次对程序代码的检查。
一种可选实施方式中,还包括,展示模块,用于在得到各个所述目标代码文件对应的检查结果之后,对所述检查结果进行下述至少一种操作:将所述检查结果转换为目标格式;将所述检查结果进行拼装,生成代码检查文件;将所述检查结果进行展示。
第三方面,本申请实施例还提供一种检查装置,包括:文件查找器、以及编译器;其中:所述文件查找器,用于基于多个代码文件中每个代码文件的状态信息,从所述多个代码文件中确定至少一个更新代码文件,并从所述至少一个更新代码文件中确定在历史检查过程中未经过检查的目标代码文件;所述编译器,用于基于预先确定的各个所述目标代码文件的文件路径信息,按照预设的检查规则对所述目标代码文件进行代码检查,得到各个所述目标代码文件对应的检查结果。
在本申请另一实施例中,还包括:管理器;其中,管理器用于控制及协调文件查找器、以及编译器实现代码检查过程。
在本申请另一实施例中,所述管理器在控制及协调文件查找器、以及编译器实现代码检查过程时,具体用于生成文件查找指令,并将所述文件查找指令发送给所述文件查找器;
所述文件查找器,具体用于在接收到所述管理器发送的所述文件查找指令后,基于多个代码文件中每个代码文件的状态信息,从所述多个代码文件中确定至少一个更新代码文件,并从所述至少一个更新代码文件中确定在历史检查过程中未经过检查的目标代码文件;并基于预先确定的各个目标代码文件的文件路径信息,生成并存储第一文件,并将第一文件对应的第一文件路径发送给管理器;
管理器,还用于接收所述文件查找器基于所述文件查找指令反馈的第一文件路径;基于第一文件路径,生成编译命令,并将所述编译命令发送给所述编译器;所述编译命令中携带有所述第一文件路径;
编译器,在接收到在接收到所述管理器发送的编译命令后,基于所述第一文件路径中携带的目标代码文件的文件路径信息,获取目标代码文件,并按照预设的检查规则对所述目标代码文件进行代码检查,得到各个所述目标代码文件对应的检查结果。
在一种实施例中,文件查找器包括:子查找器、以及子缓存器;其中,子查找器,用于接收所述管理器发送的所述文件查找指令,基于多个代码文件中每个代码文件的状态信息,从所述多个代码文件中,确定至少一个更新代码文件;生成并存储第二文件;并将第二文件对应的第二文件路径发送给管理器;在第二文件中,携带有各个更新代码文件的文件路径信息;管理器,还用于在接收到子查找器反馈的第二文件路径后,基于第二文件路径,生成匹配指令,并将所述匹配指令发送给所述子缓存器;所述匹配指令中携带有所述第二文件路径;所述子缓存器,用于接收所述管理器发送的匹配指令,并基于匹配指令中携带的第二文件路径,获取第二文件,并基于第二文件中保存携带的各个更新代码文件的文件路径信息,获取更新代码文件,并基于获取的各个更新代码文件,生成各个更新代码文件的第一校验码;基于各个更新代码文件的第一校验码,以及在历史代码检查过程中得到的第二校验码,确定各个更新代码文件是否被检查过;若任一更新代码文件未被检查过,则将所述任一更新代码文件确定为目标代码文件;基于各个目标代码文件的文件路径信息,生成并存储第一文件,并将第一文件对应的第一文件路径发送给管理器。
在另一种实施例中,编译器,具体用于:读取代码检查参数,并将所述代码检查参数、与预设的检查规则对应的检查指令信息、以及各个目标代码文件的文件路径信息进行拼接,生成代码检查指令;基于所述代码检查指令,对各个所述目标代码文件进行代码检查,得到各个所述目标代码文件的检查结果。
在另一种实施例中,编译器,具体用于:基于预先确定的各个所述目标代码文件的文件路径信息,以及预先读取的各个代码文件的头文件,对所述目标代码文件进行代码检查,得到各个所述目标代码文件的检查结果。
在另一种实施例中,还包括:格式转化器;编译器,还用于基于对各个目标代码文件的检查结果,生成第三文件,并将第三文件的第三文件路径发送给管理器;管理器,还用于接收编译器发送的第三文件路径,并基于第三文件路径生成格式转化指令,将所述存储指令发送给格式转化器;格式转化器,用于接收管理器发送的格式转化指令,并基于格式转化指令中携带的第三文件路径,获取第三文件,并将第三文件中携带的各个目标代码文件的检查结果,转化为预设格式,并生第四文件,将第四文件对应的第四文件路径发送给管理器。其中,第四文件中携带有转化为预设格式的检查结果。
在另一实施例中,管理器,还用于基于第四文件路径,生成第一存储指令,并将第一存储指令发送给文件查找器;文件查找器,还用于接收管理器发送的存储指令,并基于所述存储指令中携带的第四文件路径,获取第四文件;将第四文件中携带的转化为预设格式的检查结果存储至目标存储位置,生成第五文件,并将第五文件的第五文件路径发送给管理器。第五文件中,携带有转化为预设格式的检查结果。
在另一种实施例中,管理器,还用于基于第一文件的第一文件路径生成第二存储指令,并将第二存储指令发送给文件查找器;该第一文件路径中携带有各个目标代码文件分别对应的文件路径信息;文件查找器,还用于接收管理器发送的第二存储指令,基于第二存储指令中携带的各个目标代码文件分别对应的文件路径信息,获取目标代码文件,并基于获取的各个目标代码文件,生成各个所述目标代码文件的第三校验码;基于生成的第三校验码,对预先存储的第二校验码进行更新;更新后的第二校验码用于下次对程序代码的检查。
在另一种实施例中,管理器,还用于生成拼装指令,并将所述拼装指令发送至格式转化器;其中,拼装指令中,携带有第五文件路径;格式转化器,还用于接收管理器发送的拼装指令,并基于拼装指令中携带的第五文件路径,获取第五文件;基于第五文件中携带的转化为预设格式的检查结果,和xcode的代码检查结果进行拼装,生成综合检查结果,并将综合检查结果存储为第六文件;将第六文件的第六文件路径发送给管理器;所述综合检查结果中,包括:对目标代码文件的语法检查结果,以及对目标代码文件的业务层检查结果;管理器,还用于接收格式转化器发送的第六文件路径;基于第六文件路径获取第六文件,并将第六文件中携带的综合检查结果,按照预设的展示方式展示给用户。
第四方面,本申请实施例还提供一种计算机设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
第五方面,本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
本申请实施例通过基于多个代码文件中每个代码文件的状态信息,从多个代码文件中确定至少一个更新代码文件,然后从至少一个更新代码文件中确定在历史检查过程中未经过检查的目标代码文件;并基于预先获得的各个所述目标代码文件的文件路径信息,对所述目标代码文件进行代码检查,得到各个所述目标代码文件的检查结果。在该过程中,目标代码文件包括:未经过检查的代码文件,和/或在最近一次检查后被修改的代码文件;进而每次在进行代码检查时,是基于预先确定的各个所述目标代码文件的文件路径信息,确定各个目标代码文件的目标文件路径,而目标代码文件是新增加的或者进行修改的代码文件,因此能够在代码文件级别上,对目标代码文件进行本地检查,代码检查的效率更高。
为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本申请的实施例,并与说明书一起用于说明本申请的技术方案。应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本申请实施例所提供的一种检查方法的流程图;
图2示出了本申请实施例所提供的确定至少一个目标代码文件的具体方法的流程图;
图3示出了本申请实施例所提供的对目标代码文件进行代码检查的具体方法的流程图;
图4示出了本申请实施例所提供的一种检查装置的示意图;
图5示出了本申请实施例所提供的另一种检查装置的示意图;
图6示出了本申请实施例所提供的一种计算机设备的示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
经研究发现,在进行iOS项目开发时,通常会使用集成开发工具Xcode来进行编程,Xcode工具中提供了用来做代码检查的轻量级编译器clang命令;在程序代码写完后,可以根据Xcode提供的clang命令来执行代码的语法检查;但若要在业务层面对程序代码进行检查,就要在Xcode将程序代码编译完成后,触发自定义的clang命令来执行代码在业务分层面的检查。但由于代码文件的路径依赖于项目开发环境,第三方软件在很多情况下都无法抓取到文件的路径,进而只能在工程级别上对程序代码进行检查,无法支持单文件的静态检查;在工程级别上对程序代码进行检查时,需要对所有当前已经写好的程序代码进行编译、将编译后的程序代码提交到服务器、服务器触发代码检查并生成检查报告、以及将检查报告反馈至客户端的过程,流程复杂,且需要耗费大量的检查时间,造成代码检查效率低的问题。
基于上述研究,本申请提供了一种检查方法,基于多个代码文件中每个代码文件的状态信息,从多个代码文件中确定至少一个更新代码文件,然后从至少一个更新代码文件中确定在历史检查过程中未经过检查的目标代码文件;并基于预先获得的各个所述目标代码文件的文件路径信息,对所述目标代码文件进行代码检查,得到各个所述目标代码文件的检查结果。在该过程中,目标代码文件包括:未经过检查的代码文件,和/或在最近一次检查后被修改的代码文件;进而每次在进行代码检查时,是基于预先确定的各个所述目标代码文件的文件路径信息,确定各个目标代码文件的目标文件路径,而目标代码文件是新增加的或者进行修改的代码文件,因此能够在代码文件级别上,对目标代码文件进行本地检查,代码检查的效率更高。
针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本申请针对上述问题所提出的解决方案,都应该是发明人在本申请过程中对本申请做出的贡献。
下面将结合本申请中附图,对本申请中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
为便于对本实施例进行理解,首先对本申请实施例所申请的一种检查方法进行详细介绍,本申请实施例所提供的检查方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户设备(User Equipment,UE)、移动设备、用户终端、终端等。在一些可能的实现方式中,该检查方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。该检查方法例如应用于检查iOS苹果操作系统项目开发中的程序代码。
下面以执行主体为终端设备为例对本申请实施例提供的检查方法加以说明。
参见图1所示,为本申请实施例提供的检查方法的流程图,所述方法包括步骤S101~S103,其中:
S101:基于多个代码文件中每个代码文件的状态信息,从所述多个代码文件中确定至少一个更新代码文件。
S102:从所述至少一个更新代码文件中确定在历史检查过程中未经过检查的目标代码文件。
S103:基于预先获得的各个所述目标代码文件的文件路径信息,按照预设的检查规则对所述目标代码文件进行代码检查,得到各个所述目标代码文件对应的检查结果。
下面分别对上述S101~S101加以详细说明。
I:在上述S101中,在具体实施中,在进行iOS项目开发的时候,通常会将项目分成多个部分,每个部分由至少一个程序员来负责具体的开发事宜。每个程序员在负责的工作进行到一定阶段时,会将阶段性的成果,也即程序代码提交至服务器。在将阶段性成果提交至服务器之后,程序员还能够对已经写好的程序代码进行修改、或者新增其他的代码文件等。
或者程序员也可以将阶段性成果在本地进行编译;编译后,程序员同样能够对已经编译过的程序代码进行修改、或者新增其他代码文件。
在上述中,程序员在每次修改程序代码后,都可以对写好的程序代码进行检查。而在对程序代码进行检查的时候,要从本地的多个代码文件中,确定至少一个更新代码文件。
此处,更新代码文件例如包括在最近一次将阶段性成果提交至服务器后,又对代码文件进行修改所得到的代码文件,或者新增代码文件;更新代码文件例如又包括在最近一次将阶段性成果在本地编译后,又对代码文件进行修改所得到的代码文件,或者新增代码文件。
在具体实施中,在进行项目开发时,例如会通过代码文件管理工具来管理各个代码文件的属性信息;各个代码文件的状态作为属性信息的一部分,被代码文件管理工具所记录。在需要确定更新代码文件的时候,例如可以通过调取代码管理工具所记录的各个代码文件的属性信息,来确定多个代码文件中每个代码文件的状态信息,以从多个代码文件中,确定至少一个更新代码文件。
又例如,由于代码文件都存储在本地,而在代码文件开发过程中,能够从本地获知存储的各个代码文件的绝对路径;然后基于各个代码文件的绝对路径,来获取各个代码文件,然后通过读取与各个代码文件关联的属性信息,并从属性信息中,确定各个代码文件的状态信息,以从多个代码文件中,确定至少一个更新代码文件。
这里,属性信息例如包括:文件类型、文件的绝对路径、文件大小、创建时间、修改时间、访问时间、修改位置等。
状态信息例如包括:创建时间和/或修改时间。
具体地:
a1:在状态信息仅包括创建时间时,可以采用下述方式从多个代码文件中确定至少一个更新代码文件:
确定最近一次代码文件提交时间;依次将各个代码文件的创建时间和所述最近一次代码文件提交时间进行比对;
针对任一所述代码文件,若该任一代码文件的创建时间晚于所述最近一次代码文件提交时间,则将该任一代码文件确定为更新代码文件。
a2:在状态信息仅包括修改时间时,可以采用下述方式从多种代码文件中,确定至少一个更新代码文件:
确定最近一次代码文件提交时间;依次将各个所述代码文件的修改时间和所述最近一次代码文件提交时间进行比对;针对任一所述代码文件,若该任一代码文件的修改时间晚于所述最近一次代码文件提交时间,则将该任一代码文件确定为更新代码文件。
a3:在状态信息包括创建时间和修改时间时,可以采用上述a1和a2中任一种方式,从多个代码文件中确定更新代码文件。
这样,通过上述实施例,能够以代码文件提交时间为时间节点,将创建时间和/或更新时间晚于该代码文件提交时间的进行比对,以准确从多个代码文件中确定更新代码文件。
II:在上述S102中,历史检查过程,例如包括最近一次将阶段性成果提交至服务器之后、且在当前次代码检查之前的所有检查过程;又例如包括最近一次对阶段性成果进行本地编译之后、且在当前次代码检查之前的所有检查过程。
参见图2所示,本申请实施例提供一种确定目标代码文件的具体方法,包括:
S201:生成各个所述更新代码文件的第一校验码。
这里,更新代码文件的第一校验码,例如基于更新代码文件生成的消息摘要算法第五版(Message Digest Algorithm 5,MD5)校验码。具体地,由于已经预先获知了各个更新代码文件的绝对路径,因此能够基于各个更新代码文件的绝对路径读取到各个更新代码文件;然后基于读取的各个更新代码文件,生成各个更新代码文件的MD5校验码。
这里,例如可以采用下述方式得到各个更新代码文件的第一校验码:
基于各个更新代码文件的文件路径信息,读取所述更新代码文件,并基于读取各个所述更新代码文件,计算与读取的各个所述更新代码文件对应的第一校验码。
这样,通过读取的更新代码文件,计算得到第一校验码,该第一校验码用于从更新代码文件中确定目标代码文件。
S202:基于各个所述更新代码文件的第一校验码,以及在历史代码检查过程中得到的第二校验码,确定各个所述更新代码文件是否被检查过。
S203:若任一更新代码文件在历史检查过程中未被检查过,则将所述任一更新代码文件确定为目标代码文件。
第二校验码,是指在历史检查过程中对代码文件进行代码检查时,所生成的各个代码文件的校验码;且第一校验码与第二校验码的生成算法一致。
这里,由于在从最近一次提交代码文件后,可能会对提交的代码文件进行多次修改;而每次修改,所针对的代码文件可以相同,也可以不同。
例如,若某次提交的代码文件包括:文件A1、文件B1、文件C1以及文件D1;在该次提交代码文件后,在第一次修改时,对文件A1进行了修改,得到文件A2;且对文件A2进行了第一次代码检查;在之后,在第二次修改时,又对文件B1进行了修改,得到文件B2;在该种情况下,得到的更新代码文件包括文件A2和文件B2;此时,由于已经对文件A2进行过代码检查,若重复对文件A2再一次进行检查,显然会降低代码检查的效率;因此,可以在第一次对代码文件A2进行检查后,将代码文件A2的MD5校验码作为第二校验码保存起来;本次在确定目标代码文件时,会分别生成文件A2和文件B2的第一校验码;然后可以将文件A2和文件B2的第一校验码和第二校验码进行匹配,由于文件A2的第一校验码和A2的第一校验码相同,且第二校验码中不存在与文件B2的第一校验码相同的第二校验码,因此,能够确定文件A2已经被检查过,文件B2未被检查过,此时,可以将文件B2确定为目标代码文件。
之后,会将文件B2的第一校验码作为新的第二校验码保存起来。
又例如,在上述示例中,在第三次对代码文件进行修改时,又对文件A2进行了进一步修改,得到文件A3;在第三次对代码文件检查中,会生成文件A3和文件B2的第一校验码;然后将文件A3和文件B2的第一校验码,与文件A2的第二校验码和文件B2的第二校验码进行匹配,由于文件B2的第二校验码和文件B2的第一校验码相同,进而确定文件A3为目标代码文件。
在上述示例中,需要注意的是,文件A1、文件A2和文件A3实际为同一文件的不同版本;也即原始版本、第一次修改版本和第二次修改版本。也即,可以统一用文件A指代;在每次确定更新代码文件时,无论将其中的哪个修改版本为更新代码文件,实际上对于用户而言均是将文件A确定为更新代码文件,A1、A2以及A3仅仅是为了方便对代码文件修改过程的说明。
通过上述实施例,能够基于更新代码文件的第一校验码,和历史代码检查过程中得到的第二校验码进行匹配,将未进过检查的目标代码文件从更新代码文件中确定出来,过程简单易实现。
III:在确定了目标代码文件后,要基于预先获得的各个所述目标代码文件的文件路径信息,按照预设的检查规则对所述目标代码文件进行代码检查。
具体地,参见图3所示,本申请实施例还提供一种对所述目标代码文件进行代码检查的具体方法,包括:
S301:读取代码检查参数,并将所述代码检查参数、与预设的检查规则对应的检查指令信息、以及各个目标代码文件的文件路径信息进行拼接,生成代码检查指令;
S302:基于所述代码检查指令,对各个所述目标代码文件进行代码检查,得到各个所述目标代码文件的检查结果。
此处,代码检查参数,包括在对代码进行检查时所需要的各个参数。预先设置的检查指令信息,例如包括在对代码进行检查时所需要的指令;在将所述代码检查参数、预先设置的检查指令信息、以及各个目标代码文件的文件路径信息进行拼接时,例如按照预先确定的代码检查指令的格式,将三者进行拼接。
这样,该代码检查指令在执行时,首先基于各个目标代码文件的文件路径信息读取目标代码文件,然后基于代码检查参数、和预设的检查规则对应的检查指令信息,对读取的目标代码文件进行代码检查。
代码检查参数,例如可以从预先存储在执行代码检测方法的执行主体中读取,也可以从其他物理设备或者云设备中读取。
在对代码进行检查的过程中,包括:对程序代码进行语法检查以及业务层面的检查。
在对程序代码进行业务层面的检查时,由于目标代码文件与其他代码文件之间可能会具有相互引用的关系,为了检查引用关系的正确性,在对目标代码文件进行检查时,需要调用其引用的其他代码文件的头文件;而本地能够直接基于各个代码文件,得到各个代码文件的头文件,因此,在本申请另一实施例中,对目标代码文件进行代码检查,还可以包括:
基于预先确定的各个所述目标代码文件的文件路径信息,以及预先读取的各个代码文件的头文件,对所述目标代码文件进行代码检查,得到各个所述目标代码文件的检查结果。
在本申请另一实施例中,在得到各个目标代码文件的检查结果后,还包括:
生成各个目标代码文件的第三校验码;基于生成的第三校验码,对原有的第二校验码进行更新。其中,更新后的第二校验码用于下一次对程序代码进行检查。
这样,通过生成各个目标代码文件的第三校验码,对原有的的第二校验码进行更新,从而在下一次进行代码检查时,能够在下一次代码检查过程中,不会再对本次代码检查过程中已经检查过的代码文件进行重复检查,提升代码检查效率。
另外,在本申请另一实施例中,在得到各个所述目标代码文件的检查结果之后,还包括:对所述检查结果进行下述至少一种操作:
b1:将所述检查结果转换为目标格式的格式转换操作。
此处,由于在对目标代码文件进行代码检查的时候,涉及到对程序代码进行业务层面的检查,实际上是用户自定义的检查规则,其输出的检查结果格式通常与Xcode直接输出的检查结果格式不同;因此可以量检查结果转换为目标格式,该目标格式例如为Xcode格式,使得用户对程序代码的检查过程无感知。
b2:将所述代码检查结果进行拼装,生成代码检查文件的拼装操作。
此处,拼装,例如将Xcode执行的语法检查的检查结果,以及本申请实施例提供的程序代码的检查方法得到的业务层面的检查结果进行拼装。将检查结果进行拼装,使得代码检查结果保持完整性,更便于阅读。
b3:将所述代码检查结果进行展示的展示操作。
此处,将代码检查结果进行展示,方便编程人员基于代码检查结果调整代码,修正代码中存在的问题。
本申请实施例通过基于多个代码文件中每个代码文件的状态信息,从多个代码文件中确定至少一个更新代码文件,然后从至少一个更新代码文件中确定在历史检查过程中未经过检查的目标代码文件;并基于预先获得的各个所述目标代码文件的文件路径信息,对所述目标代码文件进行代码检查,得到各个所述目标代码文件的检查结果。在该过程中,目标代码文件包括:未经过检查的代码文件,和/或在最近一次检查后被修改的代码文件;进而每次在进行代码检查时,是基于预先确定的各个所述目标代码文件的文件路径信息,确定各个目标代码文件的目标文件路径,而目标代码文件是新增加的或者进行修改的代码文件,因此能够在代码文件级别上,对目标代码文件进行本地检查,代码检查的效率更高。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本申请实施例中还提供了与检查方法对应的检查装置,由于本申请实施例中的装置解决问题的原理与本申请实施例上述检查方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参照图4所示,为本申请实施例提供的一种检查装置的示意图,所述装置包括:第一确定模块41、第二确定模块42、以及检查模块43;其中,
第一确定模块41,用于基于多个代码文件中每个代码文件的状态信息,从所述多个代码文件中确定至少一个更新代码文件;
第二确定模块42,从所述至少一个更新代码文件中确定在历史检查过程中未经过检查的目标代码文件;
检查模块43,用于基于预先获得的各个所述目标代码文件的文件路径信息,按照预设的检查规则对所述目标代码文件进行代码检查,得到各个所述目标代码文件对应的检查结果。
一种可选实施方式中,所述第二确定模块42,用于采用下述方式从所述至少一个更新代码文件中确定在历史检查过程中未经过检查的目标代码文件:
生成各个所述更新代码文件的第一校验码;
基于各个所述更新代码文件的第一校验码,以及在历史代码检查过程中得到的第二校验码,确定各个所述更新代码文件是否被检查过;
若任一更新代码文件在历史检查过程中未被检查过,则将所述任一更新代码文件确定为目标代码文件。
一种可选实施方式中,所述状态信息包括下述至少一项:创建时间、以及修改时间。
一种可选实施方式中,当所述状态信息包括创建时间时,所述第一确定模块41,用于采用下述方式基于多个代码文件中每个代码文件的状态信息,从所述多个代码文件中确定至少一个更新代码文件:
确定最近一次代码文件提交时间;依次将各个所述代码文件的创建时间和所述最近一次代码文件提交时间进行比对;针对任一所述代码文件,若该任一代码文件的创建时间晚于所述最近一次代码文件提交时间,则将该任一代码文件确定为更新代码文件;
当所述状态信息包括修改时间时,所述第一确定模块41,用于采用下述方式基于所述多个代码文件中每个代码文件的状态信息,从所述多个代码文件中,确定至少一个更新代码文件:确定最近一次代码文件提交时间;依次将各个所述代码文件的修改时间和所述最近一次代码文件提交时间进行比对;针对任一所述代码文件,若该任一代码文件的修改时间晚于所述最近一次代码文件提交时间,则将该任一代码文件确定为更新代码文件。
一种可选实施方式中,所述第一确定模块41,用于采用下述方式生成各个所述更新代码文件的第一校验码:
基于各个所述更新代码文件的文件路径信息,读取所述更新代码文件,并基于读取的各个所述更新代码文件,计算与读取的各个所述更新代码文件对应的第一校验码。
一种可选实施方式中,所述检查模块43,用于采用下述方式基于预先确定的各个所述目标代码文件的文件路径信息,按照预设的检查规则对所述目标代码文件进行代码检查,得到各个所述目标代码文件对应的检查结果:读取代码检查参数,并将所述代码检查参数、与预设的检查规则对应的检查指令信息、以及各个目标代码文件的文件路径信息进行拼接,生成代码检查指令;基于所述代码检查指令,对各个所述目标代码文件进行代码检查,得到各个所述目标代码文件的检查结果。
一种可选实施方式中,所述检查模块43,用于采用下述方式基于预先确定的各个所述目标代码文件的文件路径信息,对所述目标代码文件进行代码检查,得到各个所述目标代码文件的检查结果:
基于预先确定的各个所述目标代码文件的文件路径信息,以及预先读取的各个代码文件的头文件,对所述目标代码文件进行代码检查,得到各个所述目标代码文件的检查结果。
一种可选实施方式中,还包括:更新模块44,用于在得到各个所述目标代码文件的检查结果之后,生成各个所述目标代码文件的第三校验码;基于生成的第三校验码,对原有的第二校验码进行更新;更新后的第二校验码用于下次对程序代码的检查。
一种可选实施方式中,还包括,展示模块45,用于在得到各个所述目标代码文件对应的检查结果之后,对所述检查结果进行下述至少一种操作:将所述检查结果转换为目标格式;将所述检查结果进行拼装,生成代码检查文件;将所述检查结果进行展示。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
参见图5所示,本申请实施例还提供一种检查装置,该装置安装与执行上述检查方法的终端设备或者服务器中。该装置包括:文件查找器51、以及编译器52;其中:
所述文件查找器51,用于基于多个代码文件中每个代码文件的状态信息,从所述多个代码文件中确定至少一个更新代码文件,并从所述至少一个更新代码文件中确定在历史检查过程中未经过检查的目标代码文件;
所述编译器52,用于基于预先确定的各个所述目标代码文件的文件路径信息,按照预设的检查规则对所述目标代码文件进行代码检查,得到各个所述目标代码文件对应的检查结果。
在具体实施中,文件查找器51和编译器52可以为同一进程的不同子进程,也可以是完全不同的两个软件。
在本申请另一实施例中,参见图5所示,还包括:管理器53。
其中,管理器53用于控制及协调文件查找器51、以及编译器52实现代码检查过程。
具体地,所述管理器53,用于生成文件查找指令,并将所述文件查找指令发送给所述文件查找器51;
所述文件查找器52,具体用于在接收到所述管理器发送的所述文件查找指令后,基于多个代码文件中每个代码文件的状态信息,从所述多个代码文件中确定至少一个更新代码文件,并从所述至少一个更新代码文件中确定在历史检查过程中未经过检查的目标代码文件;并基于预先确定的各个目标代码文件的文件路径信息,生成并存储第一文件,并将第一文件对应的第一文件路径发送给管理器53。其中,在第一文件中,存储有各个目标代码文件的文件路径信息。
管理器53,还用于接收所述文件查找器51基于所述文件查找指令反馈的第一文件路径;基于第一文件路径,生成编译命令,并将所述编译命令发送给所述编译器52;所述编译命令中携带有所述第一文件路径;
编译器52,在接收到在接收到所述管理器53发送的编译命令后,基于所述第一文件路径中携带的目标代码文件的文件路径信息,获取目标代码文件,并按照预设的检查规则对所述目标代码文件进行代码检查,得到各个所述目标代码文件对应的检查结果。
在一种实施例中,参见图5所示,本申请实施例提供的检查装置中,文件查找器52包括:子查找器521、以及子缓存器522;
其中,子查找器521,用于接收所述管理器发送的所述文件查找指令,基于多个代码文件中每个代码文件的状态信息,从所述多个代码文件中,确定至少一个更新代码文件;生成并存储第二文件;并将第二文件对应的第二文件路径发送给管理器53;在第二文件中,携带有各个更新代码文件的文件路径信息。
管理器53,还用于在接收到子查找器521反馈的第二文件路径后,基于第二文件路径,生成匹配指令,并将所述匹配指令发送给所述子缓存器522。所述匹配指令中携带有所述第二文件路径。
所述子缓存器522,用于接收所述管理器53发送的匹配指令,并基于匹配指令中携带的第二文件路径,获取第二文件,并基于第二文件中保存携带的各个更新代码文件的文件路径信息,获取更新代码文件,并基于获取的各个更新代码文件,生成各个更新代码文件的第一校验码;基于各个更新代码文件的第一校验码,以及在历史代码检查过程中得到的第二校验码,确定各个更新代码文件是否被检查过;若任一更新代码文件未被检查过,则将所述任一更新代码文件确定为目标代码文件;基于各个目标代码文件的文件路径信息,生成并存储第一文件,并将第一文件对应的第一文件路径发送给管理器53。此处,各个目标代码文件的文件路径信息,例如可以从第二文件中获得。
在另一种实施例中,编译器52,具体用于:读取代码检查参数,并将所述代码检查参数、与预设的检查规则对应的检查指令信息、以及各个目标代码文件的文件路径信息进行拼接,生成代码检查指令;基于所述代码检查指令,对各个所述目标代码文件进行代码检查,得到各个所述目标代码文件的检查结果。
在另一种实施例中,编译器52,具体用于:基于预先确定的各个所述目标代码文件的文件路径信息,以及预先读取的各个代码文件的头文件,对所述目标代码文件进行代码检查,得到各个所述目标代码文件的检查结果。
在另一种实施例中,参见图5所示,还包括:格式转化器54。
编译器52,还用于基于对各个目标代码文件的检查结果,生成第三文件,并将第三文件的第三文件路径发送给管理器53。在第三文件中,携带有各个目标代码文件的检查结果。
管理器53,还用于接收编译器52发送的第三文件路径,并基于第三文件路径生成格式转化指令,将所述存储指令发送给格式转化器54。
格式转化器54,用于接收管理器53发送的格式转化指令,并基于格式转化指令中携带的第三文件路径,获取第三文件,并将第三文件中携带的各个目标代码文件的检查结果,转化为预设格式,并生第四文件,将第四文件对应的第四文件路径发送给管理器53。其中,第四文件中携带有转化为预设格式的检查结果。
在另一实施例中,管理器53,还用于基于第四文件路径,生成第一存储指令,并将第一存储指令发送给文件查找器52。
文件查找器52,还用于接收管理器53发送的存储指令,并基于所述存储指令中携带的第四文件路径,获取第四文件;将第四文件中携带的转化为预设格式的检查结果存储至目标存储位置,生成第五文件,并将第五文件的第五文件路径发送给管理器53。第五文件中,携带有转化为预设格式的检查结果。
在另一种实施例中,管理器53,还用于基于第一文件的第一文件路径生成第二存储指令,并将第二存储指令发送给文件查找器52。该第一文件路径中携带有各个目标代码文件分别对应的文件路径信息。
文件查找器52,还用于接收管理器53发送的第二存储指令,基于第二存储指令中携带的各个目标代码文件分别对应的文件路径信息,获取目标代码文件,并基于获取的各个目标代码文件,生成各个所述目标代码文件的第三校验码;基于生成的第三校验码,对预先存储的第二校验码进行更新;更新后的第二校验码用于下次对程序代码的检查。
在另一种实施例中,管理器53,还用于生成拼装指令,并将所述拼装指令发送至格式转化器54;其中,拼装指令中,携带有第五文件路径。
格式转化器54,还用于接收管理器53发送的拼装指令,并基于拼装指令中携带的第五文件路径,获取第五文件;基于第五文件中携带的转化为预设格式的检查结果,和xcode的代码检查结果进行拼装,生成综合检查结果,并将综合检查结果存储为第六文件;将第六文件的第六文件路径发送给管理器53。综合检查结果中,包括:对目标代码文件的语法检查结果,以及对目标代码文件的业务层检查结果。
管理器53,还用于接收格式转化器54发送的第六文件路径;基于第六文件路径获取第六文件,并将第六文件中携带的综合检查结果,按照预设的展示方式展示给用户。例如打印、在显示器上进行显示、语音播报等。
通过上述检查装置,实现了以代码文件为粒度的代码本地,具有更高的检查效率。
本申请实施例还提供了一种计算机设备60,如图6所示,为本申请实施例提供的计算机设备60结构示意图,包括:处理器61、存储器62、和总线63。所述存储器62存储有所述处理器61可执行的机器可读指令,当计算机设备60运行时,所述处理器61与所述存储器62之间通过总线63通信,所述机器可读指令被所述处理器61执行时执行如下处理:
基于多个代码文件中每个代码文件的状态信息,从所述多个代码文件中确定至少一个更新代码文件;
从所述至少一个更新代码文件中确定在历史检查过程中未经过检查的目标代码文件;
基于预先获得的各个所述目标代码文件的文件路径信息,按照预设的检查规则对所述目标代码文件进行代码检查,得到各个所述目标代码文件对应的检查结果。
一种可能的实施方式中,处理器61执行的指令中,所述从所述至少一个更新代码文件中确定在历史检查过程中未经过检查的目标代码文件,包括:
生成各个所述更新代码文件的第一校验码;
基于各个所述更新代码文件的第一校验码,以及在历史代码检查过程中得到的第二校验码,确定各个所述更新代码文件是否被检查过;
若任一更新代码文件在历史检查过程中未被检查过,则将所述任一更新代码文件确定为目标代码文件。
一种可能的实施方式中,处理器61执行的指令中,所述状态信息包括下述至少一项:创建时间、以及修改时间。
一种可能的实施方式中,处理器61执行的指令中,当所述状态信息包括创建时间时,所述基于多个代码文件中每个代码文件的状态信息,从所述多个代码文件中确定至少一个更新代码文件,包括:
确定最近一次代码文件提交时间;依次将各个所述代码文件的创建时间和所述最近一次代码文件提交时间进行比对;针对任一所述代码文件,若该任一代码文件的创建时间晚于所述最近一次代码文件提交时间,则将该任一代码文件确定为更新代码文件;
当所述状态信息包括修改时间时,所述基于多个代码文件中每个代码文件的状态信息,从所述多个代码文件中确定至少一个更新代码文件,包括:
确定最近一次代码文件提交时间;依次将各个所述代码文件的修改时间和所述最近一次代码文件提交时间进行比对;针对任一所述代码文件,若该任一代码文件的修改时间晚于所述最近一次代码文件提交时间,则将该任一代码文件确定为更新代码文件。
一种可能的实施方式中,处理器61执行的指令中,所述生成各个所述更新代码文件的第一校验码,包括:
基于各个所述更新代码文件的文件路径信息,读取所述更新代码文件,并基于读取的各个所述更新代码文件,计算与读取的各个所述更新代码文件对应的第一校验码。
一种可能的实施方式中,处理器61执行的指令中,所述基于预先获得的各个所述目标代码文件的文件路径信息,按照预设的检查规则对所述目标代码文件进行代码检查,得到各个所述目标代码文件对应的检查结果,包括:
读取代码检查参数,并将所述代码检查参数、与预设的检查规则对应的检查指令信息、以及各个目标代码文件的文件路径信息进行拼接,生成代码检查指令;
基于所述代码检查指令,对各个所述目标代码文件进行代码检查,得到各个所述目标代码文件的检查结果。
一种可能的实施方式中,处理器61执行的指令中,代码文件进行代码检查,得到各个所述目标代码文件的检查结果,包括:
基于预先确定的各个所述目标代码文件的文件路径信息,以及预先读取的各个代码文件的头文件,对所述目标代码文件进行代码检查,得到各个所述目标代码文件的检查结果。
一种可能的实施方式中,处理器61执行的指令中,在得到各个所述目标代码文件的检查结果之后,还包括:
生成各个所述目标代码文件的第三校验码;
基于新生成的第三校验码,对原有的第二校验码进行更新;
更新后的第二校验码用于下次对程序代码的检查。
一种可能的实施方式中,处理器61执行的指令中,在得到各个所述目标代码文件对应的检查结果之后,还包括:对所述检查结果进行下述至少一种操作:
将所述检查结果转换为目标格式;
将所述检查结果进行拼装,生成代码检查文件;
将所述检查结果进行展示。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的检查方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本申请实施例所提供的检查方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的检查方法的步骤,具体可参见上述方法实施例,在此不再赘述。
本申请实施例还提供一种计算机程序,该计算机程序被处理器执行时实现前述实施例的任意一种方法。该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software DevelopmentKit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本申请的具体实施方式,用以说明本申请的技术方案,而非对其限制,本申请的保护范围并不局限于此,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。