掌桥专利:专业的专利平台
掌桥专利
首页

一种软件故障定位方法和装置

文献发布时间:2024-04-18 20:00:50


一种软件故障定位方法和装置

技术领域

本公开的实施例涉及信息技术及自动化技术领域,具体地,涉及适用于一种软件故障定位方法和装置。

背景技术

故障定位在软件开发过程中扮演着不可或缺的角色,它是软件故障修复与质量保障的必然环节。随着用户需求的不断增长和软件规模的不断增大,软件开发过程中暴露出的故障也越来越多。

尽管目前各种故障定位技术已经被广泛应用,但许多方法都存在巧合正确性问题。巧合的正确性是指在测试过程中,通过的测试用例可能会执行错误的语句,而失败的测试用例执行的语句可能不会导致测试用例失败。这种情况下,测试结果并不能真实反映软件中存在的故障,给故障定位带来了困难。

发明内容

本文中描述的实施例提供了一种软件故障定位方法和装置,克服了上述问题。

第一方面,根据本公开的内容,提供了一种软件故障定位方法,包括:

获取待定位故障对应的目标程序源码,所述目标程序源码用于故障程序测试时生成故障测试数据;

基于所述故障测试数据中不同粒度的元素特征确定突变生成算子,并将所述突变生成算子转换为适应突变器处理的抽象表示数据;

基于所述抽象表示数据生成抽象突变体;

将所述抽象突变体转换为实际源码对应的实际突变体,并提取所述实际突变体对应不同粒度故障程度的突变特征;

基于所述突变特征、故障语义特征以及故障频谱特征,训练得到多个神经网络模型,并基于每个所述神经网络模型输出的故障语句可疑得分聚合的排序结果,确定软件故障程序语句的位置。

可选的,所述将所述突变生成算子转换为适应突变器处理的抽象表示数据,包括:

规范所述突变生成算子所对应程序语句的源代码形式,并将规范化后的源代码确定为一个标记符号流,所述标记符号流中包括多个标记信息,所述标记信息为标记符或标记文字;

生成所述标记信息对应的标识数据;

基于所述标记信息对应的标识数据,确定适应所述突变器处理的所述抽象表示数据。

可选的,所述基于所述抽象表示数据生成抽象突变体,包括:

构建一个RNN编码器,基于所述RNN编码器确定所述抽象表示数据所对应程序语句的第一坐标向量表示数据,所述第一坐标向量表示数据用于描述x序列;

构建一个RNN解码器,基于所述RNN解码器确定所述抽象表示数据所对应程序语句的第二坐标向量表示数据,所述第二坐标向量表示数据用于解码第一坐标向量数据为y序列项;

基于所述第一坐标向量表示数据和所述第二坐标向量表示数据,生成所述抽象突变体。

可选的,所述提取所述实际突变体对应不同粒度故障程度的突变特征,包括:

基于多种预设突变算子确定所述实际突变体的可疑得分;

基于每种所述故障定位技术的权重数据以及多种预设突变算子确定所述实际突变体的可疑得分,确定所述实际突变体的相似度得分;

基于所述实际突变体的相似度得分,确定所述实际突变体对应不同粒度故障程度的突变特征。

可选的,所述基于所述突变特征、故障语义特征以及故障频谱特征,训练得到多个网络模型之前,还包括:

提取故障语义特征,所述故障语义特征用于描述突变程序深度语义特征;

生成故障频谱特征,所述故障频谱特征用于描述基于定位的故障程序所生成的基于频谱的特征。

可选的,所述提取故障语义特征,包括:

将突变前的故障定位程序和突变后的故障定位程序,分别转换为不同预设数量个单词序列;

分别提取所述突变前的故障定位程序转后的单词序列对应的语义向量以及所述突变后的故障定位程序转后的单词序列对应的语义向量,得到所述故障语义特征。

可选的,所述生成故障频谱特征,包括:

获取用于故障定位的定制化测试套件;

将所述定制化测试套件输入带有所述实际突变体的源代码中,得到覆盖信息和测试用例执行结果;

基于所述覆盖信息和所述测试用例执行结果,生成故障频谱特征。

可选的,多个所述神经网络模型包括:卷积神经网络模型、双向长短期记忆网络模型和多层感知神经网络模型。

可选的,所述基于每个所述神经网络模型输出的故障语句可疑得分聚合的排序结果,确定软件故障程序语句的位置,包括:

将预设测试集输入所述卷积神经网络模型中,基于所述卷积神经网络模型的输出确定第一故障语句可疑值得分;

