定位缺陷的方法及装置与流程

文档序号:17178869发布日期:2019-03-22 20:43阅读:324来源:国知局
定位缺陷的方法及装置与流程

本公开涉及计算机领域,具体地,涉及一种定位缺陷的方法及装置。



背景技术:

随着信息技术的发展,运行在计算机上的软件程序越来越多。为了保证软件程序在计算机上能够正常运行,在发布软件程序之前,程序员会检测软件程序中是否存在缺陷,如果软件程序中存在缺陷,则对软件程序进行修改,直至软件程序中不存在缺陷为止。然后发布无缺陷的软件程序。

相关技术中,可以通过静态分析软件程序的源代码,或者建立训练集,以检测软件程序中是否存在缺陷。然而,静态分析的方法效率较低,不适用于源代码的数量较大的场景。建立训练集的方法复杂度较高,且对高危缺陷不敏感。



技术实现要素:

本公开的目的是提供一种定位缺陷的方法及装置,采用该方法,可以方便快捷的定位软件程序中的缺陷。

为了实现上述目的,本公开提供一种定位缺陷的方法,所述方法包括:

从软件程序的运行日志文件中提取异常堆栈数据;

根据所述异常堆栈数据,确定缺陷参数,所述缺陷参数包括:所述软件程序中发生过缺陷的方法出现的次数、调用所述发生过缺陷的方法的方法出现的次数以及所述发生过缺陷的方法被调用的次数;

根据所述缺陷参数,确定所述软件程序中的缺陷。

可选地,所述根据所述缺陷参数,确定所述软件程序中的缺陷,包括:

根据所述缺陷参数,生成网络拓扑图,所述网络拓扑图表征所述软件程序的历史缺陷情况;

根据所述网络拓扑图,确定所述软件程序中的缺陷。

可选地,所述根据所述缺陷参数,生成网络拓扑图,包括:

根据所述缺陷参数,建立多个节点,所述多个节点表征所述软件程序中发生过缺陷的方法或调用所述发生过缺陷的方法的方法;

分别确定所述多个节点的度,每个节点的度表征该节点所对应的方法在所述异常堆栈数据中出现的次数;

建立多个有向线段,每个有向线段连接两个节点,每个有向线段的指向为该有向线段所连接的两个节点之间的调用关系;

分别确定所述多个有向线段的权值,每个有向线段的权值为该有向线段所连接的两个节点之间的调用次数。

可选地,在所述从软件程序的运行日志文件中提取异常堆栈数据之后,所述方法还包括:

从所述异常堆栈数据中筛选出符合预定规则的数据;

所述根据所述异常堆栈数据,确定缺陷参数,包括:

根据所述符合预定规则的数据,确定缺陷参数。

可选地,所述根据所述网络拓扑图,确定所述软件程序中的缺陷,包括:

从所述网络拓扑图中确定出目标节点,所述目标节点的度大于第一预设阈值;

确定所述目标节点所对应的方法为高危缺陷。

可选地,所述根据所述网络拓扑图,确定所述软件程序中的缺陷,包括:

从所述网络拓扑图中确定出目标节点对,所述目标节点对中的一个节点为所述目标节点,所述目标节点对所对应的线段的权值大于第二预设阈值;

确定所述目标节点对所对应的两个方法均为高危缺陷。

本公开还提供一种定位缺陷的装置,所述装置包括:

提取模块,用于从软件程序的运行日志文件中提取异常堆栈数据;

缺陷参数确定模块,用于根据所述异常堆栈数据,确定缺陷参数,所述缺陷参数包括:所述软件程序中发生过缺陷的方法出现的次数、调用所述发生过缺陷的方法的方法出现的次数以及所述发生过缺陷的方法被调用的次数;

缺陷确定模块,用于根据所述缺陷参数,确定所述软件程序中的缺陷。

可选地,所述确定模块包括:

生成子模块,用于根据所述缺陷参数,生成网络拓扑图,所述网络拓扑图表征所述软件程序的历史缺陷情况;

确定子模块,用于根据所述网络拓扑图,确定所述软件程序中的缺陷。

