System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于软件工程领域,涉及大语言模型的应用,代码项目的解析以及仓库级别的代码缺陷自动修复,具体涉及一种基于大语言模型的仓库级别代码缺陷自动修复的方法。
技术介绍
1、代码缺陷自动修复技术是软件工程领域的一个重要研究方向。大型软件开发和维护过程中不可避免地存在大量的缺陷和错误,这些缺陷可能导致程序崩溃、性能下降、安全漏洞等问题。随着现代软件规模的不断变大,代码缺陷的数量以及修复难度随之增加,为企业带来了巨大的经济损失。手动修复代码缺陷通常需要深入理解代码的结构和功能,然后进行调试和修改,这是一项繁琐和容易出错的工作。而且,一些缺陷可能很难被人工识别和修复。修复代码缺陷,成为了开发人员维护代码质量的重大负担。代码缺陷自动修复技术有希望将开发者从繁重的调试中解脱出来,近年来成为热门的研究领域之一。
2、代码缺陷自动修复技术是软件工程和人工智能领域的交叉点,它借助了自动化规约验证、程序分析、深度学习等技术,通过自动生成潜在的修复方案来加速缺陷修复过程。目前,许多研究人员和工程师们在这一领域进行了大量的研究和开发工作,涌现出了各种自动修复工具和框架。虽然传统的基于规则的静态代码分析器,如fortify或snyk,在识别软件漏洞方面发挥了重要作用,但它们由于基于规则的局限性有时会错过一些微小或者变换形式的缺陷。最近,像openai的chatgpt这样的大语言模型(llm)为解决这一挑战提供了一条新的途径。在大量文本数据的支持下,llm在理解和生成代码方面显示出了潜力,大量相关实验结果表明它们也可以熟练地定位和纠正软件漏洞。
3、综上,设计一种基于大语言模型的仓库级别代码缺陷修复的方法是很有必要的。到目前为止还没有针对此类问题的相关方法的提出。
技术实现思路
1、本专利技术的目的在于针对现有大语言模型无法自动化实现仓库级别代码缺陷自动修复的问题,为代码仓库中的代码缺陷提供一种基于大语言模型的仓库级别代码缺陷自动修复的方法。本专利技术提供了一个复合缺陷代码表征的模型,自动化搜索并过滤跨函数以及跨文件上下文的方法,并生成prompt输入大语言模型最终提取返回修复建议,可以做到将目前大语言模型直接处理代码缺陷问题的能力从函数级扩展到代码仓库级。该方法在实际应用中相比之前可以充分利用现有大语言模型的强大功能,既能够减轻开发人员调试和修改代码的成本,并且方法自身具有很强的扩展性,兼容各种不同的编程语言和大语言模型,提升软件开发和维护的效率。
2、为实现上述目的,本专利技术采用如下技术方案:
3、一种基于大语言模型的仓库级别代码缺陷自动修复的方法,其步骤包括:
4、1)对于待处理的代码仓库,根据所述代码仓库的结构信息生成函数级调用关系图;
5、2)构建跨函数上下文提取模型,用于根据用户输入的代码缺陷的定位信息以及所述函数级调用关系图在所述代码仓库范围内自动搜索代码缺陷相关的上下文信息;
6、3)将所述上下文信息、问题指令以及代码缺陷所在位置进行整合后输入大语言模型,然后从所述大语言模型输出的结果中提取代码缺陷对应的缺陷修改方案。
7、进一步的,所述跨函数上下文提取模型包括关联上下文信息获取模块和上下文信息的过滤筛选模块;
8、所述关联上下文信息获取模块用于根据所述代码缺陷的定位信息对所述代码仓库中所有的上下文实体元素进行判定,筛选出与代码缺陷相关的上下文信息;
9、所述上下文信息的过滤筛选模块用于对所述上下文信息进行处理,保留与缺陷位置存在数据和控制依赖关系的语句。
10、进一步的,所述关联上下文提取模块的处理流程为:
11、a1)在函数级调用关系图上查找所述定位信息对应的结点;
12、b1)针对步骤a1)中获取的每一结点,上下文提取器进行静态代码分析如下:
13、i.上下文提取器根据结点在函数级调用关系图中的结构信息,从代码仓库中找到代码缺陷所在位置的代码l;
14、ii.查找代码l所在函数f0,获取代码仓库内调用函数f0的代码的集合pf0;
15、iii.查找代码l内所有变量,得到变量集合x,如果该变量集合x中有全局变量则找到该全局变量在所述代码仓库中的定义位置的代码得到变量定义集合px;
16、iv.查找代码l内所有调用的函数,得到一函数集合f,如果该函数集合f中的函数在所述代码仓库的其他位置也有引用,则找到对应引用位置的代码,得到函数的被调用信息集合pf;
17、c1)将函数f0以及通过指令询问修改错误的位置所需提供的上下文信息输入大语言模型,根据所述大语言模型输出的函数或变量上下文的名称在函数级调用关系图中查找相应结点,如果结点为函数则将其添加到函数集合f,如果结点为变量则将其添加到变量集合x。
18、进一步的,所述上下文信息的过滤筛选模块的处理流程为:
19、a2)利用静态代码切片技术,基于代码l中的变量和函数对函数f0进行切片,提取与代码l存在数据可控制依赖的函数切片f0′
20、b2)将函数集合f中除f0以外每一函数分别输入大语言模型中,生成每个函数的摘要和函数签名;
21、c2)将步骤b2)中得到的摘要、函数签名和对应函数的代码进行整合得到{f1′,f2′,…,fn′};其中fn′为第n个函数的摘要、函数签名和第n个函数的代码;
22、d2)利用{f1′,f2′,…,fn′}以及f0′更新函数集合f,将更新后的函数集合f中每一元素与pf中对应的信息进行组合,将变量集合x中每一元素与px中对应的信息进行组合;
23、e2)将步骤d2)中合并完成的信息按照大语言模型的prompt格式组合起来,并在其中添加辅助的指令信息以及说明语句,然后判断输入数据的总长度是否超过大语言模型的限制;如果超过限制则进行步骤f2),否则执行步骤g2);
24、f2)按照设定的过滤规则对输入数据进行处理,直到输入数据的总长度符合大语言模型的限制;所述过滤规则包括:
25、i.删除函数集合f中函数代码部分的空行和注释;
26、ii.随机删除函数集合f中除f0′之外的函数代码;
27、iii.随机选择函数或变量,如果所选函数或变量有多个引用,则保留不大于2个引用;
28、iv.随机删除除f0′之外的函数的函数说明部分;
29、v.随机删除除f0′之外的函数本文档来自技高网...
【技术保护点】
1.一种基于大语言模型的仓库级别代码缺陷自动修复的方法,其步骤包括:
2.根据权利要求1所述的方法,其特征在于,所述跨函数上下文提取模型包括关联上下文信息获取模块和上下文信息的过滤筛选模块;
3.根据权利要求2所述的方法,其特征在于,所述关联上下文提取模块的处理流程为:
4.根据权利要求2所述的方法,其特征在于,所述上下文信息的过滤筛选模块的处理流程为:a2)利用静态代码切片技术,基于代码l中的变量和函数对函数f0进行切片,提取与代码l存在数据可控制依赖的函数切片f0′
5.根据权利要求1所述的方法,其特征在于,生成所述函数级调用关系图的方法为:
6.根据权利要求1所述的方法,其特征在于,步骤3)中,将所述上下文信息、问题指令以及代码缺陷所在位置进行整合的方法为:根据定义的prompt模板依次将指令、上下文、缺陷位置嵌入到prompt模板的对应位置生成prompt,用于输入到所述大语言模型中。
7.根据权利要求1或6所述的方法,其特征在于,从所述大语言模型输出的结果中提取代码缺陷对应的缺陷修改方案的方法为:从
8.一种服务器,其特征在于,包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行权利要求1至7任一所述方法中各步骤的指令。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7任一所述方法的步骤。
...【技术特征摘要】
1.一种基于大语言模型的仓库级别代码缺陷自动修复的方法,其步骤包括:
2.根据权利要求1所述的方法,其特征在于,所述跨函数上下文提取模型包括关联上下文信息获取模块和上下文信息的过滤筛选模块;
3.根据权利要求2所述的方法,其特征在于,所述关联上下文提取模块的处理流程为:
4.根据权利要求2所述的方法,其特征在于,所述上下文信息的过滤筛选模块的处理流程为:a2)利用静态代码切片技术,基于代码l中的变量和函数对函数f0进行切片,提取与代码l存在数据可控制依赖的函数切片f0′
5.根据权利要求1所述的方法,其特征在于,生成所述函数级调用关系图的方法为:
6.根据权利要求1所述的方法,其特征在于,步骤3)中,将所述上下文信息、问题指令以及代码缺陷所在位置进行整合的方法为:根据定义的prompt模板依次将指令、上下文、缺陷位置嵌入到prompt模板的对应位置生成...
【专利技术属性】
技术研发人员:陈昱晓,武延军,凌祥,罗天悦,吴敬征,
申请(专利权)人:中国科学院软件研究所,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。