将预设测试集输入所述双向长短期记忆网络模型中,基于所述双向长短期记忆网络模型的输出确定第二故障语句可疑值得分;

将预设测试集输入所述多层感知神经网络模型中,基于所述多层感知神经网络模型的输出确定第三故障语句可疑值得分;

基于所述第一故障语句可疑值得分、所述第二故障语句可疑值得分以及所述第三故障语句可疑值得分聚合的排序结果,确定软件故障程序语句的位置。

第二方面,根据本公开的内容,提供了一种软件故障定位装置,包括:

获取模块,用于获取待定位故障对应的目标程序源码,所述目标程序源码用于故障程序测试时生成故障测试数据;

第一处理模块,用于基于所述故障测试数据中不同粒度的元素特征确定突变生成算子,并将所述突变生成算子转换为适应突变器处理的抽象表示数据;

生成模块,用于基于所述抽象表示数据生成抽象突变体;

第二处理模块,用于将所述抽象突变体转换为实际源码对应的实际突变体,并提取所述实际突变体对应不同粒度故障程度的突变特征;

第三处理模块,用于基于所述突变特征、故障语义特征以及故障频谱特征,训练得到多个神经网络模型,并基于每个所述神经网络模型输出的故障语句可疑得分聚合的排序结果,确定软件故障程序语句的位置。

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

规范所述突变生成算子所对应程序语句的源代码形式,并将规范化后的源代码确定为一个标记符号流,所述标记符号流中包括多个标记信息,所述标记信息为标记符或标记文字;生成所述标记信息对应的标识数据;基于所述标记信息对应的标识数据,确定适应所述突变器处理的所述抽象表示数据。

可选的,生成模块,具体用于:

构建一个RNN编码器,基于所述RNN编码器确定所述抽象表示数据所对应程序语句的第一坐标向量表示数据,所述第一坐标向量表示数据用于描述x序列;构建一个RNN解码器,基于所述RNN解码器确定所述抽象表示数据所对应程序语句的第二坐标向量表示数据,所述第二坐标向量表示数据用于解码第一坐标向量数据为y序列项;基于所述第一坐标向量表示数据和所述第二坐标向量表示数据,生成所述抽象突变体。

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

基于多种预设突变算子确定所述实际突变体的可疑得分;基于每种所述故障定位技术的权重数据以及多种预设突变算子确定所述实际突变体的可疑得分,确定所述实际突变体的相似度得分;基于所述实际突变体的相似度得分,确定所述实际突变体对应不同粒度故障程度的突变特征。

可选的,还包括:提取模块。

提取模块,用于提取故障语义特征,所述故障语义特征用于描述突变程序深度语义特征。

生成模块,还用于生成故障频谱特征,所述故障频谱特征用于描述基于定位的故障程序所生成的基于频谱的特征。

可选的,提取模块,具体用于:

将突变前的故障定位程序和突变后的故障定位程序,分别转换为不同预设数量个单词序列;分别提取所述突变前的故障定位程序转后的单词序列对应的语义向量以及所述突变后的故障定位程序转后的单词序列对应的语义向量,得到所述故障语义特征。

可选的,生成模块,具体用于:

获取用于故障定位的定制化测试套件;将所述定制化测试套件输入带有所述实际突变体的源代码中,得到覆盖信息和测试用例执行结果;基于所述覆盖信息和所述测试用例执行结果,生成故障频谱特征。

可选的,多个所述神经网络模型包括:卷积神经网络模型、双向长短期记忆网络模型和多层感知神经网络模型。

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

将预设测试集输入所述卷积神经网络模型中,基于所述卷积神经网络模型的输出确定第一故障语句可疑值得分;将预设测试集输入所述双向长短期记忆网络模型中,基于所述双向长短期记忆网络模型的输出确定第二故障语句可疑值得分;将预设测试集输入所述多层感知神经网络模型中,基于所述多层感知神经网络模型的输出确定第三故障语句可疑值得分;基于所述第一故障语句可疑值得分、所述第二故障语句可疑值得分以及所述第三故障语句可疑值得分聚合的排序结果,确定软件故障程序语句的位置。

第三方面,提供一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

存储器,用于存放计算机程序;

处理器,用于执行存储器上所存放的程序时,实现上述任意一种软件故障定位方法的步骤。

第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一种软件故障定位方法的步骤。

第五方面,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一种软件故障定位方法的步骤。