可选地,所述生成子模块包括:

节点建立子模块,用于建立多个节点,所述多个节点表征所述软件程序中发生过缺陷的方法或调用所述发生过缺陷的方法的方法;

第一确定子模块,用于分别确定所述多个节点的度,每个节点的度表征该节点所对应的方法在所述异常堆栈数据中出现的次数;

有向线段建立模块,用于建立多个有向线段,每个有向线段连接两个节点,每个有向线段的指向为该有向线段所连接的两个节点之间的调用关系;

第二确定子模块,用于分别确定所述多个有向线段的权值,每个有向线段的权值为该有向线段所连接的两个节点之间的调用次数。

可选地,所述装置还包括:

筛选模块,用于在所述提取模块从软件程序的运行日志文件中提取异常堆栈数据之后,从所述异常堆栈数据中筛选出符合预定规则的数据;

所述缺陷参数确定模块用于:

根据所述符合预定规则的数据,确定缺陷参数。

可选地,所述确定子模块包括:

目标节点确定模块,用于从所述网络拓扑图中确定出目标节点,所述目标节点的度大于第一预设阈值;

第三确定子模块,用于确定所述目标节点所对应的方法为高危缺陷。

可选地,所述确定子模块包括:

目标节点对确定模块,用于从所述网络拓扑图中确定出目标节点对,所述目标节点对中的一个节点为所述目标节点,所述目标节点对所对应的有向线段的权值大于第二预设阈值;

第四确定子模块,用于确定所述目标节点对所对应的两个方法均为高危缺陷。

采用上述技术方案,通过运行日志文件定位缺陷,无须分析全部源代码,降低了缺陷定位的复杂度提高了缺陷定位的效率。

本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:

图1是根据一示例性实施例示出的一种定位缺陷的方法的流程图。

图2是根据一示例性实施例示出的一种生成网络拓扑图的流程图。

图3是根据一示例性实施例示出的一种网络拓扑图的示意图。

图4是根据一示例性实施例示出的一种定位缺陷的方法的另一流程图。

图5为根据一示例性实施例示出的一种确定高危缺陷的方法的流程图。

图6为根据一示例性实施例示出的一种确定高危缺陷的方法的另一流程图。

图7是根据一示例性实施例示出的一种定位缺陷的装置的框图。

具体实施方式

以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。

请参考图1,图1为根据一示例性实施例示出的一种定位缺陷的方法的流程图。如图1所示,该方法包括以下步骤:

步骤S11:从软件程序的运行日志文件中提取异常堆栈数据;

步骤S12:根据所述异常堆栈数据,确定缺陷参数,所述缺陷参数包括:所述软件程序中发生过缺陷的方法出现的次数、调用所述发生过缺陷的方法的方法出现的次数以及所述发生过缺陷的方法被调用的次数;

步骤S13:根据所述缺陷参数,确定所述软件程序中的缺陷。

其中,软件程序中的方法是编程人员常用的技术术语,可以是一个函数。本公开中,提出根据软件程序的运行日志文件实现定位缺陷。因为软件程序的运行日志文件反映了软件程序的历史运行情况,其中包括正常运行的数据以及异常堆栈数据。

由于异常堆栈数据包括:异常类型、异常严重程度、发生缺陷的方法以及调用发生缺陷的方法的方法等。所以可以根据异常堆栈数据,确定缺陷参数。最后,根据缺陷参数,确定软件程序中的缺陷。

采用上述技术方案,通过运行日志文件定位缺陷,无须分析全部源代码,降低了缺陷定位的复杂度,提高了缺陷定位的效率。

本公开中,确定软件程序中的缺陷的一种可能的实施方式是:首先,根据缺陷参数,生成网络拓扑图,以表征软件程序的历史缺陷情况。然后,根据网络拓扑图,确定软件程序中的缺陷。

请参考图2,图2为根据一示例性实施例示出的一种生成网络拓扑图的流程图。如图2所示,生成网络拓扑图包括以下步骤:

