CN118585451A - 一种基于GitLab的代码审核方法、系统、设备及介质 - Google Patents

一种基于GitLab的代码审核方法、系统、设备及介质 Download PDF

Info

Publication number
CN118585451A
CN118585451A CN202410791818.3A CN202410791818A CN118585451A CN 118585451 A CN118585451 A CN 118585451A CN 202410791818 A CN202410791818 A CN 202410791818A CN 118585451 A CN118585451 A CN 118585451A
Authority
CN
China
Prior art keywords
code
information
content
file
request
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
Application number
CN202410791818.3A
Other languages
English (en)
Inventor
杨杰
赖玮
周光
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangzhou Sanqi Jiyao Network Technology Co ltd
Original Assignee
Guangzhou Sanqi Jiyao Network Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Guangzhou Sanqi Jiyao Network Technology Co ltd filed Critical Guangzhou Sanqi Jiyao Network Technology Co ltd
Priority to CN202410791818.3A priority Critical patent/CN118585451A/zh
Publication of CN118585451A publication Critical patent/CN118585451A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明涉及人工智能技术领域,尤其涉及一种基于GitLab的代码审核方法、系统、设备及介质,所述方法具体包括:基于代码语义依赖关系图确定所有代码文件中的代码问题并形成代码分析报告,根据所述代码分析报告对存在缺陷的代码内容进行修改;获取已被修改的当前代码内容,基于所述代码语义依赖关系图,通过深度优先搜索算法为所述当前代码内容确定存在直接函数调用关系或间接函数调用关系的上下文代码内容;获取底层人工智能大模型接口每次响应的MR请求消耗的token数量,通过所述token数量计算底层人工智能大模型的资源消耗量,并在所述token数量达到预设消耗阈值时进行告警推送和调用切断。本发明通过人工智能技术提高了代码审核的准确性和效率。

Description

