一种软件故障定位方法、装置及终端与流程

文档序号:23395919发布日期:2020-12-22 14:03阅读:160来源:国知局
一种软件故障定位方法、装置及终端与流程

本申请属于软件持续集成技术领域,尤其涉及一种软件故障定位方法、装置及终端。



背景技术:

目前,终端设备一般通过安装具备各种功能的软件来丰富自身的功能,例如,安卓系统的手机上可以安装各式各样的安卓应用(智能手机中的软件也称为应用)。

在软件开发中,很多软件(应用)是需要多人的团队合作开发的,即团队开发成员需要经常集成他们的工作,这也意味着软件开发过程中可能会发生多次集成。

随着现在软件项目复杂度的增加,意味着软件结构越来越复杂、规模越来越大,这时通常会把一个产品分成若干个甚至十几个开发模块进行开发、集成,不同的开发模块对应有不同的项目代码仓库,而每个开发模块又被划分为几个阶段进行:代码同步、代码编译、构造打包、注入编译、测试编译、单元测试等等,并且每天每个产品的每个开发模块都会频繁地进行多次集成。而集成的次数越多则代表软件项目的进度节点越多,产生的软件项目版本也越多,这导致在出现软件故障问题时,通常需要在不同的软件版本中遍历子项目代码仓库以定位故障发生于哪个子项目代码仓库中,难以快速、精确地定位软件代码的具体故障。



技术实现要素:

本申请实施例提供了一种软件故障定位方法、装置及终端,以解决现有软件持续集成中,在出现软件故障问题时,通常需要在不同的软件版本中遍历子项目代码仓库以定位故障发生于哪个子项目代码仓库中,难以快速、精确地定位软件代码的具体故障的问题。

本申请实施例的第一方面提供了一种软件故障定位方法,包括:

获取软件故障信息对应的软件的版本编号;

根据所述版本编号,确定与所述软件对应的构建集成信息文件;所述构建集成信息文件中集成有所述软件中包含的每一子项目代码仓库的构建数据,所述软件包括至少一个所述子项目代码仓库;

根据所述软件故障信息及所述构建数据,从至少一个所述子项目代码仓库中定位得到故障发生的目标子项目代码仓库。

本申请实施例的第二方面提供了一种软件故障定位装置,包括:

第一获取模块,用于获取软件故障信息对应的软件的版本编号;

确定模块,用于根据所述版本编号,确定与所述软件对应的构建集成信息文件;所述构建集成信息文件中集成有所述软件中包含的每一子项目代码仓库的构建数据,所述软件包括至少一个所述子项目代码仓库;

故障定位模块,用于根据所述软件故障信息及所述构建数据,从至少一个所述子项目代码仓库中定位得到故障发生的目标子项目代码仓库。

本申请实施例的第三方面提供了一种终端,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面所述方法的步骤。

本申请实施例的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面所述方法的步骤。

本申请的第五方面提供了一种计算机程序产品,当所述计算机程序产品在终端上运行时,使得所述终端执行上述第一方面所述方法的步骤。

由上可见,本申请实施例中,通过获取软件故障信息对应的软件的版本编号,根据该版本编号,确定与软件对应的集成有软件中包含的每一子项目代码仓库的构建数据的构建集成信息文件,以根据该软件故障信息及构建数据,从子项目代码仓库中定位得到故障发生的目标子项目代码仓库。该方案实现在故障发生时,利用软件版本编号,查找到与当前版本编号相对应的子项目代码仓库的构建数据,并进一步根据该构建数据及故障信息,排查出故障发生的目标子项目代码仓库,提升故障定位的便捷度及准确度。

附图说明

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

图1是本申请实施例提供的一种软件故障定位方法的流程图一;

图2是本申请实施例提供的一种软件故障定位方法的流程图二;

图3是本申请实施例提供的一种多项目构建集成的框架结构图;

图4是本申请实施例提供的一种软件故障定位装置的结构图;

图5是本申请实施例提供的一种终端的结构图。

具体实施方式

以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。

应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。

还应当理解,在此本申请说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本申请。如在本申请说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。

还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。

如在本说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。

应理解,本实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。

为了说明本申请所述的技术方案,下面通过具体实施例来进行说明。

参见图1,图1是本申请实施例提供的一种软件故障定位方法的流程图一。如图1所示,一种软件故障定位方法,该方法包括以下步骤:

步骤101,获取软件故障信息对应的软件的版本编号。

一个软件的开发过程往往伴随着不断的代码集成操作。软件在进行一次持续集成时就会产生一个对应的版本编号,不同版本编号的软件对应于不同的软件开发进度节点。

