一种代码解析方法与流程

摘要: 本技术主要涉及计算机软件工程领域,尤其涉及一种代码解析方法。背景技术:1、在保险、银行等金融核心系统中,业务功能通常由多种软件组件共同实现。例如,承保、理赔、保...
一种代码解析方法与流程

本技术主要涉及计算机软件工程领域,尤其涉及一种代码解析方法。

背景技术:

1、在保险、银行等金融核心系统中,业务功能通常由多种软件组件共同实现。例如,承保、理赔、保全、续期收费、账务处理等业务流程,往往涉及java服务、规则引擎、数据库表、存储过程、sql脚本、配置文件以及批处理程序等不同类型的代码资源。上述代码资源通常分布在不同编程语言、不同文件类型和不同运行层级中,并通过显式调用、配置映射、数据库访问、脚本执行或运行时参数传递等方式共同完成业务处理。

2、现有代码解析方法通常基于抽象语法树、正则表达式、依赖矩阵或静态调用图,对源代码中的类、方法、接口、变量、sql语句、配置项等结构信息进行提取,并据此建立代码实体之间的调用关系或依赖关系。

3、然而,在金融核心系统等复杂软件系统中,许多关键业务链路并不是通过单一语言内部的显式调用完成的,而是通过跨语言、跨运行层级的隐式调用关系实现。例如,java服务可能通过mybatis映射文件、jdbc语句、callablestatement、配置文件、字符串拼接或运行时参数调用sql脚本和数据库存储过程;存储过程又可能进一步读写多个数据库表、状态字段或业务规则表;规则引擎中的规则模板也可能通过中文业务名称、规则编码或配置项与java方法、数据库字段或存储过程建立间接关联。

4、对于上述隐式调用关系,传统静态调用图或单一语言解析方式通常难以准确识别真实被调用实体。一方面,隐式调用目标可能并不直接出现在源代码的语法调用节点中,而是分散存在于配置文件、sql片段、字符串变量、注释、规则模板或运行时参数中;另一方面,大型系统中常常存在同名或近似命名的方法、数据表、字段、存储过程和规则对象,仅依靠名称匹配或关键词匹配难以准确区分候选目标,容易出现依赖关系漏建、误建或无法建立的情况。

5、因此,亟需一种能够面向跨语言、跨运行层级代码资源进行统一解析和追踪的技术方案,以解决现有代码解析方法难以识别隐式调用关系、无法生成完整依赖链路的问题,从而提高复杂软件系统中代码分析的准确性。

技术实现思路

1、本技术针对难以识别隐式调用关系以及无法生成完整依赖链路的技术问题,提供一种代码解析方法,代码解析方法包括以下步骤:获取源代码,源代码包括至少一个模块,模块为根据构建配置、目录结构、包路径、命名空间或预设业务域划分规则在源代码中确定的代码组织单元;通过静态结构扫描获取抽象语法树节点、第一代码实体和第一依赖关系,第一代码实体包括代码侧代码实体和数据库侧结构实体;生成与每个模块对应的证据包,证据包包括模块内解析的抽象语法树节点、sql结构证据、状态字段声明及枚举取值、方法名与签名、注释及相邻上下文片段中的至少一种;根据证据包、第一代码实体和第一依赖关系,通过语义识别模型生成第二代码实体、状态机实体、状态实体和规则实体,并确定第二代码实体、状态机实体、状态实体和规则实体之间的第二依赖关系;根据模块、第二代码实体、状态机实体、状态实体、规则实体以及第二依赖关系生成结构化知识资产;根据结构化知识资产生成跨语言桥接边。

2、在本技术的一些实施例中,通过静态结构扫描获取抽象语法树节点、第一代码实体和第一依赖关系还包括以下步骤:将第一代码实体与其在源代码中的文件路径、起始行号和结束行号绑定;代码侧代码实体包括函数或方法定义、常量声明、变量声明、枚举常量以及函数或方法调用点中的至少一种,数据库侧结构实体包括数据表标识、数据字段标识、存储过程标识、sql语句片段以及调用参数中的至少一种,第一依赖关系包括函数或方法调用关系、继承关系、实现关系、变量赋值关系、参数传递关系、sql映射关系、表访问关系、字段访问关系、参数绑定关系以及存储过程调用关系中的至少一种。

3、在本技术的一些实施例中,sql结构证据至少包括:sql语句文本、sql标识、来源文件路径、行号范围、参数信息以及已解析出的调用上下文信息中的至少一种;状态字段声明及枚举取值包括数据表字段或枚举常量及其赋值行为、比较行为、取值集合和源码坐标中的至少一种;方法名与签名包括当前方法的方法名、被调用方法的方法名、参数类型列表和返回值类型中的至少一种;注释及相邻上下文片段包括与抽象语法树节点、sql结构证据或状态字段声明及枚举取值位于预设上下文窗口内的代码注释和代码片段。

4、在本技术的一些实施例中,语义识别模型是以证据包为约束输入的大语言模型;第二代码实体、状态机实体、状态实体和规则实体包括:节点标识、节点类型、名称、模块标识、文件路径、起始行号、结束行号、签名和元数据的至少一种;第二依赖关系至少包括源节点标识、目标节点标识、关系类型、条件和来源证据的至少一种;关系类型包括调用关系、读取关系、写入关系、依赖关系、受规则约束关系、约束数据表关系、触发关系、归属关系、状态转移关系、归属于状态机关系、前置关系、互斥关系和覆盖关系中的至少一种。

5、在本技术的一些实施例中,根据证据包、第一代码实体和第一依赖关系,通过语义识别模型生成第二代码实体、状态机实体、状态实体和规则实体,并确定第二代码实体、状态机实体、状态实体和规则实体之间的第二依赖关系还包括以下步骤:基于稳定键对语义识别得到的候选状态机实体、候选状态实体和候选规则实体进行归并,其中,候选状态机实体的稳定键包括数据表标识和状态字段标识,候选状态实体的稳定键包括所属状态机实体和状态取值,候选规则实体的稳定键包括规则类型、约束对象以及触发方法或触发存储过程;将归并后的候选状态机实体、候选状态实体和候选规则实体与第一代码实体、第一依赖关系、证据包中的sql结构证据进行交叉印证,得到第二代码实体、状态机实体、状态实体、规则实体和第二依赖关系。

6、在本技术的一些实施例中,根据模块、第二代码实体、状态机实体、状态实体、规则实体以及第二依赖关系生成结构化知识资产还包括:根据模块,与第二代码实体、状态机实体、状态实体、和规则实体相对应的节点类型、相对应的文件路径、相对应的名称生成多维索引,并将多维索引作为结构化知识资产的一部分进行组织和存储。

7、在本技术的一些实施例中,根据结构化知识资产生成跨语言桥接边还包括以下步骤:对源代码中的数据库访问调用片段进行调用现场解析,提取目标sql引用信息;在结构化知识资产中检索与目标sql引用信息相匹配的候选实体;若存在多个候选实体,则对每个候选实体计算关联权重,并选取关联权重最高的候选实体作为确定实体;建立从数据库访问调用片段对应的方法节点或调用点节点到确定实体对应节点的跨语言桥接边。

8、在本技术的一些实施例中,根据结构化知识资产生成跨语言桥接边还包括:若存在一个候选实体,则选取候选实体作为确定实体,并计算候选实体的关联权重;建立从数据库访问调用片段对应的方法节点或调用点节点到确定实体对应节点的跨语言桥接边。

9、在本技术的一些实施例中,关联权重根据模块路径接近度、参数数量匹配度、签名匹配度、sql上下文匹配度、名称别名匹配度和调用上下文一致性中的至少一种计算得到。

10、在本技术的一些实施例中,跨语言桥接边包括桥接类型、关联权重和来源证据,桥接类型包括mybatis映射调用、ibatis映射调用或jdbc映射调用中的至少一种。

11、本技术通过模块化上下文保留、静态结构扫描、模块级证据包生成、语义实体识别、结构化知识资产生成、调用现场解析以及基于关联权重的候选实体消歧,能够将分散在不同语言和不同运行层级中的显式依赖关系和隐式调用关系统一转换为可遍历、可追溯的结构化依赖链路。由此,能够解决现有代码解析方法难以识别跨语言隐式调用关系、无法完整生成依赖链路的问题,提高代码分析和依赖链路识别的准确性。