步骤S121:根据所述缺陷参数,建立多个节点,所述多个节点表征所述软件程序中发生过缺陷的方法或调用所述发生过缺陷的方法的方法;

步骤S122:分别确定所述多个节点的度,每个节点的度表征该节点所对应的方法在所述异常堆栈数据中出现的次数;

步骤S123:建立多个有向线段,每个有向线段连接两个节点,每个有向线段的指向为该有向线段所连接的两个节点之间的调用关系;

步骤S124:分别确定所述多个有向线段的权值,每个有向线段的权值为该有向线段所连接的两个节点之间的调用次数。

本公开中,由于缺陷参数包括:发生过缺陷的方法,以及调用发生过缺陷的方法的方法。这样,可以将发生过缺陷的方法作为节点(以下记为被调用者),然后将调用发生过缺陷的方法的方法也作为节点(以下记为调用者),并且通过有向线段将两者连接起来,有向线段的指向是由调用者指向被调用者,也就是由调用发生过缺陷的方法的方法所对应的节点指向发生过缺陷的方法所对应的节点。

对于每个节点,有一个参数:度。一个节点的度反应的是该节点在异常堆栈数据中出现的次数,如果该节点在异常堆栈数据中出现的次数较多,则该节点的度较大,如果该节点在异常堆栈数据中出现的次数较少,则该节点的度较小。

对于每条有向线段,有一个参数:权值。一个有向线段的权值反应的是调用者调用被调用者的次数。如果在软件程序历史运行的过程中,调用者调用被调用者的次数较多,则该条有向线段的权值较大,如果在软件程序历史运行的过程中,调用者调用被调用者的次数较少,则该条有向线段的权值较小。

举例来讲,根据缺陷参数,确定发生过缺陷的方法为方法A和方法B,以及调用方法A和方法B的方法为方法C。则建立节点A、节点B和节点C,并且在节点A和节点C之间连接由节点C指向节点A的有向线段1,在节点B和节点C之间连接由节点C指向节点B的有向线段2。其中,方法A、方法B和方法C在异常堆栈数据中出现的次数分别为5次、10次和1次,则节点A、节点B和节点C的度分别为5、10和1。假设在软件程序历史运行的过程中,方法C调用方法A以及方法C调用方法B的次数分别为15次、20次,则有向线段1的权值为15次,有向线段2的权值为20次。请参考图3,图3是根据一示例性实施例示出的一种网络拓扑图的示意图。如图3所示,图3以节点A、节点B和节点C为例。

可选地,请参考图4,图4是根据一示例性实施例示出的一种定位缺陷的方法的另一流程图。如图4所示,该方法除包括步骤S11和步骤S13外,在所述步骤S11之后,还包括:

步骤S11’:从所述异常堆栈数据中筛选出符合预定规则的数据;

相应地,所述步骤S12包括:

步骤S12’:根据所述符合预定规则的数据,确定缺陷参数。

本公开中,考虑到异常堆栈数据因大多是抛异常信息,可能会包括某些厂商比如一些稳定插件中的调用信息,对于定位缺陷来说,这些信息是不需要考虑的,因此不必对这些信息进行分析,所以将这些信息过滤掉,只保留命名规则符合一定规范的异常代码,所保留的异常代码即为符合预定规则的数据,是需要分析的,进而确定缺陷参数。

本公开中,对异常堆栈数据进行过滤,减小了需要分析的数据量,提高了确定缺陷参数的效率,进而提高了定位缺陷的效率。

可选地,请参考图5,图5为根据一示例性实施例示出的一种确定高危缺陷的方法的流程图。如图5所示,确定高危缺陷的方法包括以下步骤:

步骤S51:从所述网络拓扑图中确定出目标节点,所述目标节点的度大于第一预设阈值;

步骤S52:确定所述目标节点所对应的方法为高危缺陷。

本公开中,可以将度大于第一预设阈值的节点所对应的方法作为高危缺陷。一个节点的度越大,则表征该节点所对应的方法在异常堆栈数据中出现的次数越多,该节点所对应的方法所带来的危险隐患越大。其中,第一预设阈值可以是在软件程序中设置的,也可以是用户自己定义的,本公开不做限定。