在测出软件故障信息时,可以根据该软件故障的描述信息,判断与该软件故障信息对应的软件的版本编号。其中,可以是对软件的所有版本编号进行逐个获取,或者是通过对软件故障信息中关键信息的提取及解读,匹配与之相关的版本编号以实现对上述软件故障信息对应的软件的版本编号的获取。

其中,版本编号不同的软件之间所对应的子项目代码仓库互不相同。该互不相同具体包括版本编号不同的软件之间所对应的子项目代码仓库中的记录内容不同、版本编号不同的软件之间所对应的子项目代码仓库的数量不同、版本编号不同的软件之间所对应的子项目代码仓库的id地址不同等等。

步骤102,根据该版本编号,确定与该软件对应的构建集成信息文件。

其中,构建集成信息文件中集成有软件中包含的每一子项目代码仓库的构建数据。该软件中包括至少一个子项目代码仓库。

该软件可以是一个系统软件,或者是一个应用软件。一个软件可以将不同的功能模块设置安排不同的人员实施开发工作,形成不同的子项目代码仓库,一个子项目代码仓库中记录的是整体软件中的一个子项目模块的编程代码。

该构建数据具体为按照持续集成任务对软件中包含的每一子项目代码仓库进行构建得到。

持续集成指的是,频繁地(一天多次)将代码集成到主干。持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。

版本编号为一个唯一编号,随着软件的每一次项目集成对应生成。

一个自动构建过程,包括自动编译、分发、部署和测试等。每个版本的软件均是从不同的子项目代码仓库构建得到的,这些子项目代码仓库构建的代码节点、构建输入参数、构建环境都不尽相同。

这里,一个版本编号关联有一个构建集成信息文件,该构建集成信息文件中汇总有每一次项目集成过程中软件的子项目代码仓库的构建数据,实现对项目集成过程中子项目代码仓库的构建信息的记录及汇总。

该步骤中,通过软件的版本编号实现对记录有与该版本编号的软件对应的构建数据的构建集成信息文件的获取,以能够实现对软件的目标版本的构建数据进行追溯,实现对软件故障的判断及定位。

步骤103,根据该软件故障信息及构建数据,从至少一个子项目代码仓库中定位得到故障发生的目标子项目代码仓库。

这里,构建数据包括待构建的子项目代码仓库的识别信息、构建现场信息、不同子项目代码仓库中代码的节点信息等等。

可以根据构建数据追溯当前软件版本的软件中各子项目代码仓库的构建情况。通过对各子项目代码仓库的构建情况的获取,以实现结合软件故障信息进一步确定得到故障发生的目标子项目代码仓库。

其中,构建情况包括构建状态、构建过程描述等,构建状态例如是构建成功或构建失败,构建过程描述具体可以是尝试构建次数、构建时长、构建中出现的问题等等信息;此处仅为示例性说明,并不以此为限。

该过程中,通过软件故障信息及构建数据,实现对当前软件版本的软件中是否存在构建问题的各子项目代码仓库的排查确定,通过这两个信息,共同实现对当前版本的子项目代码仓库的构建状态的确认,以能够在出现软件问题时,快速、精确地定位相关软件代码,以提升具体故障问题的定位速度,提升故障解决效率,实现软件发布版本故障逆向定位的功能。

作为一可选的实施方式,其中根据该软件故障信息及构建数据,从至少一个子项目代码仓库中定位得到故障发生的目标子项目代码仓库,包括:

根据软件故障信息,从至少一个子项目代码仓库中确定软件故障信息的相关子项目代码仓库;根据构建数据,获取该相关子项目代码仓库的构建状态;根据构建状态,从相关子项目代码仓库中定位得到故障发生的目标子项目代码仓库。

其中,构建状态可以是构建成功的状态、构建失败的状态、或者构建过程出现时间延宕的状态等。

相关子项目代码仓库为软件故障信息所指向的一个或多个子项目代码仓库;更具体地,相关子项目代码仓库为根据软件故障信息初步确定的软件故障可能出现的子项目代码仓库。

在具体应用过程中,可以是在故障发生时,确定发生故障的软件的软件版本序号,根据版本号确定构建集成信息文件,根据构建集成信息文件中的构建数据和软件故障可能涉及的子项目代码仓库个体确定对应的构建状态,最终分析定位故障的原因,完成整个软件版本故障到集成子项目的逆向分析过程。

通过上述实施过程,软件开发者可以快速、精确地进行逆向定位分析,任一软件版本发生故障均可逆向还原子项目的构建状态,充分提高了软件版本故障解决速度、软件开发者的工作效率和软件版本的迭代速度。