本申请实施例提供的软件故障定位方法,旨在缓解基于覆盖的故障定位方法中偶然性成功测试用例对故障定位结果的负面影响。通过获取待定位故障对应的目标程序源码,目标程序源码用于故障程序测试时生成故障测试数据;基于故障测试数据中不同粒度的元素特征确定突变生成算子,并将突变生成算子转换为适应突变器处理的抽象表示数据;基于抽象表示数据生成抽象突变体;将抽象突变体转换为实际源码对应的实际突变体,并提取实际突变体对应不同粒度故障程度的突变特征;基于突变特征、故障语义特征以及故障频谱特征,训练得到多个神经网络模型,并基于每个神经网络模型输出的故障语句可疑得分聚合的排序结果,确定软件故障程序语句的位置。如此,利用突变分析技术和深度学习模型相结合,通过分析软件系统在不同输入条件下产生的输出变化,定位出软件故障程序语句的具体位置,降低巧合正确性对软件故障定位准确性的影响。

上述说明仅是本申请实施例技术方案的概述,为了能够更清楚了解本申请实施例的技术手段,而可依照说明书的内容予以实施,并且为了让本申请实施例的上述和其它目的、特征和优点能够更明显易懂,以下特举本申请的具体实施方式。

附图说明

为了更清楚地说明本公开的实施例的技术方案,下面将对实施例的附图进行简要说明,应当知道,以下描述的附图仅仅涉及本公开的一些实施例,而非对本公开的限制,其中:

图1是本公开提供的一种软件故障定位方法的流程示意图。

图2是本公开提供的另一种软件故障定位方法的流程示意图。

图3是本公开提供的一种软件故障定位装置的结构示意图。

图4是本公开提供的一种电子设备的结构示意图。

需要注意的是,附图中的元素是示意性的,没有按比例绘制。

具体实施方式

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

除非另外定义,否则在此使用的所有术语(包括技术和科学术语)具有与本公开主题所属领域的技术人员所通常理解的相同含义。进一步将理解的是,诸如在通常使用的词典中定义的那些的术语应解释为具有与说明书上下文和相关技术中它们的含义一致的含义,并且将不以理想化或过于正式的形式来解释,除非在此另外明确定义。如在此所使用的,将两个或更多部分“连接”或“耦接”到一起的陈述应指这些部分直接结合到一起或通过一个或多个中间部件结合。

在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语“实施例”并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。

本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:存在A,同时存在A和B,存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。诸如“第一”和“第二”的术语仅用于将一个部件(或部件的一部分)与另一个部件(或部件的另一部分)区分开。

在本申请的描述中,除非另有说明,“多个”的含义是指两个以上(包括两个),同理,“多组”指的是两组以上(包括两组)。

本发明通过将频谱技术、突变分析技术和语义分析技术进行集成。频谱技术可以通过对软件运行时产生的数据进行分析,提取出关键信息,帮助定位故障。突变分析技术可以检测软件运行过程中的变化,并找出导致故障的原因。语义分析技术则可以对软件代码进行静态分析,发现潜在的问题。

通过结合多种定位技术的优势,能够规避巧合正确性的问题,提高软件定位准确率和软件的可靠性。同时,本发明还可以降低软件维护成本,因为故障能够更早地被发现和修复,减少了后续修复工作的难度和时间成本,这对于提高软件开发效率和保证软件质量具有重要意义。

为了使本技术领域的人员更好地理解本申请方案,下面将结合附图,对本申请实施例中的技术方案进行清楚、完整地描述。

图1是本公开实施例提供的一种软件故障定位方法的流程示意图,软件故障定位方法包括:

S110、获取待定位故障对应的目标程序源码,目标程序源码用于故障程序测试时生成故障测试数据。

其中,可根据定位需求,获取需要定位故障的目标程序源码,目标程序源码用于故障定位基础数据生成。

S120、基于故障测试数据中不同粒度的元素特征确定突变生成算子,并将突变生成算子转换为适应突变器处理的抽象表示数据。

其中,可通过构建故障程序特征提取器,提取故障定位目标程序不同粒度元素的特征,选择突变生成算子。并通过构建抽象器,将故障程序特征提取器所选择的突变生成算子转换为更适合突变器处理的抽象表示。

构建故障程序特征提取器,提取故障定位目标程序的不同粒度元素的特征,选择突变生成算子,可包括:使用抽象语法树查询故障定位程序中的不同粒度的元素,并通过分析和过滤操作,确定突变生成算子;提取器将元素与预设突变算子(如语句突变算子、运算符突变算子、变量突变算子、常量突变算子)进行匹配,输出匹配结果。

在一些实施例中,可选的,将突变生成算子转换为适应突变器处理的抽象表示数据,包括:

