代码修改内容分析方法、设备及存储介质与流程

摘要: 本技术涉及软件代码分析,尤其涉及一种代码修改内容分析方法、设备及存储介质。背景技术:1、在基于git管理的软件开发过程中,代码变更影响分析是版本评审和缺陷定位的...
代码修改内容分析方法、设备及存储介质与流程

本技术涉及软件代码分析,尤其涉及一种代码修改内容分析方法、设备及存储介质。

背景技术:

1、在基于git管理的软件开发过程中,代码变更影响分析是版本评审和缺陷定位的关键环节。现有分析工具主要依赖原生git指令提取代码差异,但其通常以文件或代码行距离作为切分依据,缺乏对代码语义结构的感知,容易将不同方法的修改合并为同一变更单元,导致变更单元划分粗糙且不准确。这种划分方式影响了变更影响分析的可靠性,难以满足代码修改精细评估的需求。

2、上述内容仅用于辅助理解本技术的技术方案,并不代表承认上述内容是现有技术。

技术实现思路

1、本技术的主要目的在于提供一种代码修改内容分析方法、设备及存储介质,旨在解决现有代码变更分析中代码修改内容切分不准确的技术问题。

2、为实现上述目的,本技术实施例提供一种代码修改内容分析方法,所述代码修改内容分析方法包括:

3、获取目标项目代码修改前后的代码差异信息;

4、基于抽象语法树解析所述代码差异信息,以方法为最小单元对所述代码差异信息进行切分,得到多个修改点,每个修改点对应单个方法的代码变更;

5、将各修改点对应的差异代码及所属方法的完整代码输入大模型,得到修改内容总结;

6、根据各修改点所属方法的类内调用关系和类间调用关系进行调用链路分析,得到调用链路分析文档;

7、基于所述修改内容总结和所述调用链路分析文档,生成代码变更分析结果。

8、在一实施例中,所述获取目标项目代码修改前后的代码差异信息的步骤包括:

9、获取用户输入的所述目标项目代码修改前后的哈希值;

10、根据所述哈希值,调用命令行终端执行git diff指令,得到所述代码差异信息。

11、在一实施例中,所述基于抽象语法树解析所述代码差异信息,以方法为最小单元对所述代码差异信息进行切分,得到多个修改点,每个修改点对应单个方法的代码变更的步骤包括:

12、根据所述代码差异信息,确定发生代码变更的文件及变更代码行范围;

13、通过抽象语法树解析所述文件,获取所述文件中所有方法的名称、起始代码行和结束代码行;

14、将所述变更代码行范围与各方法的起始代码行和结束代码行进行比对,当所述变更代码行范围跨越至少两个方法的起始代码行和结束代码行时,按照方法边界将所述代码差异信息拆分为多个修改点,每个修改点对应单个方法的代码变更。

15、在一实施例中,所述根据所述代码差异信息,确定发生代码变更的文件及变更代码行范围的步骤之后,所述代码修改内容分析方法还包括:

16、获取发生代码变更的文件的类型;

17、当所述类型为预设配置文件类型时,将所述发生代码变更的文件标记为配置修改,并记录所述配置修改对应的修改点。

18、在一实施例中,所述将各修改点对应的差异代码及所属方法的完整代码输入大模型,得到修改内容总结的步骤包括:

19、获取所述修改点对应的差异代码及所属方法的完整代码;

20、将所述差异代码和所述完整代码填充至预设提示词模板,并将填充后的提示词输入大模型,获取所述大模型输出的所述修改点的代码变更总结;

21、遍历完所有修改点后,汇总各修改点的代码变更总结,得到所述修改内容总结。

22、在一实施例中,所述根据各修改点所属方法的类内调用关系和类间调用关系进行调用链路分析,得到调用链路分析文档的步骤包括:

23、基于抽象语法树解析目标项目中所有类文件,根据每个类文件中的依赖注入标记构建所述类间调用关系,并通过抽象语法树解析每个类文件中的各方法体,识别各方法体内调用的同类方法,构建所述类内调用关系;

24、根据所述类内调用关系,确定直接或间接调用所述修改点所属方法的所有类内方法,并将所述修改点所属方法及所述所有类内方法共同组成初始方法集合;

25、根据所述类间调用关系,从所述初始方法集合中识别所有存在跨类上层调用的方法,形成待分析方法集合;

26、针对所述待分析方法集合中的每一方法,结合所述类内调用关系和所述类间调用关系向上追溯跨类上层调用方法,若追溯到的所述跨类上层调用方法存在进一步的跨类上层调用,则继续追溯,直至追溯到的所述跨类上层调用方法在所述类间调用关系中不存在跨类上层调用,将最终追溯到的跨类上层调用方法记录为顶层方法;

27、根据各修改点和各修改点追溯到的顶层方法,生成所述调用链路分析文档。

28、在一实施例中,所述根据各修改点和各修改点追溯到的顶层方法,生成所述调用链路分析文档的步骤包括:

29、以所述顶层方法为单位对各修改点进行分组,每组包含同一所述顶层方法以及受所述顶层方法影响的所有修改点;

30、针对每组,根据所述类内调用关系和所述类间调用关系,构建从组内各修改点至对应所述顶层方法的调用链路,并将所有组的调用链路整合为有向无环图,所述有向无环图的每个节点表示一个方法调用;

31、基于所述有向无环图及各组的分组信息,生成所述调用链路分析文档,所述调用链路分析文档记录每个所述顶层方法及所述顶层方法对应的受影响的修改点、各修改点至对应所述顶层方法的完整调用路径。

32、在一实施例中,所述基于所述修改内容总结和所述调用链路分析文档,生成代码变更分析结果的步骤包括:

33、根据所述调用链路信息,将所述修改内容总结与所述调用链路信息中各方法调用节点进行关联,生成所述方法调用节点与所述修改内容总结的映射关系;

34、根据所述映射关系和所述调用链路分析文档,生成代码变更分析结果。

35、本技术实施例还提供一种代码修改内容分析设备,所述代码修改内容分析设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序配置为实现如上文所述的代码修改内容分析方法的步骤。

36、本技术实施例还提供一种存储介质,所述存储介质为计算机可读存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上文所述的代码修改内容分析方法的步骤。

37、本技术提出的一个或多个技术方案,至少具有以下技术效果:

38、本技术通过以方法为最小单元对代码差异信息进行切分,使每个修改点精确对应单个方法的代码变更,避免不同方法的修改被错误合并,提升了代码修改内容分析的精准度;通过将各修改点对应的差异代码及所属方法的完整代码共同输入大模型,使大模型能够获得完整的代码上下文进行语义理解,避免因缺失方法上下文导致的总结信息不完整,提升了修改内容总结的准确性;进一步地,通过根据类内调用关系和类间调用关系对各修改点进行调用链路分析,能够从修改点所属方法出发逐层向上追溯所有层级的调用关系,直至确定所影响的顶层方法,克服了传统调用链路分析仅能识别直接调用关系的局限性,实现了跨层级的全链路影响追踪;此外,基于所述修改内容总结和所述调用链路分析文档生成代码变更影响分析结果,将大模型的语义理解能力与结构化的调用链路分析深度融合,使开发人员能够以顶层方法为维度快速定位受影响的改动范围,提升了代码评审和变更影响分析的效率。