本申请实施例,通过利用事先集成的构建集成信息文件与软件版本编号之间的对应关系,以能够在故障发生时,利用软件版本编号,查找到与当前版本编号相对应的子项目代码仓库的构建数据,以能够基于故障信息结合构建数据,排查出故障发生的目标子项目代码仓库,提升故障定位的便捷度及准确度。

本申请实施例中还提供了一种软件故障定位方法的不同实施方式。

参见图2,图2是本申请实施例提供的一种软件故障定位方法的流程图二。如图2所示,一种软件故障定位方法,该方法包括以下步骤:

步骤201,获取按照持续集成任务对软件中包含的每一子项目代码仓库进行构建的构建数据。

持续集成任务可以根据当前项目进度进行配置,具体可以配置构建环境、构建输入参数、构建对象等等。

该构建数据的获取可以是在构建开始前对构建配置数据的获取,或者是对构建过程中构建信息数据的获取。

作为一可选的实施方式,其中,该按照持续集成任务,对软件中包含的每一子项目代码仓库进行构建,包括:

将软件中包含的至少一个子项目代码仓库按照设定的共性信息划分为不同的构建项目组,并确定每一构建项目组对应的持续集成任务;按照该持续集成任务,对每一构建项目组中包含的子项目代码仓库进行构建。

其中,该共性信息可以是构建输入参数、仓库配置等信息中的共性信息。

一个输出版本的软件中具体可以对应几十个子项目仓库的构建,子项目仓库经常按照输入参数、仓库配置等信息的不同分为几个构建项目组,按照组别对每组中的子项目代码仓库进行构建。

在每个子项目代码仓库构建成功后输出结果保存到构建缓存中,准备进行最后的版本集成。

步骤202,在对构建完成的每一子项目代码仓库进行项目集成的情况下,对构建数据进行汇总,得到构建集成信息文件。

其中,在对每一子项目代码仓库构建完成之后,需要对构建完成的每一子项目代码仓库进行项目集成。

具体地,在按照持续集成任务,对每一构建项目组中包含的子项目代码仓库进行构建之后,还包括:输出每一构建项目组的构建结果;该对构建完成的每一子项目代码仓库进行项目集成,包括:将每一构建项目组的构建结果进行集成。

在具体实施时,可以将每一构建项目组的构建结果与每一子项目代码仓库对应的构建数据一同输出到构建输出缓存中。

结合图3所示,在执行软件持续集成任务时,可以是依次对不同的构建项目组进行构建,通过构建单元对每一构建项目组中包含的子项目代码仓库进行构建,构建的结果会存储至构建输出缓存中,在项目集成阶段,在将每一构建项目组的构建结果进行集成的同时,也将构建输出缓存中的构建数据进行集成,得到构建集成信息文件。

步骤203,将构建集成信息文件与项目集成后的软件的版本编号进行关联存储。

对构建数据进行汇总时,可以是将构建数据进行统一的格式化存储并随软件版本一同发布,使得目标软件版本对应的每个子项目代码仓库的构建集成现场、环境等关键信息都被统一格式化存储下来并随软件版本一同发布,以能够实现软件发布版本的故障逆向定位功能。

其中,一个软件版本包含了唯一的构建集成信息文件,该文件将可以用来进行基于软件版本的故障逆向定位操作。

将在每个构建单元中统一增加构建参数、现场状态等关键信息记录动作,并随构建结果一同输出到构建输出缓存中,在项目集成阶段,构建脚本自动汇总所有子项目构建缓存的信息,并格式化保存到统一的文件中。

将遍历所有要集成的子项目,将每个子项目的构建信息统一汇总输出到指定文件中,这样任何一个软件版本都包含了唯一的构建集成信息文件,该文件将可以用来进行软件版本逆向操作。

该过程中,在软件产品版本构建输出时,每个子项目代码仓库的构建集成现场、构建环境等关键信息得到规范有效的记录、管理,以在输出发布的版本出现软件问题时,快速确认该软件版本中子项目代码仓库的状态,快速、精确的定位软件代码的具体问题。

步骤204,获取软件故障信息对应的软件的版本编号。

该步骤的实现方式与前述实施中的步骤101的实现方式相同,此处不再赘述。

步骤205,根据该版本编号,确定与该软件对应的构建集成信息文件。

该构建集成信息文件中集成有软件中包含的每一子项目代码仓库的构建数据。该软件中包括至少一个子项目代码仓库。

该步骤的实现方式与前述实施中的步骤102的实现方式相同,此处不再赘述。