规范突变生成算子所对应程序语句的源代码形式,并将规范化后的源代码确定为一个标记符号流,标记符号流中包括多个标记信息,标记信息为标记符或标记文字;生成标记信息对应的标识数据;基于标记信息对应的标识数据,确定适应突变器处理的抽象表示数据。

举例而言,对于每个程序语句,抽象器规范其源代码形式,删除其中任何注释,并以完全限定的方式表示其类型(语句突变算子、运算符突变算子、变量突变算子、常量突变算子)。

将规范后的源代码读取为一个标记符号流,然后将标记符号流通过开源语法分析器(如ANTLR)进行解析,识别每个标识符的角色(例如,它是否代表一个变量、方法或类型名称)和标记文字的类型(例如,STRING、CHAR、INT、FLOAT等);

抽象器为标记符号流中的每个标记符或文字生成并替换一个唯一的标识数据,如ID(IDentity,身份标识),如果一个标记符或标记文字在流中出现多次,它将被替换为相同的ID,ID可使用以下格式表示:_#,其中是指标识符的角色(即VAR、TYPE、METHOD)或文字类型(即STRING、CHAR、INT、FLOAT),而#是一个数字ID。

如此,对于每个突变前的程序语句,抽象器生成一个抽象版本和一个映射文件映射,其中保存标记符或文字与其对应的映射关系。

S130、基于抽象表示数据生成抽象突变体。

其中,可通过构建突变器,根据抽象器表示的结果,基于递归神经网络生成抽象的突变体,即构建突变器,按照抽象器表示的规范化定位程序源代码生成抽象突变体。

在一些实施例中,可选的,基于抽象表示数据生成抽象突变体,包括:

构建一个RNN编码器,基于RNN编码器确定抽象表示数据所对应程序语句的第一坐标向量表示数据,第一坐标向量表示数据用于描述x序列;构建一个RNN解码器,基于RNN解码器确定抽象表示数据所对应程序语句的第二坐标向量表示数据,第二坐标向量表示数据用于解码第一坐标向量数据为y序列项;基于第一坐标向量表示数据和第二坐标向量表示数据,生成抽象突变体。

其中,构建一个RNN(Recurrent Neural Network,循环神经网络)编码器,它能够将程序语句序列编码为向量表示;构建一个RNN解码器,它能够将表示解码为一个序列项;最后利用Beam搜索算法生成多个抽象突变体。

构建一个RNN编码器,它将程序语句序列编码为向量表示,包括:给定一个输入序列x=m

