一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种代码检测方法、装置、设备及存储介质与流程

2023-04-05 03:30:23 来源:中国专利 TAG:


1.本公开涉及数据处理技术领域,具体而言,涉及一种代码检测方法、装置、设备及存储介质。


背景技术:

2.随着科技的进步和发展,对软件研发的要求也随之提高,经常需要开发人员自行编写函数代码。在软件开发的过程中,大多是多人成组,共同协力进行软件开发工作。同一组内的开发人员需要理解其他组员编写的函数代码,并为这些函数代码进行代码评审(code review,cr),从而可以及时发现函数代码存在的问题,进而提高代码的质量和可维护性。函数名称可以体现出函数代码的实现功能,在代码评审、程序理解、函数调用等多种过程中,函数代码所对应的函数名称十分关键。
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.图1示出了本公开实施例所提供的一种代码检测方法的流程图;
66.图2示出了本公开实施例所提供的代码检测方法中,文件预处理具体方法的流程图;
67.图3示出了本公开实施例所提供的代码检测方法中,模型训练具体方法的流程图;
68.图4示出了本公开实施例所提供的一种代码检测方法的过程示意图;
69.图5示出了本公开实施例所提供的一种代码检测装置的示意图之一;
70.图6示出了本公开实施例所提供的一种代码检测装置的示意图之二;
71.图7示出了本公开实施例所提供的一种电子设备的结构示意图。
具体实施方式
72.为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
73.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
74.本文中术语“和/或”,仅仅是描述一种关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括a、b、c中的至少一种,可以表示包括从a、b和c构成的集合中选择的任意一个或多个元素。
75.经研究发现,为了得到与函数代码适配的函数名称,大多是基于现有的函数名称进行推荐或者是基于函数代码生成函数名称,这里推荐方式是基于数据库中存储的现有函数代码及函数名称,从中确定出与当前函数代码相似或相同的现有函数,进而基于从数据库中确定出的现有函数代码对应的函数名称,得到当前函数代码的函数名称,然而这种方式可行的前提是当前函数代码不是新编写的函数代码,针对生成方式而言,得到的函数名称精准度低,得到的函数名称与函数代码的匹配度低,从而影响函数名称的准确性。
76.基于上述研究,本公开提供了一种代码检测方法,针对源代码文件,通过对其进行预处理,可以得到至少一段函数代码和所述函数代码在所述源代码文件中的预设函数名称,以及所述函数代码转换成的通用代码片段,如此可以增加通用代码片段的丰富性,提升语义丰富度,进而可以通过函数名称生成模型为其生成模型生成名称,在此过程中,可以提升模型对于函数代码的解析效果,提高模型生成名称的精度,并且可以自动地判断是否需要基于模型生成名称对函数代码当前的预设函数名称进行纠错和推荐,从而提升函数代码的名称准确性以及函数代码和其对应的函数名称之间的匹配度。
77.为便于对本实施例进行理解,首先对本公开实施例所公开的一种代码检测方法进
行详细介绍,本公开实施例所提供的代码检测方法的执行主体可以是代码检测装置,也可以是具有一定计算能力的电子设备。本实施方式中,该电子设备可以为服务器。其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云存储、大数据和人工智能平台等基础云计算服务的云服务器。
78.其他实施方式中,该电子设备还可以为终端设备或者其他处理设备,该终端设备可以为移动设备、终端、车载设备及计算设备等。其它处理设备可以是包括处理器和存储器的设备,在此不做限定。在一些可能的实现方式中,该代码检测方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
79.下面对本公开实施例提供的代码检测方法加以说明。
80.请参阅图1,图1为本公开实施例提供的一种代码检测方法的流程图。如图1中所示,本公开实施例提供的代码检测方法包括:
81.s101:对源代码文件进行预处理,得到至少一段函数代码和所述函数代码在所述源代码文件中的预设函数名称,以及所述函数代码转换成的通用代码片段。
82.这里,可以从代码数据库中获取源代码文件,在实际应用中,所述源代码文件包括函数、类、变量等,这其中,函数包括函数代码、函数名称、参数等,因此可以对所述源代码文件进行预处理,从而得到至少一段函数代码、所述函数代码在所述源代码文件中的预设函数名称、以及所述函数代码转换成的通用代码片段。
83.其中,所述函数代码为从所述源代码文件中解析出的函数代码,可选地,可以从所述源代码文件中解析出至少一段函数代码,在所述源代码文件中所述函数代码当前记载的函数名称为对应的所述预设函数名称,后续可以对所述函数代码的所述预设函数名称进行名称判断。
84.可选地,所述预设函数名称可以是所述函数代码的开发者自行命名生成的,也可以是通过其他方式得到的,在此并不做任何限定。
85.需要说明的是,所述源代码文件中的函数代码可以通过各种不同的程序语言编写获得,程序语言是用来定义计算机程序的形式语言,用来向计算机发出指令,使计算机能够实现各种不同的功能。目前的程序语言包括很多类型,例如c语言、c 语言、objective-c语言、golang语言、vb语言、java语言等等。本方案可以通过使用解释器,将各种程序语言转换成通用语言,从而使得本方案不受限于程序语言类型,对于所述源代码文件的语言类型并不做任何限定。
86.具体地,请参阅图2,图2为本公开实施例提供的代码检测方法中,文件预处理具体方法的流程图。如图2中所示,本公开实施例提供的文件预处理方法包括:
87.s1011:从源代码文件中提取出至少一段函数代码和所述函数代码在所述源代码文件中的预设函数名称。
88.由上述内容可知,所述源代码文件中写入有函数,每个函数对应有函数代码和函数名称,进而可以从所述源代码文件中将至少一段函数代码和所述函数代码在所述源代码文件中的预设函数名称提取出来。
89.s1012:对每段所述函数代码进行数据清洗处理,得到所述函数代码对应的通用代码片段。
90.该步骤中,在提取出至少一段所述函数代码后,针对每段所述函数代码,可以对其进行数据清洗处理,通过数据清洗处理,可以去除和所述函数代码语义无关的信息,并将所述函数代码进行细粒度的转换,从而得到所述函数代码转换成的通用代码片段。
91.具体地,在一些可能的实施方式中,所述对每段所述函数代码进行数据清洗处理,包括以下内容中的一项或多项:
92.删除所述函数代码中的注释信息;删除所述函数代码中的预设符号;将所述函数代码中的变量名称拆分成单个字符串;将所述函数代码中的常量替换为单个字符串。
93.其中,所述预设符号可以为预设的、与所述函数代码语义无关的符号,例如括号等标点符号。
94.如此,通过删除所述注释信息和所述预设符号,可以只保留函数体,减少其他信息对于代码语义的影响,从而提升后续通过函数名称生成模型得到的模型生成名称的准确度,进而保证后续对于所述函数代码进行名称一致性判断的准确性。
95.这里,所述变量名称大多是由多个英文单词连续排列,合并为一个复合词作为变量名称,在本实施方式中,通过将所述变量名称拆分成单个字符串,即将复合词拆分为多个单词,可以增加变量名称的丰富性,提升语义丰富度,从而提升后续函数名称生成模型对于函数代码的解析效果。
96.在本实施方式中,通过将所述常量替换为单个字符串,提升常量的通用性,从而提升后续函数名称生成模型对于函数代码的识别效果。
97.承接上述s101,s102:将所述通用代码片段输入至预先训练好的函数名称生成模型,得到所述函数代码的模型生成名称,所述函数名称生成模型为根据多段样本函数代码及对应的样本函数名称训练得到的。
98.本步骤中,预先根据多段样本函数代码及对应的样本函数名称训练得到函数名称生成模型,所述函数名称生成模型用于为函数代码生成对应的函数名称,具体地,可以将所述通用代码片段输入至所述函数名称生成模型,从而得到所述函数名称生成模型输出的模型生成名称。
99.以上本公开实施例中所述函数名称生成模型为预先训练好的,请参阅图3,图3为本公开实施例提供的代码检测方法中,模型训练具体方法的流程图。如图3中所示,本公开实施例提供的模型训练方法包括:
100.s301:获取训练样本集,所述训练样本集包括多段样本函数代码以及每段所述样本函数代码对应的样本函数名称。
101.这里,为了提高后续训练出的函数名称生成模型进行名称生成的准确性,针对所述样本函数代码对应的所述样本函数名称的选取,可以是使用高质量的函数名称,即所述样本函数名称用词规范,且所述样本函数名称和所述样本函数代码匹配度高,所述样本函数名称可以清晰直观地表示出所述样本函数代码可实现的功能。
102.可选地,所述样本函数代码及其对应的所述样本函数名称可以从开源数据集中摘取,所述开源数据集可以包括多种程序语言类型,所述样本函数代码及其对应的所述样本函数名称也可以是经过人工标注和筛选的,在次并不做限定。
103.在一些可能的实施方式中,可以按照所述样本函数代码对应的程序语言类型,分批次进行训练。
104.这样,通过选用高质量的样本函数代码和样本函数名称对神经网络进行训练,可以提高训练出的函数名称生成模型的名称生成精度。
105.s302:针对每段所述样本函数代码,对所述样本函数代码进行数据清洗处理,得到所述样本函数代码对应的样本代码片段。
106.这里,对所述样本函数代码进行数据清洗处理的过程和上述内容中对所述函数代码进行数据清洗处理的过程相同,在此不再进行赘述。
107.这样,通过对所述样本函数代码进行数据清洗处理,使得转换后的所述样本代码片段中的单词数量增加,可以增加样本代码片段的丰富性,提升语义丰富度,提高神经网络针对多种字符的学习效果,大大增强通过训练得到的函数名称生成模型的鲁棒性,有效提高通过函数名称生成模型得到的模型生成名称和所述函数代码的适配度。
108.s303:基于所述样本代码片段和对应的所述样本函数名称对预先构建好的神经网络进行训练,将得到的满足训练截止条件的模型作为函数名称生成模型,所述预先构建好的神经网络包括具有标识符感知能力的统一预训练编解码网络。
109.在具体的应用中,在用于生成函数名称时,所述预先构建好的神经网络可以是具有标识符感知能力的统一预训练编解码网络,例如codet5网络。使用codet5来训练用于生成函数名称的模型,不仅名称生成速度快,而且针对任意的函数代码的检测和识别效果都较好,但并不局限于此,在其它实施方式中,也可以是使用其他单一种类的神经网络,还可以使用不同种类的神经网络进行组合,这里不做赘述。
110.这里,所述样本函数名称大多是由多个英文单词连续排列,合并为一个复合词作为样本函数名称,为了提升所述神经网络对于所述样本函数名称的学习效果,在一些可能的实施方式中,可以将所述样本函数名称拆分成单个字符串,得到转换后的所述样本函数名称,通过将所述样本函数名称拆分成单个字符串,即将复合词拆分为多个单词,可以增加样本函数名称的丰富性,提升语义丰富度,从而提升所述神经网络对于样本函数名称的解析效果。
111.相应地,在得到转换后的所述样本函数名称后,可以基于所述样本代码片段和对应的转换后的所述样本函数名称对预先构建好的神经网络进行训练,得到训练好的函数名称生成模型。
112.可选地,在一些可能的实施方式中,可以先获取预先构建好的用于生成函数名称的神经网络,然后将所述样本代码片段作为所述神经网络的输入,对应的转换后的所述样本函数名称作为所述神经网络的输出,以供所述神经网络进行学习,将得到的满足训练截止条件的模型作为函数名称生成模型。
113.在另一些可能的实施方式中,可以将所述样本代码片段输入至预先构建好的神经网络,得到所述样本代码片段对应的训练生成名称;基于得到的所述训练生成名称和所述样本代码片段对应的所述样本函数名称,调整所述神经网络的网络参数,得到调整后的神经网络;针对调整后的神经网络,返回执行将所述样本代码片段输入至神经网络的步骤,直至所述神经网络满足训练截止条件,将训练完成的模型作为函数名称生成模型。
114.在上述步骤中,可以是将所述样本代码片段作为所述神经网络的输入,通过所述神经网络的学习和预测,输出各所述样本代码片段对应的训练生成名称,再基于输出的训练生成名称和对应的所述样本函数名称之间的差异,来对所述神经网络的参数进行调整,
从而完成一次训练,接着返回到将所述样本代码片段输入至神经网络的步骤,继续将所述样本代码片段输入至第一次调整参数后的所述神经网络中,通过后续的处理步骤继续调整所述神经网络的网络参数,直至多次训练后,调整后的所述神经网络满足训练截止条件为止,可以认为所述神经网络训练完毕,可以得到函数名称生成模型。
115.其中,通过输出的训练生成名称和对应的所述样本函数名称之间的差异来对所述神经网络的参数进行调整,可以通过调用预先设置的损失函数,以计算所述神经网络在各个维度的损失,然后根据计算出的损失,确定所述神经网络中各网络参数的调整方向和调整大小等。
116.相应地,所述训练截止条件,可以是所述神经网络在各个维度下的损失小于各个维度对应的损失阈值,即为满足所述训练截止条件,但并不局限于此,在其它实施方式中,也可以是在所述神经网络的参数调整次数大于或者等于预设次数时,为满足所述训练截止条件。
117.承接上述s102,s103:针对所述预设函数名称以及所述模型生成名称进行名称一致性判断,在判断结果指示所述预设函数名称与所述模型生成名称不一致的情况下,针对所述预设函数名称进行名称优化提示。
118.该步骤中,在得到所述模型生成名称后,由于所述模型生成模型是通过高质量的样本函数代码及对应的样本函数名称训练得到的,所以认为所述模型生成名称具有高精度,并且所述模型生成名称和所述函数代码契合度高,而所述预设函数名称是所述函数代码当前的函数名称,此时可以针对所述预设函数名称以及所述模型生成名称进行名称一致性判断,根据不同的判断结果进行不同的处理,具体地,在判断结果指示所述预设函数名称与所述模型生成名称不一致的情况下,针对所述预设函数名称进行名称优化提示。
119.因此,在一些可能的实施方式中,所述针对所述预设函数名称以及所述模型生成名称进行名称一致性判断,在判断结果指示所述预设函数名称与所述模型生成名称不一致的情况下,针对所述预设函数名称进行名称优化提示,包括:
120.获取预设的相似度阈值;
121.确定所述预设函数名称以及所述模型生成名称之间的相似度;
122.在所述相似度小于所述相似度阈值的情况下,确定判断结果为所述预设函数名称与所述模型生成名称不一致,并针对所述预设函数名称进行名称优化提示。
123.这里,由上述内容可知,在实际应用中,函数名称大多是由多个英文单词连续排列,合并为一个复合词作为函数名称,在确定所述预设函数名称以及所述模型生成名称之间的相似度时,可以分别将所述预设函数名称和所述模型生成名称划分为多个token,比较所述预设函数名称和所述模型生成名称之间的相同的token的情况。
124.具体地,可以分别对所述预设函数名称以及所述模型生成名称进行语法分析和词法分析,将所述预设函数名称以及所述模型生成名称切分为多个token,这里,token是一组预定义的、能够识别的字符串。可选地,可以将所述预设函数名称以及所述模型生成名称中的每个英文单词划分为一个token。
125.然后,可以确定所述预设函数名称以及所述模型生成名称之间共有的token在所述预设函数名称和所述模型生成名称的token之和中的占比,占比数值越大,说明相同的token的数量越多,则所述预设函数名称和所述模型生成名称的相似度越高。
126.具体地,所述相似度的计算公式如下公式(1)所示:
[0127][0128]
其中,sim(p,c)为所述预设函数名称以及所述模型生成名称之间的相似度,p为所述预设函数名称,c为所述模型生成名称,num of tokens(p)为所述预设函数名称中token的数量,num of tokens(c)为所述模型生成名称中token的数量,num of shared tokens(p,c)为所述预设函数名称以及所述模型生成名称之间相同的token的数量。
[0129]
这里,所述相似度对应的数值在0-1之间,通过所述相似度和所述相似度阈值的比对,可以确定是否需要基于所述模型生成名称针对所述预设函数名称进行推荐和纠错,进而针对所述预设函数名称进行名称优化提示。
[0130]
在其他实施方式中,还可以采用计算余弦相似度、计算编辑距离等方式,得到所述预设函数名称以及所述模型生成名称之间的相似度。
[0131]
在得到所述预设函数名称以及所述模型生成名称之间的相似度和预设的相似度阈值后,将所述相似度和所述相似度阈值进行比较,在所述相似度小于所述相似度阈值的情况下,确定判断结果为所述预设函数名称与所述模型生成名称不一致,此时可以认为所述预设函数名称与所述模型生成名称差异较大,需要基于所述模型生成名称针对所述预设函数名称进行推荐和纠错,从而针对所述预设函数名称进行名称优化提示。
[0132]
示例性的,若通过上述计算公式得到所述预设函数名称以及所述模型生成名称之间的相似度为0.5,而相似度阈值为0.8,此时所述相似度小于所述相似度阈值,则可以针对所述预设函数名称进行名称优化提示。
[0133]
相应地,在一些可能的实施方式中,在判断结果指示所述预设函数名称与所述模型生成名称不一致的情况下,向提交所述源代码文件的用户发送包括推荐名称的名称优化提示信息,所述推荐名称为所述模型生成名称。
[0134]
可选地,所述名称优化提示信息还可以包括此次名称一致性判断的判断结果,以便用户获知所述函数代码当前的所述预设函数名称存在不足,可以基于所述推荐名称进行调整。
[0135]
具体地,所述用户可以使用所述模型生成名称替换所述函数代码当前的所述预设函数名称,将所述模型生成名称确定为所述函数代码的函数名称,如此,所述函数代码具有高准确度、高匹配度的函数名称。
[0136]
在另一些可能的实施方式中,若所述相似度大于或等于所述相似度阈值,确定判断结果为所述预设函数名称与所述模型生成名称一致,此时可以认为所述预设函数名称与所述模型生成名称差异较小,无需基于所述模型生成名称针对所述预设函数名称进行推荐和纠错,可以继续使用所述函数代码当前的所述预设函数名称。
[0137]
可选地,在判断结果指示所述预设函数名称与所述模型生成名称一致的情况下,可以向提交所述源代码文件的用户发送判断结果,以便所述用户获知所述函数代码当前的所述预设函数名称准确度高,可以继续使用所述预设函数名称。
[0138]
请参阅图4,图4为本公开实施例提供的一种代码检测方法的过程示意图。如图4中所示,针对源代码文件进行预处理,得到函数代码和所述函数代码在所述源代码文件中的预设函数名称,以及所述函数代码转换成的通用代码片段,然后将所述通用代码片段输入
至预先训练好的函数名称生成模型,可以得到所述函数名称生成模型输出的模型生成名称,进而对所述预设函数名称和所述模型生成名称进行名称一致性判断,若判断结果指示所述预设函数名称与所述模型生成名称一致,可以告知提交所述源代码文件的用户所述预设函数名称准确度高,可以继续使用所述预设函数名称,若判断结果指示所述预设函数名称与所述模型生成名称不一致,可以向提交所述源代码文件的用户发送包括推荐名称的名称优化提示信息,这里,所述推荐名称为所述模型生成名称。
[0139]
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
[0140]
本公开实施例提供的代码检测方法,可以对源代码文件进行预处理,得到至少一段函数代码和所述函数代码在所述源代码文件中的预设函数名称,以及所述函数代码转换成的通用代码片段,进而将所述通用代码片段输入至预先训练好的函数名称生成模型,得到所述函数代码的模型生成名称,所述函数名称生成模型为根据多段样本函数代码及对应的样本函数名称训练得到的,从而针对所述预设函数名称以及所述模型生成名称进行名称一致性判断,在判断结果指示所述预设函数名称与所述模型生成名称不一致的情况下,针对所述预设函数名称进行名称优化提示。这样,针对源代码文件,通过对其进行预处理,可以增加通用代码片段的丰富性,提升语义丰富度,进而可以通过函数名称生成模型为其生成模型生成名称,在此过程中,可以提升模型对于函数代码的解析效果,提高模型生成名称的精度,并且可以自动地判断是否需要基于模型生成名称对函数代码当前的预设函数名称进行纠错和推荐,从而提升函数代码的名称准确性以及函数代码和其对应的函数名称之间的匹配度。
[0141]
进一步的,通过提升函数代码的名称准确性以及函数代码和其对应的函数名称之间的匹配度,可以提高函数名称的可读性和可理解性,进而可以提升基于函数名称对于函数代码的理解程度,从而有助于提高软件开发效率,降低软件的维护成本。
[0142]
基于同一发明构思,本公开实施例中还提供了与代码检测方法对应的代码检测装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述代码检测方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
[0143]
请参阅图5和图6,图5为本公开实施例提供的一种代码检测装置的示意图之一,图6为本公开实施例提供的一种代码检测装置的示意图之二。
[0144]
如图5中所示,本公开实施例提供的代码检测装置500包括:
[0145]
数据处理模块510,用于对源代码文件进行预处理,得到至少一段函数代码和所述函数代码在所述源代码文件中的预设函数名称,以及所述函数代码转换成的通用代码片段;
[0146]
名称生成模块520,用于将所述通用代码片段输入至预先训练好的函数名称生成模型,得到所述函数代码的模型生成名称,所述函数名称生成模型为根据多段样本函数代码及对应的样本函数名称训练得到的;
[0147]
名称判断模块530,用于针对所述预设函数名称以及所述模型生成名称进行名称一致性判断,在判断结果指示所述预设函数名称与所述模型生成名称不一致的情况下,针对所述预设函数名称进行名称优化提示。
[0148]
一种可选的实施方式中,所述数据处理模块510具体用于:
[0149]
从源代码文件中提取出至少一段函数代码和所述函数代码在所述源代码文件中的预设函数名称;
[0150]
对每段所述函数代码进行数据清洗处理,得到所述函数代码对应的通用代码片段;
[0151]
所述数据处理模块510在用于对每段所述函数代码进行数据清洗处理时,包括以下内容中的一项或多项:
[0152]
删除所述函数代码中的注释信息;删除所述函数代码中的预设符号;将所述函数代码中的变量名称拆分成单个字符串;将所述函数代码中的常量替换为单个字符串。
[0153]
一种可选的实施方式中,如图6中所示,所述装置还包括模型训练模块540,所述模型训练模块540用于:
[0154]
获取训练样本集,所述训练样本集包括多段样本函数代码以及每段所述样本函数代码对应的样本函数名称;
[0155]
针对每段所述样本函数代码,对所述样本函数代码进行数据清洗处理,得到所述样本函数代码对应的样本代码片段;
[0156]
基于所述样本代码片段和对应的所述样本函数名称对预先构建好的神经网络进行训练,将得到的满足训练截止条件的模型作为函数名称生成模型,所述预先构建好的神经网络包括具有标识符感知能力的统一预训练编解码网络。
[0157]
一种可选的实施方式中,所述模型训练模块540还用于:
[0158]
将所述样本函数名称拆分成单个字符串,得到转换后的所述样本函数名称;
[0159]
所述模型训练模块540在用于基于所述样本代码片段和对应的所述样本函数名称对预先构建好的神经网络进行训练,将得到的满足训练截止条件的模型作为函数名称生成模型时,具体用于:
[0160]
基于所述样本代码片段和对应的转换后的所述样本函数名称对预先构建好的神经网络进行训练,将得到的满足训练截止条件的模型作为函数名称生成模型。
[0161]
一种可选的实施方式中,所述模型训练模块540在用于基于所述样本代码片段和对应的所述样本函数名称对预先构建好的神经网络进行训练,将得到的满足训练截止条件的模型作为函数名称生成模型时,具体用于:
[0162]
将所述样本代码片段输入至预先构建好的神经网络,得到所述样本代码片段对应的训练生成名称;
[0163]
基于得到的所述训练生成名称和所述样本代码片段对应的所述样本函数名称,调整所述神经网络的网络参数,得到调整后的神经网络;
[0164]
针对调整后的神经网络,返回执行将所述样本代码片段输入至神经网络的步骤,直至所述神经网络满足训练截止条件,将训练完成的模型作为函数名称生成模型。
[0165]
一种可选的实施方式中,所述名称判断模块530具体用于:
[0166]
获取预设的相似度阈值;
[0167]
确定所述预设函数名称以及所述模型生成名称之间的相似度;
[0168]
在所述相似度小于所述相似度阈值的情况下,确定判断结果为所述预设函数名称与所述模型生成名称不一致,并针对所述预设函数名称进行名称优化提示。
[0169]
一种可选的实施方式中,所述名称判断模块530在用于在判断结果指示所述预设函数名称与所述模型生成名称不一致的情况下,针对所述预设函数名称进行名称优化提示时,具体用于:
[0170]
在判断结果指示所述预设函数名称与所述模型生成名称不一致的情况下,向提交所述源代码文件的用户发送包括推荐名称的名称优化提示信息,所述推荐名称为所述模型生成名称。
[0171]
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
[0172]
本公开实施例提供的代码检测装置,可以对源代码文件进行预处理,得到至少一段函数代码和所述函数代码在所述源代码文件中的预设函数名称,以及所述函数代码转换成的通用代码片段,进而将所述通用代码片段输入至预先训练好的函数名称生成模型,得到所述函数代码的模型生成名称,所述函数名称生成模型为根据多段样本函数代码及对应的样本函数名称训练得到的,从而针对所述预设函数名称以及所述模型生成名称进行名称一致性判断,在判断结果指示所述预设函数名称与所述模型生成名称不一致的情况下,针对所述预设函数名称进行名称优化提示。这样,针对源代码文件,通过对其进行预处理,可以增加通用代码片段的丰富性,提升语义丰富度,进而可以通过函数名称生成模型为其生成模型生成名称,在此过程中,可以提升模型对于函数代码的解析效果,提高模型生成名称的精度,并且可以自动地判断是否需要基于模型生成名称对函数代码当前的预设函数名称进行纠错和推荐,从而提升函数代码的名称准确性以及函数代码和其对应的函数名称之间的匹配度。
[0173]
进一步的,通过提升函数代码的名称准确性以及函数代码和其对应的函数名称之间的匹配度,可以提高函数名称的可读性和可理解性,进而可以提升基于函数名称对于函数代码的理解程度,从而有助于提高软件开发效率,降低软件的维护成本。
[0174]
对应于图1中的代码检测方法,本公开实施例还提供了一种电子设备700,如图7所示,为本公开实施例提供的电子设备700的结构示意图,包括:
[0175]
处理器710、存储器720、和总线730;存储器720用于存储执行指令,包括内存721和外部存储器722;这里的内存721也称内存储器,用于暂时存放处理器710中的运算数据,以及与硬盘等外部存储器722交换的数据,处理器710通过内存721与外部存储器722进行数据交换,当所述电子设备700运行时,所述处理器710与所述存储器720之间通过总线730通信,使得所述处理器710可以执行上述的代码检测方法的步骤。
[0176]
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的代码检测方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
[0177]
本公开实施例还提供一种计算机程序产品,该计算机程序产品包括有计算机指令,所述计算机指令被处理器执行时可以执行上述方法实施例中所述的代码检测方法的步骤,具体可参见上述方法实施例,在此不再赘述。
[0178]
其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(software development kit,sdk)
等等。
[0179]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的设备、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0180]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0181]
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0182]
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0183]
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献