步骤206,根据该软件故障信息及构建数据,从至少一个子项目代码仓库中定位得到故障发生的目标子项目代码仓库。

该步骤的实现方式与前述实施中的步骤103的实现方式相同,此处不再赘述。

本申请实施例中,通过获取按照持续集成任务对软件中包含的每一子项目代码仓库进行构建的构建数据,在对构建完成的每一子项目代码仓库进行项目集成的情况下,对构建数据进行汇总,得到构建集成信息文件,将构建集成信息文件与项目集成后的软件的版本编号进行关联存储,在检测出软件故障信息的情况下,获取软件故障信息对应的软件的版本编号,根据该版本编号,确定与软件对应的集成有软件中包含的每一子项目代码仓库的构建数据的构建集成信息文件,以根据该软件故障信息及构建数据,从子项目代码仓库中定位得到故障发生的目标子项目代码仓库。该方案实现在软件项目的持续集成过程中,将构建数据进行记录及汇总得到构建集成信息文件,并建立构建集成信息文件与软件版本编号之间的对应关系,以能够在故障发生时,利用软件版本编号,查找到与当前版本编号相对应的子项目代码仓库的构建数据,并进一步根据故障信息及构建数据,排查出故障发生的目标子项目代码仓库,提升故障定位的便捷度及准确度。

参见图4,图4是本申请实施例提供的一种软件故障定位装置的结构图,为了便于说明,仅示出了与本申请实施例相关的部分。

该软件故障定位装置400包括:

第一获取模块401,用于获取软件故障信息对应的软件的版本编号;

确定模块402,用于根据所述版本编号,确定与所述软件对应的构建集成信息文件;所述构建集成信息文件中集成有所述软件中包含的每一子项目代码仓库的构建数据,所述软件包括至少一个所述子项目代码仓库;

故障定位模块403,用于根据所述软件故障信息及所述构建数据,从至少一个所述子项目代码仓库中定位得到故障发生的目标子项目代码仓库。

其中,所述故障定位模块403具体用于:

根据所述软件故障信息,从至少一个所述子项目代码仓库中确定所述软件故障信息的相关子项目代码仓库;

根据所述构建数据,获取所述相关子项目代码仓库的构建状态;

根据所述构建状态,从所述相关子项目代码仓库中定位得到故障发生的所述目标子项目代码仓库。

其中,该装置还包括:

第二获取模块,用于获取按照持续集成任务对软件中包含的每一子项目代码仓库进行构建的构建数据;

集成模块,用于在对构建完成的每一所述子项目代码仓库进行项目集成的情况下,对所述构建数据进行汇总,得到构建集成信息文件;

关联存储模块,用于将所述构建集成信息文件与项目集成后的所述软件的版本编号进行关联存储。

其中,该装置还包括:

构建模块,用于将软件中包含的至少一个所述子项目代码仓库按照设定的共性信息划分为不同的构建项目组,并确定每一所述构建项目组对应的持续集成任务;按照所述持续集成任务,对每一所述构建项目组中包含的子项目代码仓库进行构建。

该装置还包括:输出模块,用于输出每一所述构建项目组的构建结果;对应地,该集成模块具体用于将每一所述构建项目组的构建结果进行集成。

本申请实施例提供的软件故障定位装置能够实现上述软件故障定位方法的实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。

图5是本申请实施例提供的一种终端的结构图。如该图所示,该实施例的终端5包括:至少一个处理器50(图5中仅示出一个)、存储器51以及存储在所述存储器51中并可在所述至少一个处理器50上运行的计算机程序52,所述处理器50执行所述计算机程序52时实现上述任意各个方法实施例中的步骤。

所述终端5可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述终端5可包括,但不仅限于,处理器50、存储器51。本领域技术人员可以理解,图5仅仅是终端5的示例,并不构成对终端5的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端还可以包括输入输出设备、网络接入设备、总线等。

所述处理器50可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

所述存储器51可以是所述终端5的内部存储单元,例如终端5的硬盘或内存。所述存储器51也可以是所述终端5的外部存储设备,例如所述终端5上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,所述存储器51还可以既包括所述终端5的内部存储单元也包括外部存储设备。所述存储器51用于存储所述计算机程序以及所述终端所需的其他程序和数据。所述存储器51还可以用于暂时地存储已经输出或者将要输出的数据。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

在本申请所提供的实施例中,应该理解到,所揭露的装置/终端和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序产品来实现,当计算机程序产品在终端上运行时,使得所述终端执行时实现可实现上述各个方法实施例中的步骤。

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

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