发明内容
有鉴于此,本申请提供一种检测配置错误的方法、装置及设备。
根据本申请实施例的第一方面,提供一种检测配置错误的方法,包括步骤:
获取待测对象的配置信息中的各配置项;
确定每个配置项运行所需的运行环境;
基于所确定的运行环境运行所述待测对象的各配置项;
根据运行结果确定所述待测对象的各配置项是否有误。
在一个实施例中,所述基于所确定的运行环境运行所述待测对象的各配置项,包括:
将所确定的运行环境作为沙箱环境,创建与所述待测对象对应的沙箱,并控制所述待测对象的各配置项在创建的沙箱内运行。
在一个实施例中,所述将所确定的运行环境作为沙箱环境,创建与所述待测对象对应的沙箱,并控制所述待测对象的各配置项在创建的沙箱内运行,包括:
生成用于描述所确定的运行环境的代码;
将生成的代码注入到所述待测对象的源码中;
将注入代码后的源码输送到初始化的沙箱内运行。
在一个实施例中,所述待测对象为应用APP。
在一个实施例中,在根据运行结果确定所述待测对象的各配置项是否有误后,所述检测配置错误的方法还包括:
将描述所确定的运行环境的代码从所述源码中删除。
在一个实施例中,在确定每个配置项运行所需的运行环境前,所述检测配置错误的方法还包括:
判断获取的每个配置项与预定的副作用配置项是否一致;
如果任一配置项与预定的副作用配置项不一致,则确定该配置项运行所需的运行环境;
如果任一配置项与预定的副作用配置项一致,则确定该配置项有误。
在一个实施例中,所述根据运行结果确定所述待测对象的各配置项是否有误,包括:
如果任一配置项的运行结果含有报错提示,则基于该报错提示查找导致报错的配置项,并确定查找到的配置项有误;
如果任一配置项的运行结果所含的资源消耗量超过资源阈值,则确定该配置项有误。
根据本申请实施例的第二方面,提供一种检测配置错误的装置,包括:
配置获取模块,用于获取待测对象的配置信息中的各配置项;
环境确定模块,用于确定每个配置项运行所需的运行环境;
配置运行模块,用于基于所确定的运行环境运行所述待测对象的各配置项;
配置检测模块,用于根据运行结果确定所述待测对象的各配置项是否有误。
在一个实施例中,所述配置运行模块包括:
配置运行子模块,用于将所确定的运行环境作为沙箱环境,创建与所述待测对象对应的沙箱,并控制所述待测对象的各配置项在创建的沙箱内运行。
在一个实施例中,所述配置运行子模块包括:
代码生成模块,用于生成用于描述所确定的运行环境的代码;
代码注入模块,用于将生成的代码注入到所述待测对象的源码中;
代码输送模块,用于将注入代码后的源码输送到初始化的沙箱内运行。
在一个实施例中,所述待测对象为应用APP。
在一个实施例中,所述检测配置错误的装置还包括:
代码删除模块,用于在所述配置检测模块根据运行结果确定出所述待测对象的各配置项是否有误后,将描述所确定的运行环境的代码从所述源码中删除。
在一个实施例中,所述检测配置错误的装置还包括:
配置预判模块,用于在所述环境确定模块确定每个配置项运行所需的运行环境前,判断获取的每个配置项与预定的副作用配置项是否一致;
通知模块,用于在任一配置项与预定的副作用配置项不一致时,通知所述环境确定模块确定该配置项运行所需的运行环境;
有误配置确定模块,用于在任一配置项与预定的副作用配置项一致时,确定该配置项有误。
在一个实施例中,所述配置检测模块包括:
第一检测模块,用于在任一配置项的运行结果含有报错提示时,基于该报错提示查找导致报错的配置项,并确定查找到的配置项有误;
第二检测模块,用于在任一配置项的运行结果所含的资源消耗量超过资源阈值时,确定该配置项有误。
根据本申请实施例的第三方面,提供一种电子设备,包括:
处理器;
存储处理器可执行指令的存储器;
其中,所述处理器耦合于所述存储器,用于读取所述存储器存储的程序指令,并作为响应,执行如下操作:
获取待测对象的配置信息中的各配置项;
确定每个配置项运行所需的运行环境;
基于所确定的运行环境运行所述待测对象的各配置项;
根据运行结果确定所述待测对象的各配置项是否有误。
在一个实施例中,所述处理器还被配置为执行如下操作:
将所确定的运行环境作为沙箱环境,创建与所述待测对象对应的沙箱,并控制所述待测对象的各配置项在创建的沙箱内运行。
在一个实施例中,所述处理器还被配置为执行如下操作:
生成用于描述所确定的运行环境的代码;
将生成的代码注入到所述待测对象的源码中;
将注入代码后的源码输送到初始化的沙箱内运行。
在一个实施例中,所述待测对象为应用APP。
在一个实施例中,所述处理器还被配置为执行如下操作:
将描述所确定的运行环境的代码从所述源码中删除。
实施本申请提供的实施例,在正式运行待测对象前,可以先对应待测对象的配置信息中的各配置项,确定每个配置项运行所需的运行环境;然后基于所确定的运行环境运行所述待测对象的各配置项,再根据运行结果即确定所述待测对象的各配置项是否有误。这样可以提前检测出待测对象中可能存在的配置错误,进而,可以降低待测对象的正式运行过程中的故障发生率,可以提高待测对象的可用性以及稳定性,同时还可以降低故障发生所造成的损失。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
一般情况下,软件开发方完成软件代码的开发后,可以将开发的软件代码提供给不同的软件运维方。而各软件运维方为了适应自身的场景的需求,可以由各自的软件运维人员以修改软件的配置文件的代码的形式,修改软件的配置项,达到改变软件的运行模式的目的。这里提到的配置项与软件的运行模式对应,不同的配置项可以表示软件不同的运行模式。
而软件运维人员修改后的配置项易存在引起软件运行故障的错误。实际应用中,由于软件运维人员修改所得的配置项的数目较多,很难通过测试用例覆盖所有的配置项,所以通过测试用例很难检测出软件的配置项是否有误。因此,为了降低故障导致的损失,通常会预先备份修改前的代码,如果运行软件运维人员修改后的代码时出现故障,则用备份的代码替换导致故障的代码。
但是,用备份的代码替换出现故障的代码,只能从某种程度上,避免配置项错误引发的数据丢失。难以降低配置项错误导致的运行故障的发生率,进而难以降低故障造成的损失。本申请针对如何降低配置项错误导致的运行故障的发生率提出解决方案。
本申请的方案,对上述软件运维人员修改配置文件的代码导致配置项有误的状况可以适用,也可以适用于其他的配置项有误的状况。可以在正式运行软件运维人员修改后的代码前,先对应配置信息中的各配置项,确定每个配置项运行所需的运行环境;然后基于所确定的运行环境运行各配置项,再根据运行结果即确定各配置项是否有误。因此,提前可以检测出可能存在的配置错误,降低软件正式运行过程中的故障发生率,进而提高待测对象的可用性以及稳定性,同时还可以降低故障发生所造成的损失。以下结合附图对本申请实施例的检测配置错误的过程进行详细阐述。
请参阅图1,图1是本申请一示例性实施例示出的检测配置错误方法的流程图,该实施例可以包括以下步骤S101-S104:
步骤S101、获取待测对象的配置信息中的各配置项。
步骤S102、确定每个配置项运行所需的运行环境。
步骤S103、基于所确定的运行环境运行所述待测对象的各配置项。
步骤S104、根据运行结果确定所述待测对象的各配置项是否有误。
本申请实施例,可以运行于具有运行待测对象的功能的各种电子设备上,在电子设备运行待测对象前,可以通过读取待测对象的配置文件,获取待测对象的配置信息中的各配置项。这里提到的待测对象可以是电子设备内运行的各种应用APP(APPlication),也可以是提供信息搜索服务、信息推送服务、文件分布式存储服务等服务的网络系统的程序,还可以是电子设备内运行的各种系统软件,本申请对此不做限制。
一般情况下,待测对象不同时,配置项的具体样式、类型、数目等属性有所不同,针对不同的待测对象获取配置项时,可以预先确定每种待测对象的配置项的样式、类型、数目等属性,然后根据属性从配置文件中读取各配置项。
某些例子中,为了提高检测配置项的效率,可以在确定每个配置项运行所需的运行环境前,先判断获取的每个配置项与预定的副作用配置项是否一致;如果任一配置项与预定的副作用配置项不一致,则确定该配置项运行所需的运行环境;如果任一配置项与预定的副作用配置项一致,则确定该配置项有误。这里提到的副作用配置项,可以指明显会导致待测对象发生运行故障的配置项,如对待测对象的其他配置项的代码或者非配置项的代码有负面影响,均会导致待测对象发生运行故障。其他例子中,副作用配置项还可以指明显会导致其他对象发生运行故障的配置项,这里的其他对象可以指与待测对象运行于同一计算机设备上的软件。
考虑到待测对象的实际运行环境涉及的环境内容较多,模拟其实际运行环境的难度较大,而且运行整个待测对象消耗的时间较多。所以在检测配置项错误时,仅确定配置项的运行所需的运行环境,在确定运行环境时,可以从获取的每个配置项中,读取每个配置项的操作命令、命令指向的对象以及对象所在的位置;基于每个配置项的操作命令、命令指向的对象以及对象所在的位置,生成为每个配置项提供虚拟运行环境的代码。
在确定好每个配置项的运行环境后,可以构建实际的运行环境,基于实际的运行环境对待测对象的配置项进行运行,考虑到待测对象的配置错误导致的运行故障会对其他对象造成损失,可以对各配置项进行虚拟运行,在虚拟运行前,将所确定的运行环境作为沙箱环境,创建与所述待测对象对应的沙箱,然后控制所述待测对象的各配置项在创建的沙箱内运行。
实际应用中,创建与所述待测对象对应的沙箱时,可以对应所确定的运行环境,生成用于描述所确定的运行环境的代码,考虑到不同的配置项之间可能相互影响,可以将生成的代码注入到所述待测对象的源码中,再将注入代码后的源码输送到初始化的沙箱内运行。这样各配置项可以在同一个沙箱内依次执行,如果在线运行的配置项的错误导致在后运行的配置项运行出错,可以根据在后运行的配置项的错误报告,查找到导致其出错的配置项。一般情况下,初始化的沙箱为具有默认的执行环境,可以适用于各种待测对象。
在初始化的沙箱内运行代码时,可以先运行各描述各配置项的运行环境的代码,构建出各配置项的虚拟运行环境,然后在虚拟运行环境中运行各配置项的代码。
在其他例子中,如果无需考虑不同配置项之间的相互影响,可以分别为各配置项创建一个沙箱,也可以将各配置项以及描述各配置项的运行环境的代码按序输入沙箱,每运行完一个配置项,并基于配置项的运行结果确定该配置项是否有误后,再将另一配置项以及描述该配置项的运行环境的代码输入沙箱进行运行。
配置项的运行完成后,会输出配置项的运行结果,可以预先设定配置项的运行结果所含的内容,某些例子中,在运行故障时,运行结果可以包括报错提示,该报错提示可以描述故障内容以及引起故障的原因。其他例子中,运行结果还可以包括运行所消耗的资源的资源量,如:配置项为每隔预定时段上传指定文件到服务器时,运行结果可以包括预定时段内的网络流量消耗量。在其他例子中,运行结果中还可以包括内存消耗量等,本申请实施例对此不做限制。
针对各配置项的运行结果,本申请实施例可以通过以下操作确定所述待测对象的各配置项是否有误:
如果任一配置项的运行结果含有报错提示,则基于该报错提示查找导致报错的配置项,并确定查找到的配置项有误。
如果任一配置项的运行结果所含的资源消耗量超过资源阈值,则确定该配置项有误。
在检测出待测对象中有误的配置项后,本申请的设计人员针对不同的待测对象,可以对注入源码中的描述所确定的运行环境的代码采取不同的措施。例如,待测对象是提供信息搜索服务、信息推送服务、文件分布式存储服务等服务的网络系统的程序,面向的是软件管理员、软件运维人员等具有软件编程能力的专业人员,可以将描述所确定的运行环境的代码保留在待测对象的源码中,以便待测对象的运行出现故障时,专业人员能快速确定出引起故障的原因。
再比如,待测对象是运行于用户终端的各种应用APP时,面向的是终端用户,终端用户没有软件编程能力,即使软件运行出现故障,也难以根据运行结果确定出引起故障的原因,所以,可以将描述所确定的运行环境的代码从所述源码中删除,反而可以提高待测对象的用户体验。
由上述实施例可知,本申请的检测配置错误的方法,可以检测各种软件的配置项是否有误,避免配置项错误引发的数据丢失的同时,可以降低配置项错误导致的运行故障的发生率,进而可以有效降低故障造成的损失。例如,使用本申请的检测配置错误的方法,检测提供搜索服务的搜索引擎应用的配置错误,可以避免搜索引擎应用因为配置错误,导致数百万的用户在长时间内无法进行信息搜索。再比如,使用本申请的检测配置错误的方法,检测特定的机器学习系统,可以避免机器学习系统因配置错误,导致巨大的资源消耗,进而避免整个集群被拖慢或者整个集群宕机。
以下结合图2列举一个应用实例,该应用实例中,软件开发方完成待测软件(如应用APP)的开发后,可以将应用APP的源码提供给不同的应用推广方,各软应用推广方为了适应自身的应用场景的需求,可以由各自的软件运维人员以修改软件的配置文件的代码的形式,修改软件的配置项,针对修改后的源码,各应用推广方在向终端用户推广该应用APP时,可以通过以下步骤检测修改后的源码的配置项是否有误:
步骤S201、从待测软件的源码中抽取各配置项。
步骤S202、分别对应抽取的各配置项确定各配置项运行所需的运行环境。
步骤S203、生成用于描述所确定的运行环境的代码。
步骤S204、将生成的代码注入到所述待测软件的源码中。
步骤S205、将注入代码后的源码输送到初始化的沙箱内运行。
步骤S206、根据运行结果确定所述待测软件的各配置项是否有误。
本申请实施例涉及的技术内容与图1所示的步骤涉及的技术内容相应,在此不再赘述。
如果检测出有误的配置项,软件运维人员更正有误的配置项后,再向终端用户推广应用APP,这样可以降低应用APP运行于用户终端时的运行故障发生率,提高应用APP的可用性、稳定性和用户体验度。
与前述检测配置错误的方法的实施例相对应,本申请还提供了检测配置错误的装置的实施例。
参见图3,图3是本申请一示例性实施例示出的检测配置错误的装置的逻辑框图,该装置可以包括:配置获取模块310、环境确定模块320、配置运行模块330和配置检测模块340。
其中,配置获取模块310,用于获取待测对象的配置信息中的各配置项。
环境确定模块320,用于确定每个配置项运行所需的运行环境。
配置运行模块330,用于基于所确定的运行环境运行所述待测对象的各配置项。
配置检测模块340,用于根据运行结果确定所述待测对象的各配置项是否有误。
一些例子中,配置运行模块310可以包括:
配置运行子模块,用于将所确定的运行环境作为沙箱环境,创建与所述待测对象对应的沙箱,并控制所述待测对象的各配置项在创建的沙箱内运行。
作为例子,所述配置运行子模块可以包括:
代码生成模块,用于生成用于描述所确定的运行环境的代码;
代码注入模块,用于将生成的代码注入到所述待测对象的源码中;
代码输送模块,用于将注入代码后的源码输送到初始化的沙箱内运行。
作为例子,所述待测对象为应用APP。
作为例子,本申请实施例的检测配置错误的装置还可以包括:
代码删除模块,用于在所述配置检测模块根据运行结果确定出所述待测对象的各配置项是否有误后,将描述所确定的运行环境的代码从所述源码中删除。
另一些例子中,本申请实施例的检测配置错误的装置还可以包括:
配置预判模块,用于在所述环境确定模块确定每个配置项运行所需的运行环境前,判断获取的每个配置项与预定的副作用配置项是否一致;
通知模块,用于在任一配置项与预定的副作用配置项不一致时,通知所述环境确定模块确定该配置项运行所需的运行环境;
有误配置确定模块,用于在任一配置项与预定的副作用配置项一致时,确定该配置项有误。
另一些例子中,配置检测模块340可以包括:
第一检测模块,用于在任一配置项的运行结果含有报错提示时,基于该报错提示查找导致报错的配置项,并确定查找到的配置项有误;
第二检测模块,用于在任一配置项的运行结果所含的资源消耗量超过资源阈值时,确定该配置项有误。
上述装置中各个单元(或模块)的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元或模块可以是或者也可以不是物理上分开的,作为单元或模块显示的部件可以是或者也可以不是物理单元或模块,即可以位于一个地方,或者也可以分布到多个网络单元或模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本申请检测配置错误的装置的实施例可以应用在电子设备上。具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现中,电子设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备、互联网电视、智能机车、无人驾驶汽车、智能冰箱、其他智能家居设备或者这些设备中的任意几种设备的组合。
装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器等可读介质中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图4所示,为本申请检测配置错误的装置所在电子设备的一种硬件结构图,除了图4所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的电子设备通常根据该电子设备的实际功能,还可以包括其他硬件,对此不再赘述。电子设备的存储器可以存储处理器可执行程序指令;处理器可以耦合存储器,用于读取所述存储器存储的程序指令,并作为响应,执行如下操作:获取待测对象的配置信息中的各配置项;确定每个配置项运行所需的运行环境;基于所确定的运行环境运行所述待测对象的各配置项;根据运行结果确定所述待测对象的各配置项是否有误。
在其他实施例中,处理器所执行的操作可以参考上文方法实施例中相关的描述,在此不予赘述。
此外,本申请实施例还提供一种计算机存储介质(机器可读介质),所述存储介质中存储有程序指令,所述程序指令包括:
获取待测对象的配置信息中的各配置项;
确定每个配置项运行所需的运行环境;
基于所确定的运行环境运行所述待测对象的各配置项;
根据运行结果确定所述待测对象的各配置项是否有误。
本申请实施例可采用在一个或多个其中包含有程序代码的存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。计算机可用存储介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括但不限于:相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。