一种基于GitLab的代码审核方法、系统、设备及介质
技术领域
本发明涉及人工智能技术领域,尤其涉及一种基于GitLab的代码审核方法、系统、设备及介质。
背景技术
在软件研发流程中,代码审核是保证代码质量的关键环节,直接关系到业务系统的稳定性和安全性。当前,基于GitLab的代码管理已成为业内的主流实践。在代码发布前,开发人员会向GitLab提交合并请求(Merge Request,MR),由技术主管进行代码审核。然而,传统的代码审核流程存在以下问题:1、审核效率低下:当一次提交的代码量巨大时,审核人员难以全面检查,容易遗漏关键细节。2、安全漏洞审查不足:审核人员往往更关注业务逻辑的正确性,而对安全漏洞的审查则更多依赖于个人经验,容易造成安全隐患。3、对于小规模的代码改动,审核人员往往只关注git diff代码的差异,而忽略了代码上下文之间的关联,可能导致上线后出现意外的Bug。4、在使用人工智能大模型进行代码分析时,可能会消耗大量的计算资源,现有的代码审核工具往往缺乏对资源消耗的监控和管理,可能导致资源浪费或系统崩溃。5、传统的人工代码审核方式效率低下,容易遗漏问题,而现有的自动化工具又无法深入到代码语义层面进行分析,导致审核的准确性不高。
发明内容
本发明的目的在于提供一种基于GitLab的代码审核方法、系统、设备及介质,有效地结合了敏感信息管理和代码质量控制,通过人工智能技术提高了代码审核的准确性和效率,以解决上述现有技术问题的至少之一。
第一方面,本发明提供了一种基于GitLab的代码审核方法,所述方法具体包括:
获取用户提交的MR请求,基于所述MR请求的ID信息,通过GitLab API接口获得所述MR请求对应的所有代码文件及所有代码文件的元信息,根据所述元信息生成代码文件对象列表;
对所述代码文件对象列表中每个代码文件对象进行符号化处理和抽象语法树构建,获得代码语法结构信息,根据所述代码语法结构信息构建代码语义依赖关系图;
基于所述代码语义依赖关系图确定所有代码文件中的代码问题并形成代码分析报告,根据所述代码分析报告对存在缺陷的代码内容进行修改;
获取已被修改的当前代码内容,基于所述代码语义依赖关系图,通过深度优先搜索算法为所述当前代码内容确定存在直接函数调用关系或间接函数调用关系的上下文代码内容;
根据业务配置的敏感信息关键词列表,为所有代码文件中含有敏感信息的代码内容和注释信息进行脱敏处理;
获取底层人工智能大模型接口每次响应的MR请求消耗的token数量,通过所述token数量计算底层人工智能大模型的资源消耗量,并在所述token数量达到预设消耗阈值时进行告警推送和调用切断。
第二方面,本发明提供了一种基于GitLab的代码审核系统,所述系统具体包括:
第一审核模块,用于获取用户提交的MR请求,基于所述MR请求的ID信息,通过GitLab API接口获得所述MR请求对应的所有代码文件及所有代码文件的元信息,根据所述元信息生成代码文件对象列表;
第二审核模块,用于对所述代码文件对象列表中每个代码文件对象进行符号化处理和抽象语法树构建,获得代码语法结构信息,根据所述代码语法结构信息构建代码语义依赖关系图;
第三审核模块,用于基于所述代码语义依赖关系图确定所有代码文件中的代码问题并形成代码分析报告,根据所述代码分析报告对存在缺陷的代码内容进行修改;
第四审核模块,用于获取已被修改的当前代码内容,基于所述代码语义依赖关系图,通过深度优先搜索算法为所述当前代码内容确定存在直接函数调用关系或间接函数调用关系的上下文代码内容;
第五审核模块,用于根据业务配置的敏感信息关键词列表,为所有代码文件中含有敏感信息的代码内容和注释信息进行脱敏处理;
第六审核模块,用于获取底层人工智能大模型接口每次响应的MR请求消耗的token数量,通过所述token数量计算底层人工智能大模型的资源消耗量,并在所述token数量达到预设消耗阈值时进行告警推送和调用切断。
第三方面,本发明提供了一种计算机设备,包括:存储器和处理器及存储在存储器上的计算机程序,当所述计算机程序在处理器上被执行时,实现如上述方法中任一项所述的基于GitLab的代码审核方法。
第四方面,本发明提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时,实现如上述方法中任一项所述的基于GitLab的代码审核方法。
与现有技术相比,本发明具有以下效果的至少之一:
1、有效地结合了敏感信息管理和代码质量控制,通过人工智能技术提高了代码审核的准确性和效率,同时确保敏感信息的安全处理,支持开发者在软件开发过程中保持高标准的代码质量和安全性。
2、通过自动化地获取MR请求对应的代码文件及其元信息,构建代码语义依赖关系图,并基于该图进行代码问题的分析和修复,可以大大提高代码审核的效率和准确性。同时,通过深度优先搜索算法确定与修改代码存在直接或间接函数调用关系的上下文代码内容,可以帮助审核人员更好地理解代码的逻辑关系,避免遗漏问题。
3、根据业务配置的敏感信息关键词列表,采用正则表达式匹配算法对代码内容和注释信息进行扫描,发现敏感信息后进行脱敏处理,可以有效防止敏感信息的泄露,提高代码的安全性。
4、通过获取底层人工智能大模型接口每次响应MR请求消耗的token数量,计算资源消耗量,并在达到预设消耗阈值时进行告警推送和调用切断,可以有效避免资源浪费和系统崩溃的风险,提高系统的稳定性和可靠性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例提供的一种基于GitLab的代码审核方法的流程示意图;
图2是本发明一实施例提供的一种基于GitLab的代码审核系统的结构示意图;
图3是本发明一实施例提供的一种计算机设备的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
应当理解,当在本申请说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本申请说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
另外,在本申请说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
在本申请说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
在本申请实施例中,流程的执行主体包括终端设备。该终端设备包括但不限于:服务器、计算机、智能手机以及平板电脑等能够执行本申请公开的方法的设备。图1示出了本发明一实施例公开的一种基于GitLab的代码审核方法的流程示意图,详述如下:
S101,获取用户提交的MR请求,基于所述MR请求的ID信息,通过GitLab API接口获得所述MR请求对应的所有代码文件及所有代码文件的元信息,根据所述元信息生成代码文件对象列表。
在本实施例中,获取用户提交的MR(Merge Request)请求后,通过GitLab API接口获取该MR请求对应的ID信息。根据获取到的ID信息,再次通过GitLab API接口获得该MR请求对应的所有代码文件及所有代码文件的元信息。获取到所有代码文件的元信息后,采用元信息解析算法对元信息进行解析,得到每个代码文件的文件名、文件路径、文件大小、文件类型、最后修改时间等元信息。根据解析得到的元信息,创建代码文件对象,代码文件对象包含文件名、文件路径、文件大小、文件类型、最后修改时间等属性。将创建好的代码文件对象添加到代码文件对象列表中。判断是否还有未处理的代码文件元信息,若还有未处理的代码文件元信息,则继续解析下一个代码文件元信息,创建代码文件对象并添加到代码文件对象列表,直到所有代码文件元信息都处理完毕。最终得到包含所有代码文件对象的代码文件对象列表。
例如,在某大型软件项目中,开发团队使用GitLab作为版本控制系统来管理代码。为了提高代码质量和审核效率,团队决定采用一种基于GitLab API的代码审核方法。当开发人员完成某个功能或修复某个缺陷后,他们会在GitLab上创建一个合并请求(MergeRequest,MR),并为其分配一个唯一的ID,该ID是全局唯一的,用于标识和跟踪该MR在整个审核过程中的状态。一旦MR被创建,审核系统会自动捕获到这个事件,并获取该MR的ID信息。随后,系统会通过GitLabAPI接口获取该MR请求对应的ID信息,例如MR请求ID为123。然后,系统根据获取到的MR请求ID 123,再次通过GitLabAPI接口获得该MR请求对应的所有代码文件及所有代码文件的元信息。假设获取到的代码文件数量为10个,每个代码文件的元信息包括文件名、文件路径、文件大小、文件类型、最后修改时间等。获取到所有代码文件的元信息后,系统采用元信息解析算法对元信息进行解析,该算法通过正则表达式匹配的方式,从元信息中提取出文件名、文件路径、文件大小、文件类型、最后修改时间等信息。根据解析得到的元信息,系统创建代码文件对象,并将文件名、文件路径、文件大小、文件类型、最后修改时间等属性赋值给代码文件对象的对应属性。创建好的代码文件对象被添加到代码文件对象列表中。系统判断是否还有未处理的代码文件元信息,如果还有,则继续解析下一个代码文件元信息,重复上述过程,直到10个代码文件元信息都处理完毕。最终,系统得到一个包含10个代码文件对象的代码文件对象列表,每个代码文件对象包含了对应代码文件的文件名、文件路径、文件大小、文件类型、最后修改时间等属性信息。这个代码文件对象列表可以用于后续的代码分析、代码审查等操作,以提高代码质量和开发效率。
在本实施例中,通过自动捕获MR创建事件,并基于GitLab API接口获取MR对应的代码文件及元信息,审核系统实现了自动化的代码收集过程,不仅提高了审核效率,还减少了人工操作可能带来的错误和遗漏。
S102,对所述代码文件对象列表中每个代码文件对象进行符号化处理和抽象语法树构建,获得代码语法结构信息,根据所述代码语法结构信息构建代码语义依赖关系图。
在本实施例中,首先确定代码文件使用的编程语言,如Java、Python、C++等,不同的编程语言有不同的词法规则和符号系统。使用针对所选编程语言的词法分析器(也称为扫描器或词法器)对代码文件对象列表中的每个代码文件进行词法分析,这个过程会将代码转换为一系列标记(tokens)或符号,每个标记对应代码中的一个基本元素,如关键字、标识符、字面量、运算符等。将词法分析的结果组织成一个符号流序列(token stream),这个序列包含了代码文件中所有的基本元素及其顺序信息。
使用语法分析器(也称为解析器)对符号流序列进行解析,根据编程语言的语法规则将符号组合成语法结构(如表达式、语句、声明等),并构建抽象语法树(AST)。AST是一个树形结构,其中每个节点都对应代码中的一个语法结构,并包含该结构的类型和属性信息。在构建AST的过程中,可以进行一些优化操作,如消除冗余节点、合并相似结构等,以提高后续分析的效率和准确性。
接着,对AST进行语义分析,确定代码元素之间的依赖关系。这包括确定哪些变量或函数被其他变量或函数调用,以及它们之间的数据流和控制流关系。基于语义分析的结果,构建一个代码语义依赖关系图。这个图是一个有向图,其中节点代表代码元素(如变量、函数等),边代表元素之间的依赖关系(如函数调用、数据传递等)。对构建好的代码语义依赖关系图进行优化,如消除冗余边、合并相似节点等,以提高图的清晰度和可读性。
在本实施例中,通过符号化处理和AST构建,可以深入理解代码的内部结构和语法规则,为后续的代码分析和审核提供基础。基于代码语义依赖关系图,可以发现代码中的潜在问题,如未使用的变量、死代码、循环依赖等,这些问题可能会影响代码的性能、可维护性或安全性。
在一些实施例中,上述步骤S102中,所述对所述代码文件对象列表中每个代码文件对象进行符号化处理和抽象语法树构建,获得代码语法结构信息,根据所述代码语法结构信息构建代码语义依赖关系图,具体包括:
根据词法分析器对所述代码文件对象列表中每个代码文件对象进行符号化处理,获得符号流序列,所述符号流序列包括多个词法单元信息,所述词法单元信息包括标识符、关键字、字面量和运算符;
基于所述符号流序列,采用语法分析其构建抽象语法树,所述抽象语法树的节点包括语法单元信息,所述语法单元信息包括语句、表达式和声明;
根据所述抽象语法树获得代码语法结构信息,通过对所述代码语法结构信息进行语义分析,获得代码元素之间的依赖关系;
根据所述依赖关系构建代码语义依赖关系图。
在该实施例中,根据词法分析器,对所述代码文件对象列表中的每个代码文件对象进行符号化处理,获取每个代码文件对象对应的符号流序列,其中每个符号流序列包含了该代码文件中的词法单元信息,如标识符、关键字、字面量和运算符等。通过遍历每个代码文件对象的符号流序列,获得每个符号流序列中的词法单元信息,并根据词法单元的类型,将其划分为标识符、关键字、字面量和运算符等不同的类别,得到按类别归类的词法单元信息。采用统计方法,对每个类别的词法单元信息进行计数,获取各个类别词法单元的出现频次,并根据频次的高低,确定各个类别词法单元的重要程度,频次越高,代表该类别的词法单元在代码文件中出现越频繁,重要程度越高。根据确定的词法单元重要程度,对每个代码文件对象的符号流序列进行过滤和筛选,保留重要程度高的词法单元,滤除重要程度低的词法单元,获得简化后的符号流序列,减少了冗余信息。
根据符号流序列,采用语法分析方法对其进行分析,得到抽象语法树;通过遍历抽象语法树的节点,获取语法单元信息,语法单元信息包括语句、表达式和声明;根据获取的语句语法单元信息,判断语句的类型,语句类型包括条件语句、循环语句和一般语句;采用条件判断方法,对条件语句进行分析,得到条件表达式和语句块;采用循环判断方法,对循环语句进行分析,得到循环条件和循环体语句块;根据语句类型分析结果,采用递归方法,对语句块进行进一步语法分析,得到语句块的抽象语法树;通过遍历抽象语法树的表达式节点,获取表达式的语法单元信息;根据表达式的语法单元信息,采用递归下降分析方法,对表达式进行求值,得到表达式的值;通过遍历抽象语法树的声明节点,获取声明的语法单元信息,语法单元信息包括变量声明、函数声明和类声明;根据变量声明的语法单元信息,采用符号表方法,将变量名和类型添加到符号表中;根据函数声明的语法单元信息,采用符号表方法,将函数名、参数列表和返回值类型添加到符号表中;根据类声明的语法单元信息,采用符号表方法,将类名和类成员添加到符号表中;通过以上步骤,获得完整的抽象语法树和符号表信息。
根据抽象语法树中的节点信息,采用深度优先遍历算法,获取代码中类、函数、变量等元素的定义和调用关系,通过分析节点的父子关系,得到代码元素之间的语法依赖关系。根据上一步获得的语法依赖关系,采用符号表和类型检查算法,通过分析变量的作用域、类型匹配等,获得代码元素之间的语义信息,确定代码元素之间的语义依赖关系,构建语义依赖关系表。根据语义依赖关系表,采用图论算法,将代码元素作为节点,将语义依赖关系作为有向边,通过连接具有依赖关系的节点,获得代码语义依赖关系图的初始版本。根据代码语义依赖关系图的初始版本,采用图优化算法,通过合并重复的边、去除冗余的节点等操作,获得简化后的代码语义依赖关系图,确定代码元素之间的最终依赖关系。
S103,基于所述代码语义依赖关系图确定所有代码文件中的代码问题并形成代码分析报告,根据所述代码分析报告对存在缺陷的代码内容进行修改。
在本实施例中,基于构建好的代码语义依赖关系图,利用静态代码分析工具对代码进行扫描,查找潜在的代码问题,包括但不限于:未使用的变量、潜在的空指针引用、内存泄漏、逻辑错误、循环依赖等。通过分析代码语义依赖关系图,可以找出代码模块之间的依赖关系,并确定哪些模块或函数存在过多的依赖,这可能导致代码难以维护和理解。根据代码语义依赖关系图的复杂程度,可以评估代码的复杂度,例如,如果图中存在过多的节点和边,或者存在复杂的控制流和数据流结构,那么代码可能较难理解和维护。
然后,将检测到的代码问题按照类型进行分类,如语法错误、逻辑错误、性能问题等。为每个问题提供详细的描述,包括问题的位置(如文件名、行号)、问题的性质、可能的影响以及修复建议。根据问题的严重性和紧急性,对问题进行优先级排序,以便开发人员能够优先解决重要的问题。将代码语义依赖关系图以及问题在图中的位置进行可视化展示,帮助开发人员更直观地理解问题所在。
在修复问题后,通过运行测试用例、集成测试或性能测试等手段验证修改的有效性,确保修改没有引入新的问题或破坏原有的功能。
在本实施例中,通过自动化检测代码问题并生成详细的报告,可以帮助开发人员及时发现和修复潜在的缺陷,从而提高代码的质量和稳定性。
在一些实施例中,上述步骤S103中,所述基于所述代码语义依赖关系图确定所有代码文件中的代码问题并形成代码分析报告,根据所述代码分析报告对存在缺陷的代码内容进行修改,具体包括:
根据所述代码语义依赖关系图,采用基于图的深度优先搜索算法对所有代码文件进行遍历,同时通过代码静态分析技术确定代码内容中的代码缺陷信息,形成代码分析报告;
基于所述代码分析报告,采用抽象语法树分析技术对存在缺陷的代码内容进行定位,并通过语义分析技术判断代码缺陷的类型和严重程度;
根据预设的代码修复规则库,通过代码缺陷的类型和严重程度获取相应的代码修复方案,获得修复后的代码文件;
根据修复后的代码文件,通过控制流图分析技术对代码执行流程进行分析,采用数据流分析技术对代码内容中的数据流向和生命周期进行跟踪,并结合代码覆盖率分析技术,判断修复后的代码文件的代码逻辑是否还存在问题;
若修复后的代码文件的代码逻辑还存在问题,重新从代码修复规则库中获取新的代码修复方案进行修复,直到修复后的代码文件的代码逻辑不再存在问题。
在该实施例中,根据代码仓库获取所有代码文件,通过代码静态分析技术对代码内容进行分析,得到代码语义依赖关系图。采用基于图的深度优先搜索算法,以代码语义依赖关系图为输入,对所有代码文件进行遍历,获得代码文件之间的调用关系和依赖关系。在深度优先搜索遍历代码文件的过程中,通过代码静态分析技术,对每个代码文件的内容进行分析,判断是否存在代码缺陷,并记录代码缺陷信息。将深度优先搜索遍历得到的代码文件调用关系、依赖关系以及代码缺陷信息进行整合,形成完整的代码分析数据。根据代码分析数据,采用数据可视化技术,生成代码分析报告,报告中包含代码文件之间的调用关系图、依赖关系图以及代码缺陷分布图,便于开发人员和管理人员了解代码质量状况。
根据代码分析报告,采用抽象语法树分析技术,对代码进行解析,生成抽象语法树表示,获取代码的结构化信息,得到代码的语法结构、变量、函数等元素。通过遍历抽象语法树,结合代码分析报告中的缺陷信息,定位存在缺陷的代码片段,确定缺陷代码在抽象语法树中的位置和范围。采用语义分析技术,对定位到的缺陷代码片段进行深入分析,获取代码的语义信息,包括变量的类型、函数的参数和返回值等,判断代码缺陷的类型,如空指针引用、内存泄漏、数组越界等。根据代码缺陷的类型,结合代码分析报告中的严重程度评估标准,采用严重程度评估算法,综合考虑缺陷代码的复杂度、影响范围、可能导致的后果等因素,计算缺陷的严重程度得分,获得代码缺陷的严重程度等级,如严重、高危、中危、低危等。将定位到的缺陷代码片段、缺陷类型和严重程度等信息进行整合,生成代码缺陷报告,提供缺陷的详细描述、所在位置、修复建议等,为后续的代码修复和优化提供依据,提高代码质量和系统的稳定性。
根据代码文件获取代码缺陷的类型和严重程度信息,通过分析代码文件中的语法错误、逻辑错误、安全漏洞等问题,判断出代码缺陷所属的类型,如语法错误、逻辑错误、安全漏洞等,以及缺陷的严重程度,如低、中、高等级别。采用预设的代码修复规则库,根据代码缺陷的类型和严重程度,在修复规则库中查找对应的修复方案。修复规则库中包含了各种常见代码缺陷的修复模板和修复步骤。通过代码缺陷类型和严重程度的匹配,获取相应的代码修复方案。获取修复方案后,将其应用到有缺陷的代码文件中。通过修复方案中的步骤和指引,对代码文件进行修改和优化,消除代码缺陷。在修复过程中,根据代码的上下文和业务逻辑,对修复方案进行必要的调整和适配。修复完成后,对修复后的代码文件进行检查和验证。采用代码静态分析工具和单元测试等手段,验证修复后的代码是否符合语法规范,是否修复了原有的缺陷,以及是否引入了新的问题。通过多轮迭代和修复,直到代码质量达到要求为止。最终,得到修复后的代码文件。修复后的代码文件不仅消除了原有的缺陷,而且符合编码规范和最佳实践。同时,根据业务需求,对修复后的代码进行必要的优化和重构,提高代码的可读性、可维护性和性能。确保修复后的代码能够正常运行,并满足业务功能和非功能需求。
根据修复后的代码文件,采用控制流图分析技术,通过构建代码的控制流图,获取代码的执行流程,确定代码的基本块、分支结构和循环结构,判断代码逻辑是否存在死代码、不可达代码等问题。采用数据流分析技术,通过跟踪代码中变量的定义和使用情况,获取变量的生命周期和数据依赖关系,确定代码中是否存在未初始化变量、变量重复定义、变量未使用等问题,判断代码的数据流是否正确。采用代码覆盖率分析技术,通过设计测试用例,获取代码的语句覆盖率、分支覆盖率和条件覆盖率等指标,确定代码的测试充分性,判断是否还存在未覆盖到的代码逻辑,找出代码中的薄弱环节。根据控制流图分析、数据流分析和代码覆盖率分析的结果,采用综合分析方法,通过对代码逻辑、数据流向和测试覆盖情况进行全面评估,获取代码的整体质量和可靠性,确定代码是否还存在逻辑缺陷、数据异常和测试不足等问题,判断代码修复的有效性。根据综合分析的结果,采用优化改进措施,通过对代码的逻辑结构、数据处理和测试案例进行调整和完善,获取更加高效、健壮的代码实现,确定修复后的代码文件已经达到了预期的质量要求,为软件系统的正确运行提供了可靠的保障。
S104,获取已被修改的当前代码内容,基于所述代码语义依赖关系图,通过深度优先搜索算法为所述当前代码内容确定存在直接函数调用关系或间接函数调用关系的上下文代码内容。
在本实施例中,通过GitLab的Webhooks监听代码仓库中的代码变更事件,当代码变更事件发生时,提取出被修改的代码文件及其修改的具体内容。具体的,在代码语义依赖关系图中,找到与当前被修改代码对应的节点作为起始搜索点。这可能是一个函数定义、类定义或其他可识别的代码元素。从起始节点开始,使用深度优先搜索算法遍历代码语义依赖关系图。在遍历过程中,记录所有与起始节点存在直接或间接函数调用关系的节点。如果节点A有一条指向节点B的边,并且这条边表示A调用了B(即A是调用者,B是被调用者),则称A和B之间存在直接函数调用关系。如果节点A通过一系列边可以到达节点C,且这些边构成的路径表示A间接调用了C(即A通过其他函数或方法间接调用了C),则称A和C之间存在间接函数调用关系。将所有与起始节点存在直接或间接函数调用关系的节点对应的代码内容收集起来,形成一个上下文代码集。
将上下文代码集以适当的方式展示给开发人员,如直接在代码编辑器中突出显示相关代码,或在代码审查工具中提供链接供开发人员查看。开发人员可以利用这个上下文代码集来更好地理解当前被修改代码在整个系统中的作用和影响,从而进行更准确的代码审查。
在本实施例中,通过自动确定与当前被修改代码存在直接或间接函数调用关系的上下文代码内容,开发人员可以更全面地了解修改的影响范围,从而进行更准确的代码审查。这有助于减少因遗漏相关代码而导致的潜在问题。通过构建代码语义依赖关系图并使用深度优先搜索算法来确定上下文代码内容,开发人员可以更好地理解系统的整体结构和各个部分之间的交互关系,从而更高效地进行代码的维护和管理。
在一些实施例中,上述步骤S104中,所述基于所述代码语义依赖关系图,通过深度优先搜索算法为所述当前代码内容确定存在直接函数调用关系或间接函数调用关系的上下文代码内容,具体包括:
采用深度优先搜索算法遍历所述代码语义依赖关系图中的所有节点;
判断当前遍历到的节点与已被修改的当前代码内容对应的节点之间是否存在直接函数调用关系或间接函数调用关系;
若当前遍历到的节点与已被修改的当前代码内容对应的节点之间存在直接函数调用关系或间接函数调用关系,则确定当前遍历到的节点对应的代码内容为与已被修改的当前代码内容存在直接函数调用关系或间接函数调用关系的上下文代码内容。
在该实施例中,在代码语义依赖关系图中,采用深度优先搜索算法进行遍历,从已被修改的当前代码内容对应的节点开始,递归访问其所有未被访问过的相邻节点。在遍历过程中,判断当前遍历到的节点与已被修改的节点之间是否存在直接函数调用关系,即当前节点是否直接调用了已修改节点所对应的函数;或者是否存在间接函数调用关系,即当前节点通过其他函数间接调用了已修改节点所对应的函数。这种判断可以通过分析节点之间的边的属性来实现,如果两个节点之间的边标记为“函数调用”,且方向为从当前节点指向已修改节点,则说明存在直接函数调用关系;如果当前节点与已修改节点之间存在一条或多条“函数调用”边构成的路径,则说明存在间接函数调用关系。对于那些与已修改节点存在直接或间接函数调用关系的节点,将它们对应的代码内容确定为与已修改代码内容存在调用关系的上下文代码内容,可以据此进行影响分析和代码维护。例如,在一个图形渲染引擎的代码库中,如果修改了材质着色器的代码,通过本方法可以快速定位到调用该着色器的渲染管线代码、场景图节点代码等,开发人员可以重点关注这些代码,以确保修改不会引入新的缺陷。
S105,根据业务配置的敏感信息关键词列表,为所有代码文件中含有敏感信息的代码内容和注释信息进行脱敏处理。
在本实施例中,根据业务配置的敏感信息关键词列表,采用字符串匹配算法,对所有代码文件中的代码内容和注释信息进行扫描。若代码内容或注释信息中包含敏感信息关键词,则将该关键词及其上下文内容提取出来。通过正则表达式匹配算法,判断提取出的上下文内容是否符合敏感信息的模式。如果符合敏感信息模式,则采用数据脱敏算法,对敏感信息进行脱敏处理。数据脱敏算法包括:字符替换、字符串加密、字符串截断等方法。字符替换是将敏感信息中的关键字符替换为特定字符,如将手机号码中的中间四位替换为星号;字符串加密是对敏感信息进行加密,使其不可直接读取;字符串截断是截取敏感信息的部分内容,如截取身份证号码的前六位和后四位。脱敏处理后,将脱敏后的内容替换原始代码文件中的敏感信息,得到脱敏后的代码文件。最后,通过代码静态分析技术,对脱敏后的代码文件进行检查,确保脱敏后的代码不影响原有代码的功能和性能。
在一些实施例中,上述步骤S105中,所述根据业务配置的敏感信息关键词列表,为所有代码文件中含有敏感信息的代码内容和注释信息进行脱敏处理,具体包括:
获取业务配置的敏感信息关键词列表;
基于所述敏感信息关键词列表,采用正则表达式匹配算法对所有代码文件的代码内容和注释信息进行扫描,判断是否所述代码内容和所述注释信息是否包含有敏感信息;
若判断为是,则采用数据脱敏算法对包含有敏感信息的代码内容或注释信息进行脱敏处理;
将脱敏处理后的代码内容和注释信息替换原来的代码内容和注释信息,得到脱敏代码文件;
采用代码静态分析技术对所述脱敏代码文件进行检查,确定所述脱敏代码文件的原有代码功能是否受到影响。
在该实施例中,根据代码内容和注释信息,获取其中可能包含的敏感信息,如个人姓名、身份证号、手机号码、银行卡号等,得到敏感信息的类型和具体内容。通过敏感信息的类型,采用相应的数据脱敏算法。对于姓名,可采用保留姓氏的方式进行部分隐藏;对于身份证号,可采用保留前六位和后四位、中间位用星号替换的方式进行部分隐藏;对于手机号码,可采用保留前三位和后四位、中间位用星号替换的方式进行部分隐藏;对于银行卡号,可采用保留前六位和后四位、中间位用星号替换的方式进行部分隐藏,确定具体的数据脱敏方案。获取代码内容和注释信息中的敏感内容,采用确定的数据脱敏方案,对敏感内容进行替换,得到脱敏后的内容。通过脱敏后的内容,替换代码和注释信息中的原有敏感内容,获得完成数据脱敏处理后的代码内容和注释信息。根据脱敏后的代码内容和注释信息,更新源代码文件,确保源代码中的敏感信息被妥善处理,不会泄露。通过更新后的源代码文件,重新进行代码扫描,判断代码中是否还包含敏感信息。如果不包含敏感信息,则数据脱敏处理完成;如果还包含敏感信息,则返回继续进行数据脱敏处理,直到代码中不包含任何敏感信息为止。
通过代码静态分析工具对脱敏代码文件进行语法和结构分析,获取脱敏代码文件的抽象语法树和控制流图等代码结构信息,为后续分析奠定基础。根据获取的代码结构信息,采用数据流分析技术,追踪脱敏代码文件中的数据流向,确定脱敏操作对原有数据的影响范围。通过控制流分析技术,获取脱敏代码文件的执行路径信息,判断脱敏操作是否改变了原有代码的执行逻辑和流程。采用符号执行技术,模拟脱敏代码文件的执行过程,获取不同执行路径下的输入输出数据,确定脱敏操作对原有功能的影响。根据数据流分析、控制流分析和符号执行的结果,综合判断脱敏操作对原有代码功能的影响程度,得到脱敏代码文件的功能完整性评估结果。通过对比脱敏前后的代码执行结果,获取脱敏操作导致的输出差异,确定脱敏操作是否影响了关键功能的正确性。根据功能完整性评估结果和关键功能正确性检查结果,综合判断脱敏代码文件的原有代码功能是否受到影响,得到最终的功能影响分析报告。
S106,获取底层人工智能大模型接口每次响应的MR请求消耗的token数量,通过所述token数量计算底层人工智能大模型的资源消耗量,并在所述token数量达到预设消耗阈值时进行告警推送和调用切断。
在本实施例中,获取底层人工智能大模型接口每次响应MR请求时消耗的token数量,采用自然语言处理中的分词算法对响应内容进行分词处理,得到响应内容的token列表和数量。根据获取到的token数量,采用加权移动平均算法计算底层人工智能大模型的实时资源消耗量,将token数量作为输入参数,通过加权系数和历史消耗量进行加权计算,得到当前时刻的资源消耗量估计值。判断计算得到的资源消耗量估计值是否达到预设的消耗阈值,若达到阈值则触发告警推送和调用切断流程,根据预先配置的告警规则生成告警信息,通过消息队列发送给相关责任人,同时调用底层人工智能大模型的接口控制模块,切断当前的MR请求调用。如果资源消耗量估计值未达到预设阈值,则继续获取下一次MR请求的token数量,重复以上步骤,实时监控底层人工智能大模型的资源消耗情况,根据资源消耗量的变化趋势动态调整预设阈值,通过增量学习算法优化阈值设置,提高告警的准确性和实时性。当检测到底层人工智能大模型的资源消耗出现异常波动时,采用孤立森林算法进行异常检测,通过构建孤立树和计算异常得分,判断是否存在异常消耗行为,根据异常检测结果生成分析报告,通过数据可视化技术生成直观的监控大屏,便于管理人员及时掌握底层系统的运行状态。
在一些实施例中,上述步骤S106中,所述通过所述token数量计算底层人工智能大模型的资源消耗量,并在所述token数量达到预设消耗阈值时进行告警推送和调用切断,具体包括:
将token数量作为输入参数,过加权系数和历史消耗量进行加权计算,得到底层人工智能大模型的当前时刻的资源消耗量估计值;
判断所述资源消耗量估计值是否达到预设消耗阈值,若达到则触发告警推送流程和调用切断流程,所述告警推送流程为根据预先配置的告警规则生成告警信息,通过消息队列发送给相关责任人,所述调用切断流程为通过用底层人工智能大模型的接口控制模块,切断当前的MR请求的调用;
实时监控底层人工智能大模型的资源消耗量,根据所述资源消耗量的变化趋势动态调整预设消耗阈值,同时通过增量学习算法优化预设消耗阈值的设置。
在该实施例中,获取当前MR请求的资源消耗量估计值,根据预先配置的资源消耗阈值进行比较。判断资源消耗量估计值是否达到或超过预设消耗阈值,若达到或超过则触发告警推送流程和调用切断流程。根据预先配置的告警规则,结合当前MR请求的资源消耗情况,生成相应的告警信息。通过消息队列系统,将生成的告警信息发送给相关责任人,以便及时处理和响应。采用底层人工智能大模型的接口控制模块,根据告警信息和预设规则,切断当前MR请求的调用,避免过度消耗资源。获取切断操作的执行结果,确定当前MR请求是否已成功终止,释放相应的计算资源。通过日志系统,记录告警推送和切断流程的执行情况,以便后续分析和优化。根据告警信息和切断结果,更新MR请求的状态,并通知相关用户请求已被终止。获取资源消耗阈值的动态调整策略,根据MR请求的历史数据和系统负载情况,适时调整阈值设置。通过监控系统,持续跟踪MR请求的资源消耗情况,并将数据反馈给阈值调整模块,形成闭环控制。
根据人工智能大模型的运行状态,采用资源监控工具实时获取大模型的CPU占用率、内存占用量、GPU利用率等资源消耗指标,得到当前时刻的资源消耗量数据。通过对连续一段时间内的资源消耗量数据进行统计分析,获取资源消耗量的变化趋势,包括均值、方差、斜率等统计特征,判断资源消耗量是否存在明显的增长或下降趋势。根据资源消耗量的历史数据和当前变化趋势,采用自适应阈值算法动态调整预设消耗阈值,当资源消耗量超过动态阈值时触发告警,提示需要优化大模型以降低资源消耗。通过增量学习算法持续优化预设消耗阈值的设置,根据大模型的实际资源消耗情况和业务需求,获取最优的阈值参数,在满足业务性能的同时最小化资源消耗,具体的,通过对用户属性和消耗行为的分析,获取不同类型用户的消耗特征,采用聚类算法对用户进行分类,得到各个类别用户的消耗阈值范围。根据用户的实时消耗数据,采用在线学习算法对消耗阈值进行动态调整,获取实时更新的用户消耗阈值。通过对不同时间段内用户消耗行为的分析,获取用户消耗阈值的时间分布特征,采用时间序列预测算法对未来一段时间内的用户消耗阈值进行预测,得到动态变化的用户消耗阈值曲线。根据用户消耗阈值与实际消耗量的差异情况,采用强化学习算法对消耗阈值的设置策略进行优化,获取最优的消耗阈值设置策略,确定最终的动态用户消耗阈值。通过将优化后的用户消耗阈值应用于业务场景中,获取用户的实时消耗反馈数据,采用反馈控制算法对消耗阈值进行自适应调整,得到持续优化的用户消耗阈值,实现基于用户消耗行为的个性化阈值设置,提升用户体验和业务效益。
例如,当系统接收到一个包含1000个token的MR请求时,系统会将该token数量乘以预设的加权系数8,再加上历史消耗量的加权系数2乘以上一时刻的资源消耗量,通过加权平均算法得到当前时刻的资源消耗量估计值为850。系统判断该估计值已经达到预设的消耗阈值800,因此触发了告警推送流程和调用切断流程。告警推送流程根据预先配置的告警规则“当资源消耗量估计值超过阈值的90%时,发送告警信息给相关责任人“,生成了告警信息,并通过Kafka消息队列发送给了系统管理员和开发人员。调用切断流程通过底层人工智能大模型的RESTAPI接口,调用了模型的控制模块,切断了当前的MR请求。与此同时,系统实时监控底层人工智能大模型的资源消耗量,通过最小二乘法拟合出资源消耗量的变化曲线,得到了变化趋势为每分钟增加50,据此将预设消耗阈值从800动态调整到了900。
在一些实施例中,所述方法还包括:
根据用户配置的底层人工智能大模型的接口信息,采用工厂模式和策略模式,动态选择和创建对应的模型应用程序接口适配器,根据所述模型应用程序接口适配器的接口规范生成对应的请求参数对象,所述请求参数对象包括模型标识、代码主体内容、上下文代码内容和角色提示描述内容。
在该实施例中,通过工厂模式根据模型标识动态创建模型应用程序接口适配器实例,得到模型应用程序接口适配器对象。根据所述模型应用程序接口适配器的接口规范生成对应的请求参数对象,所述请求参数对象包括模型标识、代码主体内容、上下文代码内容和角色提示描述内容。其中,代码主体内容是用户输入的核心代码片段,上下文代码内容是与代码主体内容相关的上下文代码,角色提示描述内容是对人工智能模型扮演角色的描述。根据模型应用程序接口适配器对象获取模型应用程序接口规范,确定请求参数的格式和内容要求。采用请求参数构建器,根据模型应用程序接口规范,将模型标识、代码主体内容、上下文代码内容和角色提示描述内容填充到请求参数对象中,得到构建完成的请求参数对象。通过模型应用程序接口适配器对象,将构建完成的请求参数对象传递给底层人工智能大模型,并发送请求。底层人工智能大模型接收到请求参数对象后,根据模型标识加载对应的预训练模型,并将代码主体内容、上下文代码内容和角色提示描述内容输入到预训练模型中。预训练模型根据输入的内容,通过自注意力机制和前馈神经网络等技术,生成与代码主体内容和角色提示描述内容相关的输出结果。自注意力机制能够捕捉输入内容中的长距离依赖关系,前馈神经网络能够对特征进行非线性变换和信息提取。将预训练模型生成的输出结果通过模型应用程序接口适配器返回给用户。用户获取到输出结果后,可以根据实际需求对生成的内容进行进一步的处理和应用,例如集成到代码编辑器中提供智能编程辅助,或用于自动化生成代码文档等。如果用户对生成的输出结果不满意,可以调整代码主体内容、上下文代码内容或角色提示描述内容,重新发起请求,生成更符合需求的结果。通过不断的交互和反馈,使人工智能模型生成的内容更加准确和有效。
具体的,通过工厂模式根据模型标识动态创建模型应用程序接口适配器实例,得到模型应用程序接口适配器对象,可以包括:根据模型标识从模型配置文件中获取对应的模型适配器类名称。采用反射机制通过类名称得到模型适配器类的类对象。获取模型适配器类的构造函数,并传入必要的参数实例化模型适配器对象。通过模型适配器对象调用统一的模型接口方法,实现与具体模型的交互。根据模型接口方法的返回值判断模型调用是否成功。获取模型返回的结果数据,对结果数据进行必要的转换和处理。将处理后的模型结果返回给上层应用程序,完成模型的动态调用。
例如,用户在配置文件中设置了底层人工智能大模型的接口信息,包括OpenAI的GPT-5、Google的PaLM和Microsoft的Prometheus等。系统读取配置文件,使用工厂模式根据不同的模型标识如“openai“、“google“、“microsoft“等,动态创建对应的模型应用程序接口适配器实例。当模型标识为“openai“时,工厂类将创建OpenAIAdapter类的实例;当模型标识为“google“时,工厂类将创建GoogleAdapter类的实例。通过这种方式,系统可以根据配置灵活选择和切换不同的人工智能模型。接下来,系统根据所选择的模型应用程序接口适配器的接口规范,使用请求参数构建器生成对应的请求参数对象。对于OpenAI的GPT-5模型,请求参数对象需要包含模型标识“text-davinci-002"、代码主体内容、上下文代码内容和角色提示描述内容等字段;对于Google的PaLM模型,请求参数对象需要包含模型标识“palm-001"、代码主体内容、上下文代码内容和角色提示描述内容等字段。请求参数构建器会根据适配器提供的接口规范,将这些字段填充到请求参数对象中,确保请求参数的格式和内容符合所选模型的要求。构建完成的请求参数对象通过模型应用程序接口适配器发送给底层的人工智能大模型。例如,OpenAIAdapter类通过调用OpenAI的API接口,将请求参数对象传递给GPT-5模型;GoogleAdapter类通过调用Google的API接口,将请求参数对象传递给PaLM模型。人工智能大模型接收到请求后,会根据模型标识加载对应的预训练模型,并将代码主体内容、上下文代码内容和角色提示描述内容等输入到预训练模型中进行处理。
参照图2,本发明一实施例提供了一种基于GitLab的代码审核系统2,所述系统2具体包括:
第一审核模块201,用于获取用户提交的MR请求,基于所述MR请求的ID信息,通过GitLab API接口获得所述MR请求对应的所有代码文件及所有代码文件的元信息,根据所述元信息生成代码文件对象列表;
第二审核模块202,用于对所述代码文件对象列表中每个代码文件对象进行符号化处理和抽象语法树构建,获得代码语法结构信息,根据所述代码语法结构信息构建代码语义依赖关系图;
第三审核模块203,用于基于所述代码语义依赖关系图确定所有代码文件中的代码问题并形成代码分析报告,根据所述代码分析报告对存在缺陷的代码内容进行修改;
第四审核模块204,用于获取已被修改的当前代码内容,基于所述代码语义依赖关系图,通过深度优先搜索算法为所述当前代码内容确定存在直接函数调用关系或间接函数调用关系的上下文代码内容;
第五审核模块205,用于根据业务配置的敏感信息关键词列表,为所有代码文件中含有敏感信息的代码内容和注释信息进行脱敏处理;
第六审核模块206,用于获取底层人工智能大模型接口每次响应的MR请求消耗的token数量,通过所述token数量计算底层人工智能大模型的资源消耗量,并在所述token数量达到预设消耗阈值时进行告警推送和调用切断。
可以理解的是,如图1所示的基于GitLab的代码审核方法实施例中的内容均适用于本基于GitLab的代码审核系统实施例中,本基于GitLab的代码审核系统实施例所具体实现的功能与如图1所示的基于GitLab的代码审核方法实施例相同,并且达到的有益效果与如图1所示的基于GitLab的代码审核方法实施例所达到的有益效果也相同。
需要说明的是,上述系统之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述系统的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
参照图3,本发明实施例还提供了一种计算机设备3,包括:存储器302和处理器301及存储在存储器302上的计算机程序303,当所述计算机程序303在处理器301上被执行时,实现如上述方法中任一项所述的基于GitLab的代码审核方法。
所述计算机设备3可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。该计算机设备3可包括,但不仅限于,处理器301、存储器302。本领域技术人员可以理解,图3仅仅是计算机设备3的举例,并不构成对计算机设备3的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、网络接入设备等。
所称处理器301可以是中央处理单元(Central Processing Unit,CPU),该处理器301还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器302在一些实施例中可以是所述计算机设备3的内部存储单元,例如计算机设备3的硬盘或内存。所述存储器302在另一些实施例中也可以是所述计算机设备3的外部存储设备,例如所述计算机设备3上配备的插接式硬盘,智能存储卡(Smart MediaCard,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器302还可以既包括所述计算机设备3的内部存储单元也包括外部存储设备。所述存储器302用于存储操作系统、应用程序、引导装载程序(BootLoader)、数据以及其他程序等,例如所述计算机程序的程序代码等。所述存储器302还可以用于暂时地存储已经输出或者将要输出的数据。
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时,实现如上述方法中任一项所述的基于GitLab的代码审核方法。
该实施例中,所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质至少可以包括:能够将计算机程序代码携带到拍照装置/终端设备的任何实体或装置、记录介质、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质。例如U盘、移动硬盘、磁碟或者光盘等。在某些司法管辖区,根据立法和专利实践,计算机可读介质不可以是电载波信号和电信信号。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所公开的实施例中,应该理解到,所揭露的装置/终端设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

Claims (10)

1.一种基于GitLab的代码审核方法,其特征在于,所述方法具体包括:
获取用户提交的MR请求,基于所述MR请求的ID信息,通过GitLab API接口获得所述MR请求对应的所有代码文件及所有代码文件的元信息,根据所述元信息生成代码文件对象列表;
对所述代码文件对象列表中每个代码文件对象进行符号化处理和抽象语法树构建,获得代码语法结构信息,根据所述代码语法结构信息构建代码语义依赖关系图;
基于所述代码语义依赖关系图确定所有代码文件中的代码问题并形成代码分析报告,根据所述代码分析报告对存在缺陷的代码内容进行修改;
获取已被修改的当前代码内容,基于所述代码语义依赖关系图,通过深度优先搜索算法为所述当前代码内容确定存在直接函数调用关系或间接函数调用关系的上下文代码内容;
根据业务配置的敏感信息关键词列表,为所有代码文件中含有敏感信息的代码内容和注释信息进行脱敏处理;
获取底层人工智能大模型接口每次响应的MR请求消耗的token数量,通过所述token数量计算底层人工智能大模型的资源消耗量,并在所述token数量达到预设消耗阈值时进行告警推送和调用切断。
2.根据权利要求1所述的方法,其特征在于,所述对所述代码文件对象列表中每个代码文件对象进行符号化处理和抽象语法树构建,获得代码语法结构信息,根据所述代码语法结构信息构建代码语义依赖关系图,具体包括:
根据词法分析器对所述代码文件对象列表中每个代码文件对象进行符号化处理,获得符号流序列,所述符号流序列包括多个词法单元信息,所述词法单元信息包括标识符、关键字、字面量和运算符;
基于所述符号流序列,采用语法分析其构建抽象语法树,所述抽象语法树的节点包括语法单元信息,所述语法单元信息包括语句、表达式和声明;
根据所述抽象语法树获得代码语法结构信息,通过对所述代码语法结构信息进行语义分析,获得代码元素之间的依赖关系;
根据所述依赖关系构建代码语义依赖关系图。
3.根据权利要求1所述的方法,其特征在于,所述基于所述代码语义依赖关系图确定所有代码文件中的代码问题并形成代码分析报告,根据所述代码分析报告对存在缺陷的代码内容进行修改,具体包括:
根据所述代码语义依赖关系图,采用基于图的深度优先搜索算法对所有代码文件进行遍历,同时通过代码静态分析技术确定代码内容中的代码缺陷信息,形成代码分析报告;
基于所述代码分析报告,采用抽象语法树分析技术对存在缺陷的代码内容进行定位,并通过语义分析技术判断代码缺陷的类型和严重程度;
根据预设的代码修复规则库,通过代码缺陷的类型和严重程度获取相应的代码修复方案,获得修复后的代码文件;
根据修复后的代码文件,通过控制流图分析技术对代码执行流程进行分析,采用数据流分析技术对代码内容中的数据流向和生命周期进行跟踪,并结合代码覆盖率分析技术,判断修复后的代码文件的代码逻辑是否还存在问题;
若修复后的代码文件的代码逻辑还存在问题,重新从代码修复规则库中获取新的代码修复方案进行修复,直到修复后的代码文件的代码逻辑不再存在问题。
4.根据权利要求1所述的方法,其特征在于,所述基于所述代码语义依赖关系图,通过深度优先搜索算法为所述当前代码内容确定存在直接函数调用关系或间接函数调用关系的上下文代码内容,具体包括:
采用深度优先搜索算法遍历所述代码语义依赖关系图中的所有节点;
判断当前遍历到的节点与已被修改的当前代码内容对应的节点之间是否存在直接函数调用关系或间接函数调用关系;
若当前遍历到的节点与已被修改的当前代码内容对应的节点之间存在直接函数调用关系或间接函数调用关系,则确定当前遍历到的节点对应的代码内容为与已被修改的当前代码内容存在直接函数调用关系或间接函数调用关系的上下文代码内容。
5.根据权利要求1所述的方法,其特征在于,所述根据业务配置的敏感信息关键词列表,为所有代码文件中含有敏感信息的代码内容和注释信息进行脱敏处理,具体包括:
获取业务配置的敏感信息关键词列表;
基于所述敏感信息关键词列表,采用正则表达式匹配算法对所有代码文件的代码内容和注释信息进行扫描,判断是否所述代码内容和所述注释信息是否包含有敏感信息;
若判断为是,则采用数据脱敏算法对包含有敏感信息的代码内容或注释信息进行脱敏处理;
将脱敏处理后的代码内容和注释信息替换原来的代码内容和注释信息,得到脱敏代码文件;
采用代码静态分析技术对所述脱敏代码文件进行检查,确定所述脱敏代码文件的原有代码功能是否受到影响。
6.根据权利要求1所述的方法,其特征在于,所述通过所述token数量计算底层人工智能大模型的资源消耗量,并在所述token数量达到预设消耗阈值时进行告警推送和调用切断,具体包括:
将token数量作为输入参数,过加权系数和历史消耗量进行加权计算,得到底层人工智能大模型的当前时刻的资源消耗量估计值;
判断所述资源消耗量估计值是否达到预设消耗阈值,若达到则触发告警推送流程和调用切断流程,所述告警推送流程为根据预先配置的告警规则生成告警信息,通过消息队列发送给相关责任人,所述调用切断流程为通过用底层人工智能大模型的接口控制模块,切断当前的MR请求的调用;
实时监控底层人工智能大模型的资源消耗量,根据所述资源消耗量的变化趋势动态调整预设消耗阈值,同时通过增量学习算法优化预设消耗阈值的设置。
7.根据权利要求1至6中任一项所述的方法,其特征在于,所述方法还包括:
根据用户配置的底层人工智能大模型的接口信息,采用工厂模式和策略模式,动态选择和创建对应的模型应用程序接口适配器,根据所述模型应用程序接口适配器的接口规范生成对应的请求参数对象,所述请求参数对象包括模型标识、代码主体内容、上下文代码内容和角色提示描述内容。
8.一种基于GitLab的代码审核系统,其特征在于,所述系统具体包括:
第一审核模块,用于获取用户提交的MR请求,基于所述MR请求的ID信息,通过GitLabAPI接口获得所述MR请求对应的所有代码文件及所有代码文件的元信息,根据所述元信息生成代码文件对象列表;
第二审核模块,用于对所述代码文件对象列表中每个代码文件对象进行符号化处理和抽象语法树构建,获得代码语法结构信息,根据所述代码语法结构信息构建代码语义依赖关系图;
第三审核模块,用于基于所述代码语义依赖关系图确定所有代码文件中的代码问题并形成代码分析报告,根据所述代码分析报告对存在缺陷的代码内容进行修改;
第四审核模块,用于获取已被修改的当前代码内容,基于所述代码语义依赖关系图,通过深度优先搜索算法为所述当前代码内容确定存在直接函数调用关系或间接函数调用关系的上下文代码内容;
第五审核模块,用于根据业务配置的敏感信息关键词列表,为所有代码文件中含有敏感信息的代码内容和注释信息进行脱敏处理;
第六审核模块,用于获取底层人工智能大模型接口每次响应的MR请求消耗的token数量,通过所述token数量计算底层人工智能大模型的资源消耗量,并在所述token数量达到预设消耗阈值时进行告警推送和调用切断。
9.一种计算机设备,其特征在于,包括:存储器和处理器及存储在存储器上的计算机程序,当所述计算机程序在处理器上被执行时,实现如权利要求1至7中任一项所述的用于基于GitLab的代码审核方法。
10.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,所述计算机程序被处理器运行时,实现如权利要求1至7中任一项所述的用于基于GitLab的代码审核方法。
CN202410791818.3A 2024-06-19 2024-06-19 一种基于GitLab的代码审核方法、系统、设备及介质 Pending CN118585451A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410791818.3A CN118585451A (zh) 2024-06-19 2024-06-19 一种基于GitLab的代码审核方法、系统、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410791818.3A CN118585451A (zh) 2024-06-19 2024-06-19 一种基于GitLab的代码审核方法、系统、设备及介质

Publications (1)

Publication Number Publication Date
CN118585451A true CN118585451A (zh) 2024-09-03

Family

ID=92527690

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410791818.3A Pending CN118585451A (zh) 2024-06-19 2024-06-19 一种基于GitLab的代码审核方法、系统、设备及介质

Country Status (1)

Country Link
CN (1) CN118585451A (zh)

Similar Documents

Publication Publication Date Title
US11847574B2 (en) Systems and methods for enriching modeling tools and infrastructure with semantics
US10853231B2 (en) Detection and correction of coding errors in software development
US8312440B2 (en) Method, computer program product, and hardware product for providing program individuality analysis for source code programs
US8732676B1 (en) System and method for generating unit test based on recorded execution paths
US8572747B2 (en) Policy-driven detection and verification of methods such as sanitizers and validators
CN111597550A (zh) 一种日志信息分析方法及相关装置
CN112688966A (zh) webshell检测方法、装置、介质和设备
CN112016138A (zh) 一种车联网自动化安全建模的方法、装置和电子设备
Tan et al. Does it matter who pays back Technical Debt? An empirical study of self-fixed TD
CN116578980A (zh) 基于神经网络的代码分析方法及其装置、电子设备
CN113778852B (zh) 一种基于正则表达式的代码分析方法
CN111258562B (zh) Java代码质量检查方法、装置、设备和存储介质
WO2024057046A1 (en) A method for computing and merging staticand dynamic metricsof a computer program, a method for training a machine learning model based on hybrid metrics, a machine learning model, and a method for using the machine learning model
US11880470B2 (en) System and method for vulnerability detection in computer code
CN118585451A (zh) 一种基于GitLab的代码审核方法、系统、设备及介质
CN111666216B (zh) 一种智能合约分析方法及装置
CN114691197A (zh) 代码分析方法、装置、电子设备和存储介质
CN113392016A (zh) 对程序异常情况处理的规约生成方法、装置、设备及介质
CN112632546A (zh) 广电行业自动化代码分析方法
CN118276933B (zh) 软件兼容性问题的处理方法、装置、设备和介质
CN118170685B (zh) 一种自适应操作系统环境的自动化测试平台及方法
CN113419877B (zh) 决策服务接口的实现方法、装置、电子设备和存储介质
CN118349454A (zh) 代码审查方法及系统
Zhao et al. Software Vulnerability Mining and Analysis Based on Deep Learning.
CN117632672A (zh) 托管平台开源代码的风险监控方法、装置和设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination