一种代码变更分析方法、装置、设备及存储介质与流程
- 国知局
- 2024-11-06 14:32:56
本发明涉及人工智能,尤其涉及一种代码变更分析方法、装置、设备及存储介质。
背景技术:
1、在软件开发中,代码的变动可能会对整个业务产生意想不到的影响,特别是在大型应用程序中,代码的修改涉及多个模块和功能,若代码变更影响分析不到位,可能导致功能故障、性能下降或数据不一致等问题。为确保业务的稳定性和可靠性,需要一种高效可靠的监控方案来检测代码变动并预防其对业务造成负面影响。
2、当前的版本控制工具只能展示单一文件的变更前后对比,无法明确展示变更对其他代码的潜在影响。还有一些静态分析工具在评估代码变更影响时也存在局限性,依赖于代码的静态结构,对于具有灵活语法结构的编程语言,静态分析工具难以穷尽所有可能的情况,从而难以全面、快速地分析代码的依赖关系和变更影响。
技术实现思路
1、本技术实施例提供一种代码变更分析方法、装置、设备及存储介质,用于全面、快速分析代码的依赖关系和变更影响。
2、第一方面,本技术实施例提供一种代码变更分析方法,包括:
3、通过对第一项目代码进行静态分析,得到所述第一项目代码中各第一函数的相关信息;
4、针对任一第一函数,根据所述第一函数的相关信息确定所述第一函数的来源;
5、若存在未知来源的第一函数,则通过大模型确定所述未知来源的第一函数的来源;所述大模型是通过对函数的上下文信息进行推理得出函数的来源;
6、通过所述第一项目代码和第二项目代码,从各第一函数中确定发生代码变更的第二函数;所述第一项目代码是通过对所述第二项目代码进行代码变更后得到的;
7、根据任一第二函数的来源,确定所述第二函数在所述第一项目代码中的依赖链路,通过所述依赖链路对所述第二函数进行代码变更分析。
8、本技术实施例中,首先对第一项目代码采用静态分析,得到第一函数的来源,但此时还存在未知来源的第一函数,利用大模型的语义分析能力,将未知来源的第一函数进行补全,得到近乎所有第一函数的来源。然后再根据大模型的代码分析能力,确定变更的函数的依赖链路,从而完成对第一项目代码中的所有代码变更进行分析。通过静态分析可以确定出大部分函数的来源,提升了函数来源确定的效率和准确性,通过大模型补全未知来源函数的来源,弥补了静态分析分析不全面的问题,避免了未知来源的第一函数发生变更后无法确定其依赖链路,从而进一步完善和补全复杂的代码依赖关系。
9、可选地,所述通过对第一项目代码进行静态分析,得到所述第一项目代码中各第一函数的相关信息,包括:
10、对第一项目代码中的每个文件进行静态分析,得到每个文件中的各第一函数,以及每个第一函数的调用信息及导入信息;
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、处理模块,用于若存在未知来源的第一函数,则通过大模型确定所述未知来源的第一函数的来源;所述大模型是通过对函数的上下文信息进行推理得出函数的来源;
39、变更模块,用于通过所述第一项目代码和第二项目代码,从各第一函数中确定发生代码变更的第二函数;所述第一项目代码是通过对所述第二项目代码进行代码变更后得到的;
40、所述分析模块,还用于根据任一第二函数的来源,确定所述第二函数在所述第一项目代码中的依赖链路,通过所述依赖链路对所述第二函数进行代码变更分析。
41、可选地,所述分析模块具体用于:
42、对第一项目代码中的每个文件进行静态分析,得到每个文件中的各第一函数,以及每个第一函数的函数信息及导入信息;
43、根据所述第一函数的相关信息确定所述第一函数的来源,包括:
44、根据所述第一函数的函数信息及导入信息确定所述第一函数的来源。
45、可选地,所述分析模块具体用于:
46、根据所述第一函数的函数信息中的调用信息,确定所述第一函数的来源是否为本地函数或继承函数;和/或
47、根据所述第一函数的导入信息,确定所述第一函数的来源是否为导入函数。
48、可选地,所述函数的上下文信息包括如下至少一项上下文信息项:函数内容、函数调用前后代码片段、导入信息以及文件信息;所述函数内容包括函数名、参数和函数体代码;所述文件信息包括文件路径及项目代码的结构信息。
49、可选地,各上下文信息项的优先级按从高到低依次是函数内容、函数调用前后代码片段、导入信息以及文件信息;
50、所述分析模块具体用于:
51、按照各上下文信息项的优先级从高到低的顺序,依次在大模型的训练过程中增加上下文信息项,直至得到符合训练要求的大模型。
52、可选地,所述分析模块具体用于:
53、通过版本控制系统,确定所述第一项目代码和第二项目代码之间的变更代码;
54、对变更前后的代码进行分析,确定发生代码变更的各第三函数;
55、从各第三函数中确定存在修改变更的第一函数,将修改变更的第一函数作为第二函数。
56、可选地,所述分析模块具体用于:
57、在所述第一项目代码中确定调用所述第二函数的第四函数和被所述第二函数所调用的第五函数;
58、通过所述第四函数及所述第五函数,形成具有函数调用关系的所述第二函数的依赖链路。
59、可选地,所述分析模块具体用于:
60、确定所述第二函数中的代码变更是否对所述依赖链路中的其他函数造成影响;
61、若是,则生成测试用例并对所述测试用例进行模拟运行,确定代码变更影响。
62、第三方面,本技术实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一所述方法的步骤。
63、第四方面,本技术实施例提供了一种计算机可读存储介质,其存储有可由计算机设备执行的计算机程序,当所述程序在计算机设备上运行时,使得所述计算机设备执行上述任一所述方法的步骤。
64、第五方面,本技术提供一种了计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面的各实施例的方法。
65、本技术实施例中,首先对第一项目代码采用静态分析,得到第一函数的来源,但此时还存在未知来源的第一函数,利用大模型的语义分析能力,将未知来源的第一函数进行补全,得到近乎所有第一函数的来源。然后再根据大模型的代码分析能力,确定变更的函数的依赖链路,从而完成对第一项目代码中的所有代码变更进行分析。通过静态分析可以确定出大部分函数的来源,提升了函数来源确定的效率和准确性,通过大模型补全未知来源函数的来源,弥补了静态分析分析不全面的问题,避免了未知来源的第一函数发生变更后无法确定其依赖链路,从而进一步完善和补全复杂的代码依赖关系。
本文地址:https://www.jishuxx.com/zhuanli/20241106/322756.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。
下一篇
返回列表