CN115827436A - 数据处理方法、装置、设备及存储介质 - Google Patents
数据处理方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN115827436A CN115827436A CN202211404756.3A CN202211404756A CN115827436A CN 115827436 A CN115827436 A CN 115827436A CN 202211404756 A CN202211404756 A CN 202211404756A CN 115827436 A CN115827436 A CN 115827436A
- Authority
- CN
- China
- Prior art keywords
- function
- target
- target tracking
- node
- function call
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本申请提供一种数据处理方法、装置、设备及存储介质,涉及计算机技术领域。该数据处理方法包括:获取目标软件正常运行状态下的函数调用树集合,对函数调用树集合中的节点函数进行分类,确定出目标追踪函数集合对应的目标追踪数据,基于该目标追踪数据,构建目标追踪函数集合对应的目标函数调用树集合。该技术方案中,通过对函数调用树集合中的节点函数进行分类,能够实现追踪目标软件定义的部分函数的目的,减少了动态追踪的数据量,从而降低了对软件执行速度的影响。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据处理方法、装置、设备及存储介质。
背景技术
随着计算机技术的快速发展,软件系统的规模越来越大,软件系统的处理逻辑越来越复杂,软件系统中的故障会导致系统行为异常,致使系统稳定性和可靠性降低,因而,亟需一种方法对软件中定义的函数进行追踪,以便及时获取到追踪函数的执行轨迹,以准确定位系统故障或性能异常的原因。
现阶段,在函数执行过程中,通过函数调用树的形式对目标软件中定义的函数进行追踪,通过记录各函数是否被执行以及执行时的调用者来构造请求函数的执行轨迹树,进而确定出函数间的调用关系。但该方法需要对目标软件定义的所有函数进行追踪,存在追踪数据量大、影响软件执行速度的问题。
发明内容
本申请提供一种数据处理方法、装置、设备及存储介质,以解决现有函数追踪方法中存在的追踪数据量大,影响软件执行速度的问题。
第一方面,本申请提供一种数据处理方法,包括:
获取目标软件正常运行状态下的函数调用树集合;
对所述函数调用树集合中的节点函数进行分类,确定出目标追踪函数集合对应的目标追踪数据;
基于所述目标追踪数据,构建所述目标追踪函数集合对应的目标函数调用树集合。
第二方面,本申请提供一种数据处理方法,包括:
基于获取到的软件测试请求,加载目标软件的源码,所述软件测试请求用于请求对所述目标软件进行测试;
运行所述目标软件,输出所述目标软件正常运行状态下的函数调用树集合;
在接收到数据处理请求时,对所述函数调用树集合进行处理,确定出目标追踪函数集合对应的目标追踪数据,所述数据处理请求用于请求以树形结构表征与所述目标追踪函数集合相关的函数之间的调用关系;
对所述目标追踪数据进行处理,构建所述目标追踪函数集合对应的目标函数调用树集合。
第三方面,本申请提供一种数据处理装置,包括:
获取模块,用于获取目标软件正常运行状态下的函数调用树集合;
处理模块,用于对所述函数调用树集合中的节点函数进行分类,确定出目标追踪函数集合对应的目标追踪数据;
构建模块,用于基于所述目标追踪数据,构建所述目标追踪函数集合对应的目标函数调用树集合。
第四方面,本申请提供一种数据处理装置,包括:
加载模块,用于基于获取到的软件测试请求,加载目标软件的源码,所述软件测试请求用于请求对所述目标软件进行测试;
运行模块,用于运行所述目标软件,输出所述目标软件正常运行状态下的函数调用树集合;
处理模块,用于在接收到数据处理请求时,对所述函数调用树集合进行处理,确定出目标追踪函数集合对应的目标追踪数据,所述数据处理请求用于请求以树形结构表征与所述目标追踪函数集合相关的函数之间的调用关系;
构建模块,用于对所述目标追踪数据进行处理,构建所述目标追踪函数集合对应的目标函数调用树集合。
第五方面,本申请提供了一种电子设备,包括处理器,该处理器用于调用计算机程序(也可以称为代码,或指令),以使得该电子设备实现如第一方面或第二方面所述的方法。
第六方面,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,当所述计算机程序被处理器执行时,使得所述处理器执行如第一方面或第二方面所述的方法。
第七方面,本申请提供了一种计算机程序产品,包括:计算机程序(也可以称为代码,或指令),当所述计算机程序被处理器运行时,使得所述处理器执行如第一方面或第二方面所述的方法。
在本申请实施例中,在获取到目标软件正常运行状态下的函数调用树集合时,通过对函数调用树集合中的节点函数进行分类,可确定出目标追踪函数集合对应的目标追踪数据,基于该目标追踪数据,构建目标追踪函数集合对应的目标函数调用树集合。该技术方案中通过对函数调用树集合中的节点函数进行分类,能够实现仅追踪部分函数的目的,减少动态追踪的数据量,从而降低了对软件执行速度的影响,能够兼顾函数追踪时的追踪精度、追踪成本和追踪时长,降低对系统性能的影响。
附图说明
图1为本申请实施例适用的一种应用场景示意图;
图2为本申请第一实施例提供的数据处理方法的流程示意图;
图3为本申请第二实施例提供的数据处理方法的流程示意图;
图4为本申请第三实施例提供的数据处理方法的流程示意图;
图5为本申请第四实施例提供的数据处理方法的流程示意图;
图6为本申请第一实施例提供的数据处理装置的示意性框图;
图7为本申请第二实施例提供的数据处理装置的示意性框图;
图8为本申请实施例提供的电子设备的示意性框图。
具体实施方式
使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。
因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在本申请实施例中,术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。此外,术语“包括”以及任何变形,意图在于覆盖不排他的包含。
下面先对本申请实施例涉及到的相关术语进行简单解释。
1、动态追踪:一种可以在不停止目标软件正常运行情况下,自定义收集软件运行状态信息的技术。
2、函数调用树(Function Call Tree,FCT):通过树型结构表示函数调用关系的一种数据结构。
3、函数调用森林:多种函数调用关系的集合,即由多棵函数调用树形成。
4、调用堆栈(call stack):是一个方法列表,按照函数调用顺序保存所有在运行期被调用函数的堆栈,即最后被调用的函数会保存在调用堆栈的最上方;
5、caller:函数的调用者;callee:被调用的函数。
随着计算机技术的快速发展,软件系统的规模越来越大,软件系统的处理逻辑越来越复杂,而人们对软件系统的可靠性要求越来越高。由于在已知软件的函数调用关系时,能够及时、准确定位出系统故障的位置,因而,亟需一种方法对软件中定义的函数进行追踪。
由于系统发生的故障不同时,系统做出的反映不同,且软件中的函数调用关系不同,而且与正常的函数调用关系不同。因而,可以通过故障注入方式分析来不同故障下的函数调用关系。
在实际应用中,函数执行过程通常采用函数调用树进行建模,但构建的模型一般应用于全追踪方法,即,对软件中定义的所有函数进行追踪,通过记录每个函数是否被执行以及被执行时的调用者来构造请求的函数执行轨迹。但是,在实际运行过程中,不同的函数其执行频率并不相同,有的函数被高频执行,而有的函数被执行的频率较低。若对软件中所有函数都进行无差别的追踪记录,会影响目标软件的执行速度,尤其对于高性能软件更是如此。
此外,该方法需要对所有函数都进行追踪,无法应用于仅追踪部分函数的场景。即,现有技术中缺少在自适应追踪(即,追踪软件中定义的部分函数)场景下构建函数调用树的高效方法,这是因为:若仅记录被调用函数及其调用者,通常得到的是函数调用森林,则无法完成完整的树型结构构建。若基于软件中所有的函数调用关系记录函数调用堆栈,能够帮助构建完整的树型结构,但由于函数调用堆栈的数据量较大,若无差别记录函数调用堆栈,则会出现追踪数据量大,影响软件执行速度的问题。
为了解决上述问题,本申请提供了一种数据处理方法,在获取到目标软件正常运行状态下的函数调用树集合时,对函数调用树集合中的节点函数进行分类,确定出目标追踪函数集合对应的目标追踪数据,最后基于该目标追踪数据,构建目标追踪函数集合对应的目标函数调用树集合。该技术方案中通过对函数调用树集合中的节点函数进行分类,能够实现追踪目标软件中定义的部分函数的目的,减少动态追踪的数据量,从而降低了对软件执行速度的影响。
示例性的,图1为本申请实施例适用的一种应用场景示意图。如图1所示,该应用场景可以包括相互连接的终端设备11和数据处理设备12。其中,终端设备11与数据处理设备12可以通过有线或无线方式进行通信。
可选的,终端设备11可以是具有人机交互界面的用户终端,研发人员可以在终端设备11的人机交互界面上进行软件开发,以生成软件源码。
可选的,软件在发布之前,需要经过测试以保证发布后的软件的性能。示例性的,对于研发人员想要测试的目标软件,参照图1所示,研发人员可以通过终端设备11向数据处理设备12发送数据处理请求,且该数据处理请求中包括目标软件的源码和需要追踪的目标追踪函数集合,相应的,数据处理设备12可以基于接收到的数据处理请求执行本申请提供的数据处理过程。
具体的,数据处理设备12执行的数据处理过程可以如下:数据处理设备12首先加载目标软件的源码,然后运行目标软件的源码可以生成正常运行状态下的函数调用树集合,随后根据需要追踪的目标追踪函数集合,对函数调用树集合中节点函数进行分类,可以得到目标追踪函数集合对应的目标追踪数据,最后可以基于目标追踪数据构建目标追踪函数集合对应的目标函数调用树集合。
可选的,数据处理设备12在执行完上述数据处理过程,还可以将获取到的目标追踪函数集合对应的目标函数调用树集合反馈给终端设备11,以便通过终端设备11进行显示。
可选的,图1所示的应用场景还可以包括数据存储设备13,该数据存储设备13既可以与终端设备11通信,也可以与数据处理设备12通信,其可以用于存储终端设备11输出的数据和/或数据处理设备12输出的数据。例如,终端设备11输出的目标软件的源码,数据处理设备12输出的目标追踪函数集合对应的目标函数调用树集合等。关于数据存储设备13可存储的内容其可以根据实际需求确定,此处不作追踪。
可选的,终端设备11本身也可以作为数据处理设备执行本申请提供的数据处理方法的程序代码,以确定出目标追踪函数集合对应的目标函数调用树集合。当数据处理设备12具有人机交互界面时,数据处理设备12还可以展示确定的目标函数调用树集合等。
需要说明的是,附图1仅是本申请实施例适用的一种应用场景的示意图,本申请实施例不对图1中包括的设备进行限定,也不对图1中设备之间的位置关系进行限定,例如,在图1中,终端设备的数量可以有多个,数据存储设备13相对数据处理设备12既可以是外部存储器,也可以是内部存储器等。
在实际应用中,由于终端设备和服务器均是具有数据处理能力的处理设备,因而,上述图1所示应用场景中的数据处理设备既可以通过终端设备实现,也可以通过服务器实现,本实施例不对其进行限定。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
示例性的,图2为本申请第一实施例提供的数据处理方法的流程示意图。该数据处理方法应用于图1所示应用场景中的数据处理设备,如图2所示,该数据处理方法可以包括如下步骤:
S201、获取目标软件正常运行状态下的函数调用树集合。
在本申请的实施例中,当研发人员开发出目标软件,并将其部署到数据处理设备中时,数据处理设备可以利用部署的执行工具对目标软件执行,并在目标软件正常运行过程中,对目标软件中定义的所有函数都进行追踪,并记录各个函数的调用者函数(caller)和被调用的函数(callee)从而可以构建出该目标软件在正常运行状态下的函数调用关系的集合,即函数调用树集合。
S202、对函数调用树集合中的节点函数进行分类,确定出目标追踪函数集合对应的目标追踪数据。
在实际应用中,若想确定目标软件在不同故障注入后的函数调用关系,可以基于待追踪的目标追踪函数集合对函数调用树集合中的节点函数进行分类,确定出目标追踪数据。
例如,可以通过不同的染色方式对函数之间的调用关系进行标记,以确定出目标追踪函数集合对应的目标追踪数据。
示例性的,将属于目标追踪函数集合中的节点函数标记为白色,将不属于目标追踪函数集合中的节点函数标记为红色,并且可以在标记为红色的节点函数组成的集合中筛选出目标追踪函数集合中函数调用堆栈。
可理解,在本实施例中,目标追踪函数集合对应的目标追踪数据可以包括多个数据序列,各数据序列是由目标追踪函数、目标追踪函数的调用者函数和目标追踪函数的函数调用堆栈组成的序列。
S203、基于目标追踪数据,构建目标追踪函数集合对应的目标函数调用树集合。
在本实施例中,数据处理设备在获取到目标追踪数据后,可以利用函数之间的调用关系,对目标追踪数据进行函数调用树构建、合并等处理,以得到目标追踪函数集合对应的目标函数调用树集合。
示例性的,数据处理设备可以基于函数之间的调用关系,首先从目标追踪数据中筛选出所有的根节点函数,然后构建各根节点函数的函数调用树,得到目标追踪函数集合对应的函数调用森林,最后对函数调用森林中的子树进行合并,得到目标追踪函数集合对应的目标函数调用树集合。
可理解,该目标函数调用树集合是目标追踪函数集合中各目标追踪函数对应函数调用树的集合,也可以称为近似函数调用树集合。
本申请实施例提供的数据处理方法,在获取到目标软件正常运行状态下的函数调用树集合时,对函数调用树集合中的节点函数进行分类,确定出目标追踪函数集合对应的目标追踪数据,最后基于该目标追踪数据,构建目标追踪函数集合对应的目标函数调用树集合,为后续准确分析函数调用关系奠定了基础,同时降低了追踪数据量,从而降低了对软件执行速度的影响,能够兼顾函数追踪时的追踪精度和追踪时长,降低对系统性能的影响。
为使读者更深刻地理解本申请实施例的实现原理,下述对图2所示的实施例进行进一步细化。
示例性的,在上述实施例的基础上,图3为本申请第二实施例提供的数据处理方法的流程示意图。如图3所示,在本实施例中,上述S202可以通过如下步骤实现:
S301、对函数调用树集合中的节点函数进行分类,得到第一节点函数集合和第二节点函数集合。
其中,该第一节点函数集合中的节点函数属于目标追踪函数集合,第二节点函数集合中的节点函数不属于目标追踪函数集合。
在本实施例中,数据处理设备中预置有目标追踪函数集合,其是目标软件所定义函数中需要被追踪函数的集合。由于函数调用树集合是目标软件被运行后得到的函数调用树组成的集合,因而,可以基于函数调用树集合中的节点函数是否属于目标追踪函数集合,对函数调用树集合中的节点函数进行分类。
示例性的,针对函数调用树集合中的每个函数调用树,若该函数调用树中的节点函数属于目标追踪函数集合,则对该节点函数添加第一标记,若该函数调用树中的节点函数不属于目标追踪函数集合,则对该节点函数添加第二标记。在本实施例中,将添加第一标记的节点函数形成的集合称为第一节点函数集合,将添加第二标记的节点函数形成的集合称为第二节点函数集合。
作为一种示例,可以将函数调用树中属于目标追踪函数集合的节点函数涂成白色,而将函数调用树中不属于目标追踪函数集合的节点函数涂成红色。可理解,本申请实施例并不限定节点函数的具体着色,其可以根据设定执行,此处不作赘述。
S302、对于第二节点函数集合中的第二节点函数,若第二节点函数的迭代节点函数属于第一节点函数集合,则将第二节点函数添加至第三节点函数集合,以及将迭代节点函数添加至目标追踪函数集合的函数调用堆栈。
可选的,对于不在目标追踪函数集合中的节点函数,也即在第二节点函数集合中的第二节点函数,还可以判断该第二节点函数的迭代节点函数是否在第一节点函数集合,以将与第一节点函数有调用关系的第二节点函数筛选出来,并将其添加至第三节点函数集合,同时将迭代节点函数添加至目标追踪函数集合的函数调用堆栈中,以得到目标软件运行过程中被目标追踪函数集合中节点函数调用的节点函数。
示例性的,针对上述被涂成红色的节点函数,判断其迭代节点函数是否被涂成了白色,若是,可以将被涂成红色的节点函数再改涂成蓝色,同时将其迭代节点函数添加至目标追踪函数集合的函数调用堆栈中。可理解,被涂成蓝色的节点函数为目标追踪节点函数的调用者节点函数。本申请实施例并不限定更改的具体着色,其可以根据设定执行,此处不作赘述。
S303、将第一节点函数集合和目标追踪函数集合的函数调用堆栈确定为目标追踪函数集合对应的目标追踪数据。
在本申请的实施例中,在确定出第一节点函数集合和目标追踪函数集合的函数调用堆栈后,便可以确定出第一节点函数中各节点函数的调用者节点函数和函数调用堆栈,从而结合各节点函数本身便可生成目标追踪函数集合对应的目标追踪数据。例如,目标追踪数据的格式为(function,caller,callstack)序列,其中,function为节点函数本身,caller为节点函数的调用者节点函数,callstack为节点函数的函数调用堆栈。
作为一种示例,在第一节点函数集合中的节点函数被涂成白色,第二节点函数集合中的节点函数被涂成红色,以及第三节点函数集合中的节点函数被涂成蓝色时,其中,被标记为白色的节点函数为需要追踪的函数,标记为蓝色和红色的函数是不需要追踪的函数。同时,通过对标记为蓝色的节点函数,将其先序遍历最近的被标记为白色的后代节点函数加入到目标追踪函数集合的函数调用堆栈Fcallstack中,这样在对目标追踪函数集合中的节点函数进行追踪时,可以记录其函数调用堆栈。
示例性的,以第一节点函数集合中的节点函数被涂成白色,第二节点函数集合中的节点函数被涂成红色,以及第三节点函数集合中的节点函数被涂成蓝色为例确定目标追踪函数集合对应的目标追踪数据的技术方案可以总结为函数调用树着色算法。在函数调用树着色算法中,可以利用FCT.iter()来返回FCT的迭代器,FCT.iter()包括各FCT上的节点函数;利用node.iter()返回node的迭代器,可以解释为用于返回node的迭代节点函数;利用FCTscolored表示节点函数被涂成红色的第一节点函数集合;利用Fcallstack表示目标追踪函数集合的函数调用堆栈;相应的,FCTscolored和Fcallstack组成目标追踪函数集合对应的目标追踪数据。
可理解,本申请实施例提出的基于着色的函数调用树节点分类方法,其分类结果可以帮助实现函数调用堆栈的针对性记录,从而减少了后续动态追踪的数据量。
在本申请的实施例中,通过对函数调用树集合中的节点函数进行分类,得到节点函数属于目标追踪函数集合的第一节点函数集合和节点函数不属于目标追踪函数集合的第二节点函数集合,然后对于第二节点函数集合中的第二节点函数,若该第二节点函数的迭代节点函数属于第一节点函数集合,则将第二节点函数添加至第三节点函数集合,以及将迭代节点函数添加至目标追踪函数集合的函数调用堆栈,最后将第一节点函数集合和目标追踪函数集合的函数调用堆栈确定为目标追踪函数集合对应的目标追踪数据。该技术方案中,通过将函数调用树集合中节点函数进行分类可以输出目标软件在运行过程中的目标追踪数据,从而可减少动态追踪的数据量。
可选的,在上述各实施例的基础上,图4为本申请第三实施例提供的数据处理方法的流程示意图。如图4所示,在本实施例中,上述S203可以通过如下步骤实现:
S401、确定出目标追踪数据的根节点函数集合。
在本申请的实施例中,数据处理设备在构建目标追踪函数集合的目标函数调用树时,首先可以对目标追踪数据的调用者节点函数和节点函数进行分析,找到目标追踪数据中的所有根节点函数,得到根节点函数集合。
示例性的,在实际应用中,目标追踪数据包括至少一个数据序列,各数据序列包括函数、调用者函数,相应的,该S401可以包括:遍历目标追踪数据中的数据序列,将未在目标函数调用树集合中的调用者函数添加至目标函数调用树集合,将目标函数调用树集合中的重复函数移除,在遍历完目标追踪数据中的数据序列时,得到目标追踪数据的根节点函数集合。
可理解,该步骤可以理解为:基于目标追踪数据中的函数调用关系,具体为调用者函数与函数的调用关系,可以将未在目标函数调用树集合中的根节点函数添加到目标函数调用树集合,而将目标函数调用树集合中重复节点函数移除,从而找到目标追踪数据的所有根节点函数。
S402、基于该根节点函数集合,构建目标追踪数据对应的函数调用森林。
在本步骤中,在确定出根节点函数集合时,首先可以以根节点函数集合中的各根节点函数为根节点,利用目标追踪数据中的各节点函数构建多棵函数调用树,进而形成函数调用森林。
示例性的,基于根节点函数集合,构建目标追踪数据对应的函数调用森林的构建方法包括:基于根节点函数集合,遍历目标追踪数据中的数据序列,若该数据序列的调用者函数是根节点函数、数据序列的函数不是根节点函数的子节点和该函数不是根节点函数的祖先节点,则将数据序列中的函数作为根节点函数的子节点,相应的,在遍历完目标追踪数据中的数据序列时,得到目标追踪数据对应的函数调用森林。
可选的,当以S401中确定的根节点函数构建函数调用树时,可以对目标追踪数据中的每个数据序列进行函数调用关系判定,并将具有调用关系的节点函数通过树形结构进行表示,因而,以各根节点函数构建的函数调用树形成函数调用森林。
在本申请的实施例中,基于根节点函数集合,构建目标追踪数据对应的函数调用森林的构建方法还包括:若数据序列的调用者函数不是根节点函数和/或数据序列的函数是根节点函数的子节点和/或函数是根节点函数的祖先节点,则将根节点函数从根节点函数集合中移除。
示例性的,在构建函数调用树时,以调用者函数作为出发点,若确定该调用者函数满足如下任意一个条件,便可认为其不是根节点函数,该条件包括:调用者函数不是根节点函数、数据序列的函数是根节点函数的子节点、函数是根节点函数的祖先节点,这些条件均与数据序列中指示的函数调用关系矛盾,因而,此时可将该根节点函数从根节点函数集合中移除。
S403、将上述函数调用森林中符合合并条件的函数调用树进行合并,得到目标追踪函数集合对应的目标函数调用树集合。
在本实施例中,函数调用森林中包括多棵函数调用树,其可能不能直观表征函数运行过程的调用关系,因而,可以判断函数调用森林中的函数调用树是否满足合并条件,若是,则对函数调用森林中的函数调用树进行合并,减少函数调用森林中的函数调用树的数量。
可选的,该合并条件可以包括根节点函数是函数调用者且根节点函数的子节点是函数且函数调用堆栈不为空,此时,数据处理设备便可以根据函数调用堆栈,将以根节点函数为根节点的树进行合并。
示例性的,目标追踪数据中的数据序列还包括函数调用堆栈;相应的,该S403可以包括:遍历根节点函数集合中的根节点函数,若该根节点函数是函数调用者,且根节点函数的子节点是函数,以及函数调用堆栈不为空,则根据函数调用堆栈,对以根节点函数为根节点的函数调用树进行合并,得到目标追踪函数集合对应的目标函数调用树集合。
可选的,可以将上述S401至S403的步骤解释为目标函数调用树集合构建算法。在目标函数调用树集合构建算法中,可以首先进行参数初始化,然后从目标追踪函数中找到所有的根节点函数,再通过分析目标追踪数据的函数调用关系以构造函数调用森林,最后将函数调用森林中符合合并条件的函数调用树进行合并,并返回确定的目标函数调用树集合(AFCTs)。其中,可以利用函数not_pred(new_node,function)表示:当function不是new_node的祖先节点时返回true,否则返回false,利用函数not_pred()来分析函数调用关系中的递归调用情况,利用函数merge(AFCTs,root,callstack)实现函数调用森林中函数调用树的合并,即,根据函数调用堆栈(callstack),将目标函数调用树合并到AFCTs中。
在本申请的实施例中,针对目标追踪数据,首先确定出目标追踪数据中的根节点函数集合,然后基于根节点函数集合,构建目标追踪数据对应的函数调用森林,最后将函数调用森林中符合合并条件的函数调用树进行合并,得到目标追踪函数集合对应的目标函数调用树集合。该技术方案中,可以只对目标软件中定义的部分函数构造目标函数调用树集合,降低了追踪数据量,降低了对目标软件运行速度的影响。
可选的,在实际应用中,针对函数追踪的各种方案都会或多或少导致目标软件的响应时间变长,可以定义响应时间增长率(Response Time Growth Rate,RTGR)来分析不同方案对目标软件响应时间的影响情况:
可选的,表1示出了全函数追踪方法与本申请实施例提供的数据处理方法在Redis、Nginx、Httpd、SQlite上的RTGR信息,通过分析在Redis、Nginx、Httpd、SQlite四个开源软件上的实验数据,可以确定不同追踪方法的响应时间增长率,从而可确定对目标软件响应时间的影响情况。其中,在实验中,以追踪目标软件定义的所有函数中执行频率最低的10%进行解释说明。
表1不同追踪点选择方法下Redis、Nginx、Httpd、SQlite的RTGR
方法 | Redis | Nginx | Httpd | SQlite |
全追踪方法 | 684% | 94% | 55% | 119% |
本方案中追踪部分函数 | 81% | 19% | 19% | 49% |
由上述分析可知,本申请实施例中的数据处理方法实际是目标函数调用树的构建方法,可以仅追踪目标软件中定义的部分函数,且构建这部分函数的目标函数调用树集合,解决了现有全追踪方法严重影响目标软件运行速度的问题。和不适用于仅追踪部分函数的情况。
可选的,上述各实施例提供的数据处理方法为软件测试过程中的一种具体应用,因而,本申请实施例还提供了一种应用于软件测试过程中的数据处理方法,下述结合具体应用场景进行简要说明。
示例性的,图5为本申请第四实施例提供的数据处理方法的流程示意图。该数据处理方法也可由图1所示的数据处理设备执行。如图5所示,该数据处理方法可以包括:
S501、基于获取到的软件测试请求,加载目标软件的源码,所述软件测试请求用于请求对目标软件进行测试。
可选的,在本实施例中,数据处理设备可以从终端设备接收软件测试请求,以请求对目标软件进行测试,因而,该软件测试请求可以包括目标软件的源码。相应的,数据处理设备便可以将获取到的目标软件的源码加载到设备中,以便对其运行。
S502、运行上述目标软件,输出目标软件正常运行状态下的函数调用树集合。
可选的,数据处理设备运行上述目标软件,在其正常运行状态下,可以通过树形结构表征出目标软件中定义的各函数之间的调用关系,从而得到函数调用树集合。
可理解,运行目标软件可以解释为对目标软件的源码进行编译、汇编、执行的过程。
S503、在接收到数据处理请求时,对函数调用树集合进行处理,确定出目标追踪函数集合对应的目标追踪数据,该数据处理请求用于请求以树形结构表征与目标追踪函数集合相关的函数之间的调用关系。
示例性的,数据处理设备在目标软件的测试过程中,为了降低追踪数据量,研发人员只想对目标软件定义的部分函数进行追踪,这时,便可以发出数据处理请求,以请求以树形结构表征与目标追踪函数集合相关的函数之间的调用关系。因而,在本步骤中,数据处理设备可以对函数调用树集合中的节点函数进行处理,确定出与目标追踪函数集合中的函数相关的函数集合和函数调用堆栈,即目标追踪数据。
可选的,该步骤的具体实现可参照上述图2中S202部分和图3所示实施例中记载的内容,此处不作追踪。
S504、对目标追踪数据进行处理,构建目标追踪函数集合对应的目标函数调用树集合。
在本实施例中,若想构建目标函数调用树集合,数据处理设备需要寻找目标追踪数据中的根节点函数,然后基于目标追踪数据中的函数调用关系、构建函数调用森林,然后合并出符合合并条件的子树,从而得到目标追踪函数集合对应的目标函数调用树集合。
可选的,该步骤的具体实现可参照上述图3中S203部分和图4所示实施例中记载的内容,此处不作追踪。
本申请实施例提供的数据处理方法,在获取到软件测试请求时可以加载目标软件的源码,进而通过运行上述目标软件,输出目标软件正常运行状态下的函数调用树集合,从而在接收到数据处理请求时,可以对函数调用树集合进行处理,确定出目标追踪函数集合对应的目标追踪数据,进而构建目标追踪函数集合对应的目标函数调用树集合。该技术方案中,在软件测试过程中,能够仅追踪目标软件中定义的部分函数,在满足研发人员需求的情况下,降低了追踪数据量,降低了对目标软件执行速度的影响。
图6为本申请第一实施例提供的数据处理装置的示意性框图。该数据处理装置可以通过电子设备实现,也可以通过电子设备中的装置实现。如图6所示,该数据处理装置600可以包括:获取模块601、处理模块602和构建模块603。
其中,获取模块601,用于获取目标软件正常运行状态下的函数调用树集合;
处理模块602,用于对所述函数调用树集合中的节点函数进行分类,确定出目标追踪函数集合对应的目标追踪数据;
构建模块603,用于基于所述目标追踪数据,构建所述目标追踪函数集合对应的目标函数调用树集合。
在本申请的一种可选实施例中,所述处理模块602,具体用于:
对所述函数调用树集合中的节点函数进行分类,得到第一节点函数集合和第二节点函数集合,所述第一节点函数集合中的节点函数属于目标追踪函数集合,所述第二节点函数集合中的节点函数不属于目标追踪函数集合;
对于所述第二节点函数集合中的第二节点函数,若所述第二节点函数的迭代节点函数属于所述第一节点函数集合,则将所述第二节点函数添加至第三节点函数集合,以及将所述迭代节点函数添加至所述目标追踪函数集合的函数调用堆栈;
将所述第一节点函数集合和所述目标追踪函数集合的函数调用堆栈确定为所述目标追踪函数集合对应的目标追踪数据。
在本申请的另一种可选实施例中,所述构建模块603,包括:
确定单元,用于确定出所述目标追踪数据中的根节点函数集合;
构建单元,用于基于所述根节点函数集合,构建所述目标追踪数据对应的函数调用森林;
合并单元,用于将所述函数调用森林中符合合并条件的函数调用树进行合并,得到所述目标追踪函数集合对应的目标函数调用树集合。
其中,所述目标追踪数据包括至少一个数据序列,所述数据序列包括函数、调用者函数;所述确定单元,具体用于:
遍历所述目标追踪数据中的数据序列,将未在目标函数调用树集合中的调用者函数添加至所述目标函数调用树集合,将所述目标函数调用树集合中的重复函数移除;
在遍历完所述目标追踪数据中的数据序列时,得到所述目标追踪数据的根节点函数集合。
可选的,所述构建单元,具体用于:
基于所述根节点函数集合,遍历所述目标追踪数据中的数据序列,若所述数据序列的调用者函数是根节点函数、所述数据序列的函数不是所述根节点函数的子节点和所述函数不是所述根节点函数的祖先节点,则将所述数据序列中的函数作为所述根节点函数的子节点;
在遍历完所述目标追踪数据中的数据序列时,得到所述目标追踪数据对应的函数调用森林。
可选的,所述构建单元,还用于:
若所述数据序列的调用者函数不是根节点函数和/或所述数据序列的函数是所述根节点函数的子节点和/或所述函数是所述根节点函数的祖先节点,则将所述根节点函数从所述根节点函数集合中移除。
可选的,所述数据序列还包括函数调用堆栈;
所述合并单元,具体用于:
遍历所述根节点函数集合中的根节点函数,若所述根节点函数是函数调用者且所述根节点函数的子节点是所述函数且所述函数调用堆栈不为空,则根据所述函数调用堆栈,对以所述根节点函数为根节点的函数调用树进行合并,得到所述目标追踪函数集合对应的目标函数调用树集合。
在本申请实施例提供的数据处理装置,用于实现上述图2至图4所示实施例的数据处理方法,其具体实现方案和有益效果参见上述实施例中的记载,此处不做赘述。
图7为本申请第二实施例提供的数据处理装置的示意性框图。该数据处理装置可以通过电子设备实现,也可以通过电子设备中的装置实现。如图7所示,该数据处理装置700可以包括:
加载模块701,用于基于获取到的软件测试请求,加载目标软件的源码,所述软件测试请求用于请求对所述目标软件进行测试;
运行模块702,用于运行所述目标软件,输出所述目标软件正常运行状态下的函数调用树集合;
处理模块703,用于在接收到数据处理请求时,对所述函数调用树集合进行处理,确定出目标追踪函数集合对应的目标追踪数据,所述数据处理请求用于请求以树形结构表征与所述目标追踪函数集合相关的函数之间的调用关系;
构建模块704,用于对所述目标追踪数据进行处理,构建所述目标追踪函数集合对应的目标函数调用树集合。
在本申请实施例提供的数据处理装置,用于实现上述图5所示实施例的数据处理方法,其具体实现方案和有益效果参见上述实施例中的记载,此处不做赘述。
图8为本申请实施例提供的电子设备的示意性框图。该电子设备800可以是上述图1中的数据处理设备。如图8所示,该电子设备800可以包括至少一个处理器810,可用于实现本申请提供的数据处理方法。具体参见方法示例中的详细描述,此处不做赘述。
该电子设备800还可以包括一个存储器820,用于存储程序指令和/或数据。存储器820和处理器810耦合。本申请中的耦合是装置、单元或模块之间的间接耦合或通信连接,可以是电性,机械或其它的形式,用于装置、单元或模块之间的信息交互。处理器810可能和存储器820协同操作。处理器810可能执行存储器820中存储的程序指令。所述至少一个存储器中的至少一个可以包括于处理器中。
该电子设备800还可以包括一个通信接口830,用于通过传输介质和其它设备进行通信,从而用于电子设备800中的装置可以和其它设备进行通信。所述通信接口830例如可以是收发器、接口、总线、电路或者能够实现收发功能的装置。处理器810可利用通信接口830收发数据和/或信息,并用于实现上述实施例中数据处理方法。
本申请中不限定上述处理器810、存储器820以及通信接口830之间的具体连接介质。本申请在图8中以处理器810、存储器820以及通信接口830之间通过总线840连接。总线840在图8中以粗线表示,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
在本申请实施例中,处理器可以是通用处理器、数字信号处理器、专用集成电路、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
根据本申请提供的方法,本申请还提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,当该计算机程序被处理器执行时,使得处理器执行上述实施例中的技术方案。
根据本申请提供的方法,本申请还提供一种计算机程序产品,该计算机程序产品包括:计算机程序代码。当该计算机程序代码被处理器执行时,使得处理器执行上述实施例中的技术方案。
本申请提供的技术方案可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、网络设备、终端设备或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线,例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机可以存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质例如,数字视频光盘(digital video disc,DVD)、或者半导体介质等。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (12)
1.一种数据处理方法,其特征在于,包括:
获取目标软件正常运行状态下的函数调用树集合;
对所述函数调用树集合中的节点函数进行分类,确定出目标追踪函数集合对应的目标追踪数据;
基于所述目标追踪数据,构建所述目标追踪函数集合对应的目标函数调用树集合。
2.如权利要求1所述的方法,其特征在于,所述对所述函数调用树集合中节点函数进行分类,确定出目标追踪函数集合对应的目标追踪数据,包括:
对所述函数调用树集合中的节点函数进行分类,得到第一节点函数集合和第二节点函数集合,所述第一节点函数集合中的节点函数属于目标追踪函数集合,所述第二节点函数集合中的节点函数不属于目标追踪函数集合;
对于所述第二节点函数集合中的第二节点函数,若所述第二节点函数的迭代节点函数属于所述第一节点函数集合,则将所述第二节点函数添加至第三节点函数集合,以及将所述迭代节点函数添加至所述目标追踪函数集合的函数调用堆栈;
将所述第一节点函数集合和所述目标追踪函数集合的函数调用堆栈确定为所述目标追踪函数集合对应的目标追踪数据。
3.如权利要求1或2所述的方法,其特征在于,所述基于所述目标追踪数据,构建所述目标追踪函数集合对应的目标函数调用树集合,包括:
确定出所述目标追踪数据中的根节点函数集合;
基于所述根节点函数集合,构建所述目标追踪数据对应的函数调用森林;
将所述函数调用森林中符合合并条件的函数调用树进行合并,得到所述目标追踪函数集合对应的目标函数调用树集合。
4.如权利要求3所述的方法,其特征在于,所述目标追踪数据包括至少一个数据序列,所述数据序列包括函数、调用者函数;
所述确定出所述目标追踪数据中的根节点函数集合,包括:
遍历所述目标追踪数据中的数据序列,将未在目标函数调用树集合中的调用者函数添加至所述目标函数调用树集合,将所述目标函数调用树集合中的重复函数移除;
在遍历完所述目标追踪数据中的数据序列时,得到所述目标追踪数据的根节点函数集合。
5.如权利要求4所述的方法,其特征在于,所述基于所述根节点函数集合,构建所述目标追踪数据对应的函数调用森林,包括:
基于所述根节点函数集合,遍历所述目标追踪数据中的数据序列,若所述数据序列的调用者函数是根节点函数、所述数据序列的函数不是所述根节点函数的子节点和所述函数不是所述根节点函数的祖先节点,则将所述数据序列中的函数作为所述根节点函数的子节点;
在遍历完所述目标追踪数据中的数据序列时,得到所述目标追踪数据对应的函数调用森林。
6.如权利要求5所述的方法,其特征在于,所述基于所述根节点函数集合,构建所述目标追踪数据对应的函数调用森林,还包括:
若所述数据序列的调用者函数不是根节点函数和/或所述数据序列的函数是所述根节点函数的子节点和/或所述函数是所述根节点函数的祖先节点,则将所述根节点函数从所述根节点函数集合中移除。
7.如权利要求4至6任一项所述的方法,其特征在于,所述数据序列还包括函数调用堆栈;
所述将所述函数调用森林中符合合并条件的函数调用树进行合并,得到所述目标追踪函数集合对应的目标函数调用树集合,包括:
遍历所述根节点函数集合中的根节点函数,若所述根节点函数是函数调用者且所述根节点函数的子节点是所述函数且所述函数调用堆栈不为空,则根据所述函数调用堆栈,对以所述根节点函数为根节点的函数调用树进行合并,得到所述目标追踪函数集合对应的目标函数调用树集合。
8.一种数据处理方法,其特征在于,包括:
基于获取到的软件测试请求,加载目标软件的源码,所述软件测试请求用于请求对所述目标软件进行测试;
运行所述目标软件,输出所述目标软件正常运行状态下的函数调用树集合;
在接收到数据处理请求时,对所述函数调用树集合进行处理,确定出目标追踪函数集合对应的目标追踪数据,所述数据处理请求用于请求以树形结构表征与所述目标追踪函数集合相关的函数之间的调用关系;
对所述目标追踪数据进行处理,构建所述目标追踪函数集合对应的目标函数调用树集合。
9.一种数据处理装置,其特征在于,包括:
获取模块,用于获取目标软件正常运行状态下的函数调用树集合;
处理模块,用于对所述函数调用树集合中的节点函数进行分类,确定出目标追踪函数集合对应的目标追踪数据;
构建模块,用于基于所述目标追踪数据,构建所述目标追踪函数集合对应的目标函数调用树集合。
10.一种数据处理装置,其特征在于,包括:
加载模块,用于基于获取到的软件测试请求,加载目标软件的源码,所述软件测试请求用于请求对所述目标软件进行测试;
运行模块,用于运行所述目标软件,输出所述目标软件正常运行状态下的函数调用树集合;
处理模块,用于在接收到数据处理请求时,对所述函数调用树集合进行处理,确定出目标追踪函数集合对应的目标追踪数据,所述数据处理请求用于请求以树形结构表征与所述目标追踪函数集合相关的函数之间的调用关系;
构建模块,用于对所述目标追踪数据进行处理,构建所述目标追踪函数集合对应的目标函数调用树集合。
11.一种电子设备,其特征在于,包括处理器,所述处理器用于调用计算机程序,使得所述电子设备实现如上述权利要求1至8中任一项所述的方法。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,当所述计算机程序被处理器执行时,使得所述处理器执行如上述权利要求1至8中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211404756.3A CN115827436A (zh) | 2022-11-10 | 2022-11-10 | 数据处理方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211404756.3A CN115827436A (zh) | 2022-11-10 | 2022-11-10 | 数据处理方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115827436A true CN115827436A (zh) | 2023-03-21 |
Family
ID=85527501
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211404756.3A Pending CN115827436A (zh) | 2022-11-10 | 2022-11-10 | 数据处理方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115827436A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116680040A (zh) * | 2023-07-26 | 2023-09-01 | 腾讯科技(深圳)有限公司 | 一种容器处理方法、装置、设备、存储介质及程序产品 |
CN117171058A (zh) * | 2023-11-03 | 2023-12-05 | 睿思芯科(深圳)技术有限公司 | 调用链实时追踪方法、系统及相关设备 |
-
2022
- 2022-11-10 CN CN202211404756.3A patent/CN115827436A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116680040A (zh) * | 2023-07-26 | 2023-09-01 | 腾讯科技(深圳)有限公司 | 一种容器处理方法、装置、设备、存储介质及程序产品 |
CN116680040B (zh) * | 2023-07-26 | 2024-04-05 | 腾讯科技(深圳)有限公司 | 一种容器处理方法、装置、设备、存储介质及程序产品 |
CN117171058A (zh) * | 2023-11-03 | 2023-12-05 | 睿思芯科(深圳)技术有限公司 | 调用链实时追踪方法、系统及相关设备 |
CN117171058B (zh) * | 2023-11-03 | 2024-02-20 | 睿思芯科(深圳)技术有限公司 | 调用链实时追踪方法、系统及相关设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115827436A (zh) | 数据处理方法、装置、设备及存储介质 | |
WO2019227641A1 (zh) | 一种应用程序测试方法、装置、终端设备及介质 | |
CN111240876A (zh) | 微服务的故障定位方法、装置、存储介质及终端 | |
CN110096444A (zh) | 一种基于excel生成测试用例的管理系统、使用方法及设备 | |
CN112181430A (zh) | 代码变更统计方法、装置、电子设备及存储介质 | |
CN113127050B (zh) | 一种应用资源打包过程监控方法、装置、设备和介质 | |
CN111124883B (zh) | 一种基于树形表格的测试用例库引入方法、系统及设备 | |
CN115345600B (zh) | 一种rpa流程的生成方法和装置 | |
CN111381989A (zh) | 微服务链路生成方法、装置、服务器及存储介质 | |
CN115022201B (zh) | 一种数据处理功能测试方法、装置、设备及存储介质 | |
CN116360735A (zh) | 一种表单生成方法、装置、设备和介质 | |
CN115599401A (zh) | 自定义模型的发布方法、装置、设备及介质 | |
CN115237889A (zh) | 数据库切换方法及装置、存储介质、计算机设备 | |
CN114579136A (zh) | 代码处理方法、装置、计算机设备和存储介质 | |
CN110597517A (zh) | 动态解析mat文件的方法及装置 | |
CN117234907A (zh) | 一种图形用户界面的测试方法及系统 | |
CN111274143B (zh) | 埋点测试方法、装置、设备及存储介质 | |
CN115168124A (zh) | 硬盘并发执行多个文件的稳定性测试方法、装置、计算机设备及介质 | |
CN113190453A (zh) | 一种用户界面测试方法、装置、服务器和介质 | |
CN117033210A (zh) | 一种流量回放测试系统与方法 | |
CN114546360A (zh) | 代码程序推荐方法、装置、电子设备和存储介质 | |
CN115934546A (zh) | 一种基于Go语言的区块链集成测试方法及系统 | |
CN113448820A (zh) | 网页测试方法及装置 | |
CN117707971A (zh) | 测试用例的推荐方法、装置、电子设备及可读存储介质 | |
CN113590372A (zh) | 基于日志的链路追踪方法、装置、计算机设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |