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

代码间调用关系的分析方法、装置、设备及存储介质

文献发布时间:2024-04-18 19:58:30


代码间调用关系的分析方法、装置、设备及存储介质

技术领域

本申请涉及金融科技及软件开发技术领域,尤其涉及一种代码间调用关系的分析方法、装置、设备及存储介质。

背景技术

随着需求的迭代更新,应用软件的代码体量越来越大,尤其是在金融科技领域,例如银行、保险等行业。应用的业务流程复杂,业务形态多样,需要对接的外部关联系统较多,对外提供的服务也很多,不同的功能需要部署不同的代码模块。庞大的代码量,对于非原代码开发人员而言,熟悉每个应用的代码结构会非常吃力,难以在短时间内高效地梳理出应用所需要调取的其他应用接口有哪些,本地接口需要为谁提供服务等代码间调用关系等信息。

发明内容

本申请的主要目的在于提供一种代码间调用关系的分析方法、装置、设备及存储介质,可以解决现有技术中难以梳理代码间调用关系的技术问题。

为实现上述目的,本申请第一方面提供一种代码间调用关系的分析方法,该方法包括:

从存放代码的目标文件中读取待分析代码;

对待分析代码进行逐行代码分析,确定每行代码是否存在方法调用;

从存在方法调用的目标代码行中提取出被调用的第一方法的方法名;

确定在待分析代码中调用第一方法的第二方法的方法名;

根据方法名建立第一方法与第二方法之间的调用映射关系。

为实现上述目的,本申请第二方面提供一种代码间调用关系的分析装置,该装置包括:

代码读取模块,用于从存放代码的目标文件中读取待分析代码;

代码行分析模块,用于对待分析代码进行逐行代码分析,确定每行代码是否存在方法调用;

方法名提取模块,用于从存在方法调用的目标代码行中提取出被调用的第一方法的方法名;

调用确定模块,用于确定在待分析代码中调用第一方法的第二方法的方法名;

映射构建模块,用于根据方法名建立第一方法与第二方法之间的调用映射关系。

为实现上述目的,本申请第三方面提供一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时,使得处理器执行以下步骤:

从存放代码的目标文件中读取待分析代码;

对待分析代码进行逐行代码分析,确定每行代码是否存在方法调用;

从存在方法调用的目标代码行中提取出被调用的第一方法的方法名;

确定在待分析代码中调用第一方法的第二方法的方法名;

根据方法名建立第一方法与第二方法之间的调用映射关系。

为实现上述目的,本申请第四方面提供一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行以下步骤:

从存放代码的目标文件中读取待分析代码;

对待分析代码进行逐行代码分析,确定每行代码是否存在方法调用;

从存在方法调用的目标代码行中提取出被调用的第一方法的方法名;

确定在待分析代码中调用第一方法的第二方法的方法名;

根据方法名建立第一方法与第二方法之间的调用映射关系。

采用本申请实施例,具有如下有益效果:

本申请通过读取目标文件,逐行读取并分析代码行中的被调用方法,提取被调用方法的方法名,确定第一方法与第二方法之间的调用关系,实现了高效、快速、自动化地代码调用关系分析,使得代码之间的调用依赖关系一目了然,新手或非原代码开发人员也能快速了解每个功能的执行链路,进而提升工作效率,也可以用于快速定位代码问题。尤其可以解决金融科技领域,例如银行行、保险等行业中业务流程复杂、形态多样、调用外部系统较多、对外提供服务较多的大系统的代码梳理问题,使得代码梳理更加高效和全自动化,降低了人工成本,省时省力。

附图说明

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

其中:

图1为本申请实施例中代码间调用关系的分析方法的应用环境图;

图2为本申请实施例中代码间调用关系的分析方法的流程图;

图3为本申请实施例中调用关系链路图的示意图;

图4为本申请实施例中代码间调用关系的分析装置的结构框图;

图5为本申请实施例中计算机设备的结构框图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

图1为一个实施例中代码间调用关系的分析方法的应用环境图。参照图1,该代码间调用关系的分析方法应用于代码间调用关系的分析系统。该代码间调用关系的分析系统包括终端110和服务器120。终端110和服务器120通过网络连接,终端110具体可以是台式终端或移动终端,移动终端具体可以是手机、平板电脑、笔记本电脑等中的至少一种。服务器120可以用独立的服务器或者是多个服务器组成的服务器集群来实现。终端110用于将待分析代码存放于目标文件中,服务器120用于从存放代码的目标文件中读取待分析代码;对待分析代码进行逐行代码分析,确定每行代码是否存在方法调用;从存在方法调用的目标代码行中提取出被调用的第一方法的方法名;确定在待分析代码中调用第一方法的第二方法的方法名;根据方法名建立第一方法与第二方法之间的调用映射关系。

如图2所示,在一个实施例中,提供了一种代码间调用关系的分析方法。该代码间调用关系的分析方法具体包括如下步骤:

S100:从存放代码的目标文件中读取待分析代码。

具体地,本申请用于梳理代码间的调用关系。

存放代码的目标文件包括至少一个,不同的目标文件可能存放于相同文件夹,也可能分布于不同文件夹,本申请对此不作限制。不同目标文件存放不同的待分析代码。本实施例会逐个读取不同目标文件的待分析代码进行调用关系梳理。

S200:对待分析代码进行逐行代码分析,确定每行代码是否存在方法调用。

具体地,每个目标文件中的待分析代码由多行代码组成,本实施例会对待分析代码进行逐行代码分析,判断每行代码中是否存在方法调用,即查找每行代码中是否存在被调用的第一方法。

其中,在代码中方法调用具有独特的代码编写规则,例如,BufferedReader(newFileReader(file))中BufferedReader()是一个被调用方法,FileReader()也是一个被调用方法。再例如,while((line=reader.readLine())!=null)中reader.readLine()为一个被调用方法。

由上述可知,被调用方法通常以methodName()形式被调用,基于此,可以通过字符判断一条代码行是否存在方法调用。

S300:从存在方法调用的目标代码行中提取出被调用的第一方法的方法名。

具体地,一条目标代码行可能包含一个或多个被调用的第一方法,同一条代码行中的第一方法也可能存在嵌套调用的情况。例如,BufferedReader(new FileReader(file))中包含BufferedReader()、FileReader()两个被调用的第一方法,且FileReader()被BufferedReader()嵌套调用。当然,还可能存在一行目标代码行中的所有第一方法都被其他方法调用的情况。

基于被调用方法通常以methodName()形式被调用,可以提取出每条目标代码行中被调用的第一方法的方法名即methodName。

S400:确定在待分析代码中调用第一方法的第二方法的方法名。

具体地,第一方法为被调用的方法,第二方法为调用第一方法的方法。同一个方法既可能被其他方法调用也可能调用其他方法,因此,同一个方法既可能是第一方法也可能是第二方法;还可能同时具有第一方法和第二方法的身份;还可能是一个方法既不调用其他方法,也不被其他方法调用。

第一方法和第二方法可能是函数方法也可能是类(class)等。

S500:根据方法名建立第一方法与第二方法之间的调用映射关系。

具体地,根据调用与被调用的关系,可以建立被调用的第一方法与调用第一方法的第二方法之间的调用映射关系。

调用映射关系可以打印出来,并保存到指定的映射关系存储文件中,供用户查看。例如,代码如下:codeAnalysis.printCallGraph();

return callGraph;

其中,调用映射关系存储于ˋcallGraphˋ变量中,通过打印callGraph可以在计算机界面显示调用映射关系。

本实施例通过读取目标文件,逐行读取并分析代码行中的被调用方法,提取被调用方法的方法名,确定第一方法与第二方法之间的调用关系,实现了高效、快速、自动化地代码调用关系分析,使得代码之间的调用依赖关系一目了然,新手或非原代码开发人员也能快速了解每个功能的执行链路,进而提升工作效率,也可以用于快速定位代码问题。尤其可以解决金融科技领域,例如银行行、保险等行业中业务流程复杂、形态多样、调用外部系统较多、对外提供服务较多的大系统的代码梳理问题,使得代码梳理更加高效和全自动化,降低了人工成本,省时省力。

在一个实施例中,步骤S300中从存在方法调用的目标代码行中提取出被调用的第一方法的方法名,包括:

从存在方法调用的目标代码行中、确定被调用的第一方法的方法名所在的子字符串的开始截取位置和终止截取位置;

从目标代码行中截取从开始截取位置到终止截取位置之间的所有字符,得到被调用的第一方法的方法名。

具体地,通过indexOf()方法可以定位字符在一个字符串中的位置即获取字符位置。indexOf()方法用于在String类的对象中查找子字符串,该方法具体返回一个整数值,为子字符串的开始位置,如果没有找到子字符串,返回-1。

被调用方法通常以methodName()形式被调用,因此,可以定位目标代码行中的"methodName("这部分的字符作为子字符串,然后将这一串子字符串的第一个字符的确定为开始截取位置,最后一个字符确定为终止截取位置。