继续以上述例子为例,节点A、节点B和节点C的度分别为5、10和0,假设第一预设阈值为7,则节点B所对应的方法B即为高危缺陷。

可选地,请参考图6,图6为根据一示例性实施例示出的一种确定高危缺陷的方法的另一流程图。如图6所示,确定高危缺陷的方法包括以下步骤:

步骤S61:从所述网络拓扑图中确定出目标节点对,所述目标节点对中的一个节点为所述目标节点,所述目标节点对所对应的有向线段的权值大于第二预设阈值;

步骤S62:确定所述目标节点对所对应的两个方法均为高危缺陷。

本公开中,可以将连接目标节点的有向线段中权值大于第二预设阈值的节点所对应的方法作为高危缺陷,因为目标节点所对应的方法本身属于高危缺陷,所以如果目标节点所对应的方法被调用的次数越多,则调用目标节点所对应的方法的方法存在缺陷的风险也越大。其中,第二预设阈值可以是在软件程序中设置的,也可以是用户自己定义的,本公开不做限定。

继续以上述例子为例,节点B所对应的方法为高危缺陷,而有向线段2的权值为20次,假设第二预设阈值为17,则有向线段2所连接的节点对:节点C和节点B分别所对应的方法均为高危缺陷,即:方法B和方法C均为高危缺陷。

采用上述技术方案,可以方便快捷地获知软件程序的缺陷分布情况,并准确识别高危缺陷,提高缺陷定位的准确度。

本公开还提供一种定位缺陷的装置,请参考图7,图7是根据一示例性实施例示出的一种确定高危缺陷的装置的框图。如图7所示,所述装置100包括:

提取模块110,用于从软件程序的运行日志文件中提取异常堆栈数据;

缺陷参数确定模块120,用于根据所述异常堆栈数据,确定缺陷参数,所述缺陷参数包括:所述软件程序中发生过缺陷的方法出现的次数、调用所述发生过缺陷的方法的方法出现的次数以及所述发生过缺陷的方法被调用的次数;

缺陷确定模块130,用于根据所述缺陷参数,确定所述软件程序中的缺陷。

可选地,所述缺陷确定模块包括:

生成子模块,用于根据所述缺陷参数,生成网络拓扑图,所述网络拓扑图表征所述软件程序的历史缺陷情况;

确定子模块,用于根据所述网络拓扑图,确定所述软件程序中的缺陷。

可选地,所述生成子模块包括:

节点建立子模块,用于建立多个节点,所述多个节点表征所述软件程序中发生过缺陷的方法或调用所述发生过缺陷的方法的方法;

第一确定子模块,用于分别确定所述多个节点的度,每个节点的度表征该节点所对应的方法在所述异常堆栈数据中出现的次数;

有向线段建立模块,用于建立多个有向线段,每个有向线段连接两个节点,每个有向线段的指向为该有向线段所连接的两个节点之间的调用关系;

第二确定子模块,用于分别确定所述多个有向线段的权值,每个有向线段的权值为该有向线段所连接的两个节点之间的调用次数。

可选地,所述装置还包括:

筛选模块,用于在所述提取模块从软件程序的运行日志文件中提取异常堆栈数据之后,从所述异常堆栈数据中筛选出符合预定规则的数据;

所述缺陷参数确定模块120用于:

根据所述符合预定规则的数据,确定缺陷参数。

可选地,所述确定子模块包括:

目标节点确定模块,用于从所述网络拓扑图中确定出目标节点,所述目标节点的度大于第一预设阈值;

第三确定子模块,用于确定所述目标节点所对应的方法为高危缺陷。

可选地,所述确定子模块包括:

目标节点对确定模块,用于从所述网络拓扑图中确定出目标节点对,所述目标节点对中的一个节点为所述目标节点,所述目标节点对所对应的有向线段的权值大于第二预设阈值;

第四确定子模块,用于确定所述目标节点对所对应的两个方法均为高危缺陷。

以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。

另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。

此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。

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