以一个序列x=(x

构建一个RNN解码器,它将表示解码为一个y序列项,包括:最小化目标项的负对数似然,并使用随机梯度下降算法,对整个模型进行端到端训练(编码器和解码器拼接),最后输出h的目标序列y=(y

S140、将抽象突变体转换为实际源码对应的实际突变体,并提取实际突变体对应不同粒度故障程度的突变特征。

其中,通过构建转换器,转换器将突变体生成的抽象突变体转换为真实的源代码,形成符合实际的突变体。

举例而言,转换器通过映射关系来替换所有原始标记符或标记文字,同时替换由抽象器生成并由突变器修改的ID;如果缺失的ID引用了文字(即STRING、CHAR、INT、FLOAT)时,它将生成一个新的文字(指定类型的),以确保在原始语句m中没有定义(因为它已经被ID引用)。

相反,如果缺失的ID引用了变量或方法调用时,转换器将丢弃当前的突变体并选择下一个突变体,一旦m

在一些实施例中,可选的,提取实际突变体对应不同粒度故障程度的突变特征,包括:

基于多种预设突变算子确定实际突变体的可疑得分;基于每种故障定位技术的权重数据以及多种预设突变算子确定实际突变体的可疑得分,确定实际突变体的相似度得分;基于实际突变体的相似度得分,确定实际突变体对应不同粒度故障程度的突变特征。

举例而言,分别通过如下公式(1)-(5)计算每种故障定位技术确定得到的实际突变体的可疑得分。

其中,公式(1)对应Tarantula突变算子计算实际突变体的可疑得分,公式(2)对应Barinel突变算子计算实际突变体的可疑得分,公式(3)对应Ample突变算子计算实际突变体的可疑得分,公式(4)对应Ochiai突变算子计算实际突变体的可疑得分,公式(5)对应Dstar突变算子计算实际突变体的可疑得分。

M(e)表示代码元素e的所有突变体,N

结合Learning to rank算法为所有故障定位技术分配权重,并通过下式(6)计算每一个突变体的相似度得分。

其中,w

Learning to rank算法学习故障定位目标程序和故障突变体之间的顺序,使故障定位目标程序突变体总是比故障定位目标程序具有更高的可疑度得分,其损失函数如下式(7)表示。

其中,

S150、基于突变特征、故障语义特征以及故障频谱特征,训练得到多个神经网络模型,并基于每个神经网络模型输出的故障语句可疑得分聚合的排序结果,确定软件故障程序语句的位置。

其中,构建卷积神经网络模型,并用归一化后的语义特征、突变特征、频谱特征及定位程序进行模型训练;构建多层感知神经网络模型,并用归一化后的语义特征、突变特征、频谱特征及定位程序进行模型训练;构建双向长短期记忆网络,并用归一化后的语义特征、突变特征、频谱特征及定位程序进行模型训练;输入测试集至训练好的各个神经网络获得故障可疑得分,聚合各模型输出的故障可疑分,形成每个程序语句最终可疑得分;对故障可疑值得分进行排序,根据可疑值的排序结果得到软件故障的位置。

构建卷积神经网络模型,并用归一化后的语义特征、突变特征、频谱特征及定位程序进行模型训练,包括:数据准备,归一化三类特征值:语义特征、突变特征、频谱特征;拆分数据集进行训练、验证和测试:将数据集加载到内存中,并按照8:1:1将其拆分为训练集、验证集和测试集;定义架构:一个典型的卷积神经网络主要由以下5层组成:数据输入层、卷积计算层、ReLU激励层、池化层和全连接层;定义损失函数和优化器:损失函数用于评估模型的性能,优化器用于更新网络参数以最小化损失函数;实施训练和验证,以验证训练好的网络模型的预测性能:将数据输入模型,评估准确性,作出预测,如使用训练集对模型进行训练,使用验证集对模型进行验证,以对训练好的网络模型进行调整,使用测试集对训练好的模型进行测试,以评估模型在未知数据上的性能。

构建多层感知神经网络模型,并用归一化后的语义特征、突变特征、频谱特征及定位程序进行模型训练,包括:数据准备,归一化三类特征值:语义特征、突变特征、频谱特征;拆分数据集进行训练、验证和测试:将数据集加载到内存中,并按照8:1:1将其拆分为训练集、验证集和测试集;定义模型架构:包括输入层、一个或多个隐藏层以及输出层,各层之间是完全连接的,即上一层的任何一个神经元与下一层的所有神经元都有连接,并确定每一层的神经元数量;前向传播算法:在前向传播阶段,信息从输入层流向隐藏层,最终到达输出层,对数据的每个特征进行加权求和,并将结果传递给激活函数以产生输出;损失函数和优化器的定义:损失函数用来衡量预测值与真实值之间的差距,而优化器则被用来更新网络中的权重和偏置,以最小化损失函数;实施训练算法:使用训练集对模型进行训练,并通过反向传播算法根据误差来更新网络参数;模型评估:在验证集或测试集上评估模型的性能,确保模型不仅在训练数据上表现良好,也能推广到未见过的数据;调参优化:通过调整模型的各种超参数如学习率、批次大小等来进一步优化模型性能。

构建双向长短期记忆网络,包括:数据准备,归一化三类特征值:语义特征、突变特征、频谱特征;拆分数据集进行训练、验证和测试:将数据集加载到内存中,并按照8:1:1将其拆分为训练集、验证集和测试集;定义模型架构:双向长短记忆网络包括输入层、双向LSTM隐藏层以及输出层,特别地,在双向LSTM中,信息会从正向和反向两个方向流动,这使得网络能够更好地捕捉到时间序列数据中前后关联的特征;前向传播算法:在前向传播阶段,信息从输入层流向隐藏层,最终到达输出层,网络会对数据的每个特征进行加权求和,并将结果传递给激活函数以产生输出;损失函数和优化器的定义:损失函数用来衡量预测值与真实值之间的差距,而优化器则被用来更新网络中的权重和偏置,以最小化损失函数;实施训练算法:在训练阶段,使用训练集对模型进行训练,并通过反向传播算法根据误差来更新网络参数;模型评估:在验证集或测试集上评估模型的性能,以确保模型不仅在训练数据上表现良好,也能推广到未见过的数据;调参优化:通过调整模型的各种超参数如学习率、批次大小等来进一步优化模型性能。

在一些实施例中,可选的,基于突变特征、故障语义特征以及故障频谱特征,训练得到多个神经网络模型之前,还包括:

提取故障语义特征,故障语义特征用于描述突变程序深度语义特征;生成故障频谱特征,故障频谱特征用于描述基于定位的故障程序所生成的基于频谱的特征。提取故障程序及突变程序深度语义特征,能够为突变分析提供多方面的分析信息。

在一些实施例中,可选的,提取故障语义特征,包括:

将突变前的故障定位程序和突变后的故障定位程序,分别转换为不同预设数量个单词序列;分别提取突变前的故障定位程序转后的单词序列对应的语义向量以及突变后的故障定位程序转后的单词序列对应的语义向量,得到故障语义特征。

举例而言,将突变前的故障定位程序和突变后的故障定位程序,转换为m、n个单词序列{w’,w’

一方面,利于突变前定位程序处理模块提取突变前定位程序中存在的故障语义信息,包含一个嵌入层和一个故障报告编码器两个部分。

对于故障定位程序,将其视为n个代码标记的序列{w’,w’

在将给定的故障定位程序嵌入到一个符号表示序列之后,根据多个粒度对其进行分割,包括代码标记、代码语句和代码函数。

构建基于DCNN(Deep ConvolutionNeuralNetwork,深度卷积神经网络)层和BiLSTM(Bi-directional Long Short-TermMemory,双向长短期记忆)层组成的特定网络MDCL(Multiple DCNN Layers&BiLSTM Layer,多层深度卷积神经网络)作为源文件编码器,学习多粒度信息,包括:选择属于一个函数的所有标记表示作为多个DCNN层的输入,第一个DCNN层用于表示基于语句中的令牌的语句的语义,随后的DCNN层用于学习由多个语句所传达的语义,同时保持语句的完整性;采用动态k-max池化操作处理不同长度的代码函数,其中k是一组动态值,这取决于输入函数的符号数量和网络的深度,具体计算方式如下式(8)表示:

其中,l为应用池化的当前卷积层数,L为网络中卷积层的总数,k

将函数表示序列输入到BiLSTM层,学习函数之间的依赖关系。为简单起见,将函数依赖性提取表示为式(9)-(11)表示:

另一方面,突变后定位程序处理模块提取定位程序突变后存在的故障语义信息,包含一个嵌入层和一个源文件编码器。

通过嵌入层,将突变前的故障定位程序采用深度双向语言模型表示为一个单词嵌入序列{w

利用基于BiLSTM构成的AttL编码器对故障报告进行编码,包括:

构建BiLSTM,将一个前向隐藏状态

/>

其中,w

此外,用于过滤故障定位程序中与故障无关的噪声,采用软注意力机制,来考虑bug报告中所有单词的影响,计算最终的程序表达v

其中,α

最终,采用一个包含平均池化操作的池化层来融合投影层,将突变前后的故障定位程序表示进行线性变换,从而将单个表示协调到一个协调的嵌入空间中。

在一些实施例中,可选的,生成故障频谱特征,包括:

获取用于故障定位的定制化测试套件;将定制化测试套件输入带有实际突变体的源代码中,得到覆盖信息和测试用例执行结果;基于覆盖信息和测试用例执行结果,生成故障频谱特征。

举例而言,将测试套件输入带有突变体的源代码,统计覆盖信息和测试用例执行结果;选择Tarantula、Barinel、Ample、Ochiai及DStar作为基于频谱的特征提取方法。

各频谱方法采用如下公式(15)-(19)表示:计算可疑分数:

其中,N

结合Learning to rank算法为所有故障定位技术分配权重,并通过公式(6)计算每一个突变体的相似度得分,如公式(6)所示。并通过公式(7)输出基于可疑分数排序的代码元素排序表。

在一些实施例中,可选的,多个神经网络模型包括:卷积神经网络模型、双向长短期记忆网络模型和多层感知神经网络模型。

在一些实施例中,可选的,基于每个神经网络模型输出的故障语句可疑得分聚合的排序结果,确定软件故障程序语句的位置,包括:

将预设测试集输入卷积神经网络模型中,基于卷积神经网络模型的输出确定第一故障语句可疑值得分;将预设测试集输入双向长短期记忆网络模型中,基于双向长短期记忆网络模型的输出确定第二故障语句可疑值得分;将预设测试集输入多层感知神经网络模型中,基于多层感知神经网络模型的输出确定第三故障语句可疑值得分;基于第一故障语句可疑值得分、第二故障语句可疑值得分以及第三故障语句可疑值得分聚合的排序结果,确定软件故障程序语句的位置。

其中,输入测试集至训练好的各个神经网络模型中获得故障语句可疑得分,聚合各模型输出的故障语句可疑得分,形成每个故障程序语句最终可疑得分,包括:使用下式(20)对语句e

Susp val(e

对故障语句可疑值得分进行排序,根据可疑值的排序结果得到软件故障程序语句的位置,包括:根据可疑值得分,对源程序所有的语句进行降序排列;排在前面的语句存在故障的可能性较大,逐一测试查,最终找到故障存在的语句。

本实施例中,通过获取待定位故障对应的目标程序源码,目标程序源码用于故障程序测试时生成故障测试数据;基于故障测试数据中不同粒度的元素特征确定突变生成算子,并将突变生成算子转换为适应突变器处理的抽象表示数据;基于抽象表示数据生成抽象突变体;将抽象突变体转换为实际源码对应的实际突变体,并提取实际突变体对应不同粒度故障程度的突变特征;基于突变特征、故障语义特征以及故障频谱特征,训练得到多个神经网络模型,并基于每个神经网络模型输出的故障语句可疑得分聚合的排序结果,确定软件故障程序语句的位置。如此,利用突变分析技术和深度学习模型相结合,通过分析软件系统在不同输入条件下产生的输出变化,定位出软件故障程序语句的具体位置,降低巧合正确性对软件故障定位准确性的影响。

如图2所示,本发明旨在缓解基于覆盖的故障定位(Coverage—Based FaultLocalization,CBFL)方法中偶然性成功测试用例对故障定位结果的负面影响。包括:获取故障定位的目标程序、用于故障定位的定制化测试套件;构建故障程序特征提取器,提取故障定位目标程序不同粒度元素的特征,选择突变生成算子;构建抽象器,根据特征提取器所选择突变算子,将定位的程序转换为更适合突变器处理的抽象表示;构建突变器,根据抽象器表示的结果,基于递归神经网络(RNN)生成抽象的突变体;构建转换器,通过转换器将突变体生成的抽象突变体转换为真实的源代码,形成符合实际的突变体;采Learning torank方法提取故障定位程序频谱,为定位的故障程序生成基于频谱的特征;根据生成的突变体,提取不同粒度故障程序的突变特征;提取故障程序深度语义特征,为突变分析提供多方面的分析信息;构建卷积神经(CNN,Convolution Neural Network)网络模型,并用归一化后的语义特征、突变特征、频谱特征及定位程序进行模型训练;构建多层感知神经网络(MLPN,Multi-Layer Perceptron Neural networks)模型,并用归一化后的语义特征、突变特征、频谱特征及定位程序进行模型训练;构建双向长短期记忆(BiLSTM)网络模型,并用归一化后的语义特征、突变特征、频谱特征及定位程序进行模型训练;输入测试集至训练好的各个神经网络获得故障可疑得分,聚合各模型输出的故障可疑得分,形成每个程序语句最终可疑得分;对故障可疑值得分进行排序,根据可疑值的排序结果得到软件故障的位置。该方法利用突变分析技术和深度学习模型相结合,通过分析软件系统在不同输入条件下产生的输出变化,定位故障的具体位置,降低巧合正确性对软件故障定位准确性的影响。

本实施例能够提高软件故障定位的准确性:通过深度学习模型对输入和输出数据进行训练,能够更准确地预测系统的输出结果,从而提高故障定位的准确性。提高软件故障定位的效率:通过突变分析技术对输出结果进行分析,能够快速定位故障的具体位置,减少故障定位的时间和成本。可应用于各种深度学习软件系统:本发明的方法不仅适用于特定的深度学习软件系统,还可以应用于各种不同类型的深度学习软件系统,具有较高的适用性和通用性。

图3为本实施例提供的一种软件故障定位装置的结构示意图。软件故障定位装置可以包括:获取模块310、第一处理模块320、生成模块330、第二处理模块340和第三处理模块350。

获取模块310,用于获取待定位故障对应的目标程序源码,目标程序源码用于故障程序测试时生成故障测试数据。

第一处理模块320,用于基于故障测试数据中不同粒度的元素特征确定突变生成算子,并将突变生成算子转换为适应突变器处理的抽象表示数据。

生成模块330,用于基于抽象表示数据生成抽象突变体。

第二处理模块340,用于将抽象突变体转换为实际源码对应的实际突变体,并提取实际突变体对应不同粒度故障程度的突变特征。

第三处理模块350,用于基于突变特征、故障语义特征以及故障频谱特征,训练得到多个神经网络模型,并基于每个神经网络模型输出的故障语句可疑得分聚合的排序结果,确定软件故障程序语句的位置。

在本实施例中,可选的,第一处理模块320,具体用于:

规范突变生成算子所对应程序语句的源代码形式,并将规范化后的源代码确定为一个标记符号流,标记符号流中包括多个标记信息,标记信息为标记符或标记文字;生成标记信息对应的标识数据;基于标记信息对应的标识数据,确定适应突变器处理的抽象表示数据。

在本实施例中,可选的,生成模块330,具体用于:

构建一个RNN编码器,基于RNN编码器确定抽象表示数据所对应程序语句的第一坐标向量表示数据,第一坐标向量表示数据用于描述x序列;构建一个RNN解码器,基于RNN解码器确定抽象表示数据所对应程序语句的第二坐标向量表示数据,第二坐标向量表示数据用于解码第一坐标向量数据为y序列项;基于第一坐标向量表示数据和第二坐标向量表示数据,生成抽象突变体。

在本实施例中,可选的,第二处理模块340,具体用于:

基于多种预设突变算子确定实际突变体的可疑得分;基于每种故障定位技术的权重数据以及多种预设突变算子确定实际突变体的可疑得分,确定实际突变体的相似度得分;基于实际突变体的相似度得分,确定实际突变体对应不同粒度故障程度的突变特征。

在本实施例中,可选的,还包括:提取模块。

提取模块,用于提取故障语义特征,故障语义特征用于描述突变程序深度语义特征。

生成模块330,还用于生成故障频谱特征,故障频谱特征用于描述基于定位的故障程序所生成的基于频谱的特征。

在本实施例中,可选的,提取模块,具体用于:

将突变前的故障定位程序和突变后的故障定位程序,分别转换为不同预设数量个单词序列;分别提取突变前的故障定位程序转后的单词序列对应的语义向量以及突变后的故障定位程序转后的单词序列对应的语义向量,得到故障语义特征。

在本实施例中,可选的,生成模块330,具体用于:

获取用于故障定位的定制化测试套件;将定制化测试套件输入带有实际突变体的源代码中,得到覆盖信息和测试用例执行结果;基于覆盖信息和测试用例执行结果,生成故障频谱特征。

在本实施例中,可选的,多个神经网络模型包括:卷积神经网络模型、双向长短期记忆网络模型和多层感知神经网络模型。

在本实施例中,可选的,第三处理模块350,具体用于:

将预设测试集输入所述卷积神经网络模型中,基于所述卷积神经网络模型的输出确定第一故障语句可疑值得分;将预设测试集输入所述双向长短期记忆网络模型中,基于所述双向长短期记忆网络模型的输出确定第二故障语句可疑值得分;将预设测试集输入所述多层感知神经网络模型中,基于所述多层感知神经网络模型的输出确定第三故障语句可疑值得分;基于所述第一故障语句可疑值得分、所述第二故障语句可疑值得分以及所述第三故障语句可疑值得分聚合的排序结果,确定软件故障程序语句的位置。

本公开提供的软件故障定位装置,可执行上述方法实施例,其具体实现原理和技术效果,可参见上述方法实施例,本公开此处不再赘述。

本发明实施例还提供了一种电子设备,如图4所示,包括处理器401、通信接口402、存储器403和通信总线404,其中,处理器401,通信接口402,存储器403通过通信总线404完成相互间的通信,

存储器403,用于存放计算机程序;

处理器401,用于执行存储器403上所存放的程序时,实现上述任一种软件故障定位方法的步骤。

上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表征,图中仅用一条粗线表征,但并不表征仅有一根总线或一种类型的总线。

通信接口用于上述电子设备与其他设备之间的通信。

存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。

上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

本发明还提供了一种计算机可读存储介质。在该计算机可读存储介质中存储有计算机程序,计算机程序被处理器执行时,实现上述任一种软件故障定位方法的步骤。

可选地,该计算机可读存储介质可以为非易失性存储器(Non-Volatile Memory,NVM),例如为至少一个磁盘存储器。

可选的,计算机可读存储器还可以是至少一个位于远离前述处理器的存储装置。

在本发明的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一种软件故障定位方法的步骤。

需要说明的是,对于装置/电子设备/存储介质/计算机程序产品实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定针对的是相同的实施例或示例。而且,描述的具体特征或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。此外,本领域的技术人员可以将本说明书中描述的不同实施例或示例进行接合和组合。

尽管在此结合各实施例对本申请进行了描述,然而,在实施所要求保护的本申请过程中,本领域技术人员通过查看附图、公开内容、以及所附权利要求书,可理解并实现本公开实施例的其他变化。

本申请是参照本申请实施例的方法、装置(设备)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

相关技术
  • 应用在自行车码表上的独立气压风道装置及其应用方法
  • 一种应用在自行车码表上的海拔高度校准方法
技术分类

06120116544718