例如,一个目标代码行为callGraph.put(fileName,calledMethod)中,"callGraph.put("为子字符串,该子字符串的第一个字符c的位置为开始截取位置,第一个字符(为终止截取位置。

通过indexOf()方法可以简单巧妙的定位第一方法或第二方法等任意方法的方法名在所在目标代码行中的首尾位置或位置索引。

indexOf()方法得到的开始截取位置和终止截取位置提供给substring()方法,分别作为substring()方法的startIndex和endIndex。

通过substring()方法可以对字符串进行部分截取。substring()方法包括String.substring(int startIndex,int endIndex)和String.substring(intstartIndex)两种字符截取方式。

String.substring(int startIndex,int endIndex)表示只含开头不含结尾,因此截取是截取endIndex-beginIndex个字符,返回的是[beginIndex,endIndex-1]范围内的字符。

例如,String.substring(0,2)是截取两个字符(第一个字符(startIndex=0表示第一个字符)到第二个字符(index为1)),不包含第三个字符(endIndex=2表示第三个字符)。String.substring(2,5)是截取3个字符(第三个字符(startIndex=2表示第三个字符)、第四个字符(index为3)和第五个字符(index为4)),不包含第六个字符(endIndex=5表示第六个字符)。

String.substring(int startIndex)表示startIndex为要开始截取的位置的索引,方法将返回一个子字符串,内容为原字符串从startIndex位置开始到原字符串结束中间的数据。也可以理解为截掉原字符串中的前startIndex个字符,返回由后面保留的字符组成的子字符串。

String.substring(5)表示截掉原字符串前5个字符,将后面剩余的字符保留并返回。或者,截取从原字符串的第6个字符开始到原字符串结束的所有字符。

例如,一个目标代码行为:callGraph.put(fileName,calledMethod),利用String.substring(0,13),可以截取出callGraph.put即得到方法名。

当然,还可以在每个截取的方法名的字符串后面拼接两个字符(),得到拼接后的方法名,本申请对此不作限制。

本实施例通过对方法名所在的子字符串进行首尾字符定位,得到位置索引,再根据位置索引对目标代码行中的方法名进行字符截取,即可获取到方法名对应的字符串,简单高效。

在一个实施例中,步骤S500中根据方法名建立第一方法与第二方法之间的调用映射关系,包括:

将第二方法的方法名作为key、第一方法的方法名作为value,将得到的目标键值对作为调用映射关系存入创建的HashMap中。

具体地,如果目标键值对中的目标key已存在于已创建的HashMap中,则将目标键值对中的目标value添加至HashMap中目标key对应的已有value之后,且value之间使用目标字符间隔。目标字符可以是逗号(,)、顿号(、)、分号(;)等其中的一种,本申请对此不做限制。

如果目标键值对中的目标key不存在于已创建的HashMap中,则将目标键值对作为调用映射关系存入创建的HashMap中。

HashMap是Java中常用的数据结构之一,它可以存储键值对,并且可以根据key快速找到对应的value。

本实施例通过HashMap存储第一方法与第二方法之间的调用映射关系,可以起到实现映射关系以及快速查找的目的,还可以用于缓存数据、统计数据等各种功能。

在一个实施例中,在步骤S500中根据方法名建立第一方法与第二方法之间的调用映射关系之后,该方法还包括:

根据从至少一个不同文件夹路径的所有目标文件中获取的所有调用映射关系,生成调用关系链路图,其中,不同文件夹路径所对应的目标文件夹用于存储不同代码仓库的代码。

具体地,每个文件夹路径所对应的目标文件夹中有至少一个目标文件,每个目标文件中存储有待分析代码。通过上述方法可以获取到每个目标文件对应的调用映射关系集合。

如果使用HashMap存储,则每个目标文件或者每个目标文件夹对应一个HashMap。

不同代码仓库之间存在代码调用关系,因此,对所有目标文件中的待分析代码进行调用关系分析和梳理,可以得到所有调用映射关系。根据代码调用的传递性,可以对所有调用映射关系进行整合并进行可视化,得到用于展示整体调用映射关系的调用关系链路图。

调用关系链路图具体描述例如方法A调用方法B、方法C和方法D;方法C调用方法E;方法D调用方法F;方法B调用方法C等等。

当然,还可以针对每个代码仓库生成一个对应的内部调用关系链路图,用于展示同一个代码仓库之间的代码调用关系。

另外,生成的调用关系链路图可以保存为PNG、JPG、SVG、PDF等格式,本申请对此不作限制,方便展示和分享。

本实施例通过对所有调用关系进行整合和梳理,生成调用关系链路图,方便更直观的展示不同代码仓库之间和/或同一个代码仓库之间的代码调用关系。

在一个实施例中,根据从至少一个不同文件夹路径的所有目标文件中获取的所有调用映射关系,生成调用关系链路图,包括:

根据从至少一个不同文件夹路径的所有目标文件中获取的所有调用映射关系,生成目标格式的调用关系文件;

使用Graphviz根据调用关系文件进行渲染,得到可视化的调用关系链路图。

具体地,Graphviz(英文:Graph Visualization Software的缩写)是一种可跨平台的脚本自动化绘图软件工具,用于绘制DOT语言脚本描述的图形或“关系图”,Graphviz由一种被称为DOT语言的图形描述语言,与一组可以生成和/或处理DOT文件的工具组成。Graphviz使用一种称为dot语言的DSL语言编写Script File脚本文件,然后使用Layout布局引擎解析这个Script File脚本文件完成自动化布局渲染。

目标格式的调用关系文件为脚本文件,调用关系文件可以为以.gv为文件扩展名的文件,也可以是.dot为文件扩展名的文件。

调用关系文件用于根据第一方法与第二方法之间的调用关系,定义第一方法与第二方法之间的连接关系或布局关系,即定义第一方法和第二方法为节点,将第一方法与第二方法之间的调用关系定义为边,以及定义节点和边的属性。

Graphviz解析调用关系文件实现自动化布局渲染,得到可视化的调用关系链路图,调用关系链路图即为调用关系导图。优选地,调用关系链路图为有向图(digraph)。

调用关系链路图可生成PNG、、SVG、PDF等格式,方便展示以及分享转发。

本实施例利用Graphviz可以高效简便地绘制代码方法之间的调用关系链路图,且方便存储转发以及展示分享。

在一个具体实施例中,根据从至少一个不同文件夹路径的所有目标文件中获取的所有调用映射关系,生成目标格式的调用关系文件,包括:

将每组调用映射关系以Key->Value形式输出;

根据所有Key->Value形式的输出生成目标格式的调用关系文件。

具体地,.dot格式的调用关系文件具有固定编写格式,将Key->Value形式的输出与.dot格式的固定代码模板进行拼接,得到目标格式的调用关系文件。

调用关系文件具体如以下代码所示:

其中,digraph CallGraph{}为固定的代码模板,将Key->Value形式的输出添加至该代码模板即可自动生成调用关系文件。

当然上述仅仅是一种示例性说明,调用关系文件中还可以具有更丰富的属性配置,例如颜色等,本申请对此不作限制。

图3为本申请实施例中调用关系链路图的示意图,参考图3,方法a调用方法b、方法c、方法d、方法e和方法f;方法b调用方法b1、方法b2和方法b3;方法c调用方法c1和方法c2;方法d调用方法d1和方法d2;方法e调用方法e1、方法e2和方法e3;方法f调用方法f1和方法c;方法c2调用方法d1;方法d1调用方法c1;方法f1调用方法e2和方法e3。

当然,图3仅仅是一种示例性举例,实际的调用关系链路图不受图3的限制和约束,本申请对实际的调用关系链路图的展示样式不作限制。

本申请可应用于各种不同应用系统的代码梳理,或者,多个关联的应用系统的代码梳理。例如应用于下单系统的代码梳理,更具体地,例如通过页面表单选择商品、下单付款。付款需要调用A接口,这个A接口的背后包含A.1接口用于先去验证你的账户信息,还包含A.2接口用于验证库存的信息,还包含A.3接口一个月调用收单商户进行付款,如果不对代码进行梳理这种关系平时只能通过研读代码才能得到,如果生成调用关系链路图,就可以很明确知道在付款的时候A接口一共调用了哪几个接口,付款失败异常的时候也可以快速找到这几个接口,实现快速定位问题的目的。

在一个实施例中,步骤S100中从存放代码的目标文件中读取待分析代码,包括:

获取文件夹路径;

根据文件夹路径定位目标文件夹;

通过遍历,逐个读取目标文件夹中的每个目标文件,其中,目标文件的实际后缀为目标后缀;

从当前遍历到的目标文件中读取待分析代码。

具体地,通过从文件夹路径集合中依次读取不同的文件夹路径,可以依次访问不同的目标文件夹。依次遍历目标文件夹下的目标文件,可以从存放代码的目标文件中读取到待分析代码。

其中,目标文件夹下可能有较多文件,这些文件有些存放有待分析代码,有些文件存放的是为非待分析代码的其他代码相关数据。

目标文件可以根据文件的类型确定,具体根据文件的后缀名或扩展名确定。例如扩展名为.java的文件为目标文件。当然,目标文件也可以是其他扩展名,具体根据实际情况配置,本申请对此不做限制。

待分析代码为从至少一个代码仓库下载并保存至本地或目标存储地的代码。这些待分析代码可以分布于不同文件夹中的不同目标文件中。

利用代码仓库管理项目代码,可以提供企业级的云端代码管理服务,支持精细化权限管控、多分支并行开发、多版本管理等功能。

为了便于代码分析,本实施例会将代码仓库克隆到本地,在本地进行代码分析,方便高效,降低了对原代码的侵入性和可能带来的破坏。

为了对代码进行分门别类,优选地,一个代码仓库对应一个文件夹,不同代码仓库不共用文件夹。一个文件夹下面可以有至少一个子文件夹,每个子文件夹中还可以划分子文件夹,子文件夹和文件夹都可以存放文件,这些文件中有些为目标文件,有些为非目标文件。

另外,可以采用java递归的方式遍历文件夹下的文件;或者使用循环的方式遍历文件夹下的文件,例如使用File的listFiles()方法遍历目标文件夹下的文件。对于非目标后缀的非目标文件跳过,逐个对为目标后缀的目标文件进行代码分析,一个当前目标文件的代码分析完成(代码行都读取并分析完成)或当前目标文件为空则读取下一个目标文件的待分析代码,直到完成整个目标文件夹中的目标文件的代码分析。

本实施例通过遍历可以读取不同目标文件中的待分析代码,实现对不同待分析代码的调用关系分析。

当然,本申请还可以根据目标文件的文件名以及第一方法与第二方法的调用映射关系,构建目标文件与调用映射关系之间的映射关系。还可以根据目标文件夹的文件夹名和目标文件的文件名构建文件夹与目标文件的映射关系。这样可以分门别类的存储不同目标文件、不目标文件夹的调用映射关系。

在一个实施例中,步骤S100中从存放代码的目标文件中读取待分析代码,包括:

从存放代码的目标文件中读取待分析代码作为字符数据存放于缓冲区;

从缓冲区读取待分析代码。

具体地,为了提高字符流读写的效率,本实施例引入了缓冲机制,进行字符批量的读写,提高了单个字符读写的效率。

更具体地,java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过方法输入数据或输出数据。例如FileInputStream(该类用于从文件读取数据)、FileOutputStream(该类用来创建一文件并向文件中写数据)、BufferedReader(用于加快读取字符的速度)、BufferedWriter(用于加快写入的速度)等等。

本实施例可以通过BufferedReader从存放代码的目标文件中读取待分析代码。当BufferedReader在读取文本文件时,会先尽量从文件中读取字符数据并放满缓冲区,之后使用read0方法会先从缓冲区中进行读取。使用BufferedReader类可以加快字符读取的速度。

本申请代码间调用关系的分析方法所对应的执行代码可以以自动化脚本的形式存储并运行,也可以封装为插件被安装于计算机设备,被计算机设备运行,本申请对此不作限制。

参考图4,本申请还提供了一种代码间调用关系的分析装置,该装置包括:

代码读取模块100,用于从存放代码的目标文件中读取待分析代码;

代码行分析模块200,用于对待分析代码进行逐行代码分析,确定每行代码是否存在方法调用;

方法名提取模块300,用于从存在方法调用的目标代码行中提取出被调用的第一方法的方法名;

调用确定模块400,用于确定在待分析代码中调用第一方法的第二方法的方法名;

映射构建模块500,用于根据方法名建立第一方法与第二方法之间的调用映射关系。

本实施例通过读取目标文件,逐行读取并分析代码行中的被调用方法,提取被调用方法的方法名,确定第一方法与第二方法之间的调用关系,实现了高效、快速、自动化地代码调用关系分析,使得代码之间的调用依赖关系一目了然,新手或非原代码开发人员也能快速了解每个功能的执行链路,进而提升工作效率。尤其可以解决金融科技领域,例如银行行、保险等行业中业务流程复杂、形态多样、调用外部系统较多、对外提供服务较多的大系统的代码梳理问题,使得代码梳理更加高效和全自动化,降低了人工成本,省时省力。

在一个实施例中,方法名提取模块300具体包括:

定位模块,用于从存在方法调用的目标代码行中、确定被调用的第一方法的方法名所在的子字符串的开始截取位置和终止截取位置;

提取模块,用于从目标代码行中截取从开始截取位置到终止截取位置之间的所有字符,得到被调用的第一方法的方法名。

在一个实施例中,映射构建模块500,具体用于将第二方法的方法名作为key、第一方法的方法名作为value,将得到的目标键值对作为调用映射关系存入创建的HashMap中。

在一个实施例中,该装置还包括:

链路图生成模块,用于根据从至少一个不同文件夹路径的所有目标文件中获取的所有调用映射关系,生成调用关系链路图,其中,不同文件夹路径所对应的目标文件夹用于存储不同代码仓库的代码。

在一个实施例中,链路图生成模块包括:

调用关系文件生成模块,用于根据从至少一个不同文件夹路径的所有目标文件中获取的所有调用映射关系,生成目标格式的调用关系文件;

渲染模块,用于使用Graphviz根据调用关系文件进行渲染,得到可视化的调用关系链路图。

在一个实施例中,代码读取模块100包括:

路径获取模块,用于获取文件夹路径;

文件夹定位模块,用于根据文件夹路径定位目标文件夹;

遍历模块,用于通过遍历,逐个读取目标文件夹中的每个目标文件,其中,目标文件的实际后缀为目标后缀;

第一读取模块,用于从当前遍历到的目标文件中读取待分析代码。

在一个实施例中,代码读取模块100包括:

缓存模块,用于从存放代码的目标文件中读取待分析代码作为字符数据存放于缓冲区;

第二读取模块,用于从缓冲区读取待分析代码。

图5示出了一个实施例中计算机设备的内部结构图。该计算机设备具体可以是终端,也可以是服务器。如图5所示,该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作系统,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现上述方法实施例中的各个步骤。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行上述方法实施例中的各个步骤。本领域技术人员可以理解,图5中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,提出了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行以下步骤:

从存放代码的目标文件中读取待分析代码;

对待分析代码进行逐行代码分析,确定每行代码是否存在方法调用;

从存在方法调用的目标代码行中提取出被调用的第一方法的方法名;

确定在待分析代码中调用第一方法的第二方法的方法名;

根据方法名建立第一方法与第二方法之间的调用映射关系。

本实施例通过读取目标文件,逐行读取并分析代码行中的被调用方法,提取被调用方法的方法名,确定第一方法与第二方法之间的调用关系,实现了高效、快速、自动化地代码调用关系分析,使得代码之间的调用依赖关系一目了然,新手或非原代码开发人员也能快速了解每个功能的执行链路,进而提升工作效率。尤其可以解决金融科技领域,例如银行行、保险等行业中业务流程复杂、形态多样、调用外部系统较多、对外提供服务较多的大系统的代码梳理问题,使得代码梳理更加高效和全自动化,降低了人工成本,省时省力。

在一个实施例中,提出了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时,使得处理器执行以下步骤:

从存放代码的目标文件中读取待分析代码;

对待分析代码进行逐行代码分析,确定每行代码是否存在方法调用;

从存在方法调用的目标代码行中提取出被调用的第一方法的方法名;

确定在待分析代码中调用第一方法的第二方法的方法名;

根据方法名建立第一方法与第二方法之间的调用映射关系。

本实施例通过读取目标文件,逐行读取并分析代码行中的被调用方法,提取被调用方法的方法名,确定第一方法与第二方法之间的调用关系,实现了高效、快速、自动化地代码调用关系分析,使得代码之间的调用依赖关系一目了然,新手或非原代码开发人员也能快速了解每个功能的执行链路,进而提升工作效率。尤其可以解决金融科技领域,例如银行行、保险等行业中业务流程复杂、形态多样、调用外部系统较多、对外提供服务较多的大系统的代码梳理问题,使得代码梳理更加高效和全自动化,降低了人工成本,省时省力。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

相关技术
  • 一种代码覆盖率分析方法、装置、设备及存储介质
  • 一种调用链数据的处理方法、装置、设备及存储介质
  • 接口调用方法、装置、计算机设备和存储介质
  • 接口调用的认证方法和装置,存储介质和电子设备
  • 一种代码转换方法、装置及设备、存储介质
  • JAVA代码调用关系的确定方法、装置、电子设备及存储介质
  • 调用关系分析方法、装置、设备及存储介质
技术分类

06120116503255