yobo体育app官方下载-首页

咨询热线: 0838-80490290
yobo体育app官方下载有限公司 专注10年高精密机械零件加工
您的位置: 主页 > 新闻资讯 > 技术支持 >

学习发现和重构纷歧致的方法名

返回列表 来源:yobo体育app官方下载 发布日期:2021-10-31 22:09
 本文摘要:1、摘要为了保证代码的可读性并利便软件的维护,必须正确命名法式方法。特别是方法名必须与相应的方法实现一致。调试方法名在文献中仍然是一个重要的主题,其中种种方法分析大型数据集中方法名的共性,以检测纷歧致的方法名,并提出更好的方法名。 我们发现最先进的技术不会分析已实现的代码自己来评估一致性。因此,我们在分析方法名和方法代码之间的一致性的基础上提出了一种新的自动调试方法名的方法。 该方法使用了适应每个工件本质的深层特征表现技术。

yobo体育app官方下载

1、摘要为了保证代码的可读性并利便软件的维护,必须正确命名法式方法。特别是方法名必须与相应的方法实现一致。调试方法名在文献中仍然是一个重要的主题,其中种种方法分析大型数据集中方法名的共性,以检测纷歧致的方法名,并提出更好的方法名。

我们发现最先进的技术不会分析已实现的代码自己来评估一致性。因此,我们在分析方法名和方法代码之间的一致性的基础上提出了一种新的自动调试方法名的方法。

该方法使用了适应每个工件本质的深层特征表现技术。在凌驾 210 万个 Java 方法上的实验效果讲明,我们可以实现高达 15 个百分点的革新,在识别纷歧致的方法名称方面建设了 67.9%的 F1 怀抱的记载性能。

我们进一步证明我们的方法在建议全名方面的准确率高达 25%,而最先进的方法的准确率远远落伍于 1.1%。最后,我们陈诉了我们在野外项目的实时研究中乐成修正了 66 个纷歧致的方法名。

关键字:代码重构,方法名称纷歧致,深度学习,代码嵌入2、先容名字打开了语言的大门。在编程中,名称(即标识符)普遍存在于所有的法式观点中,好比类、方法和变量。

形貌性名称是被识别工具的直观特征,因此,正确的命名对于确保软件法式的可读性和可维护性是至关重要的,命名是编程中的关键运动之一。由 Johnson 举行的研究得出结论,标识符命名是法式员必须完成的最难题的任务。事实上,由于种种原因,开发人员经常会在法式中写出糟糕的名字(即纷歧致的名字),好比缺少一个好的同义词库,几个开发人员协作时气势派头冲突,以及不适当的代码克隆。方法名是开发人员明白法式或接口行为的直观而重要的信息。

因此,纷歧致的方法名会使法式更难明白和维护,甚至可能导致软件缺陷。糟糕的方法名称确实容易发生缺陷。作为对方法命名纷歧致问题水平的开端研究,我们观察了开发人员和用户在论坛和代码库上的帖子。

我们使用方法名和一类关键字(纷歧致、一致、误导性、不恰当、不正确、混淆、bug 和错误)的组合组合举行搜索,匹配 StackOverflow 中的相关问题,并在 GitHub 中提交日志。效果,我们发现了 5644 个问题和 183901 个提交。

此外,为了评估开发人员倾向于修复方法名的水平,我们观察了为实验收集的所有 430 个项目的更改历史:在 53731 次提交中,一个方法名被更改,而对应的主体代码没有任何更改。我们进一步跟踪了以后的变换,并注意到在 16%的情况下,变换是最终的效果。

这些发现讲明,开发人员确实在努力选择适当的方法名,通常是为了处置惩罚与代码上下文的一致性。在本文中,我们提出了一种新的自动方法来检测和重构纷歧致的方法名称。

我们的方法使用段落向量和卷积神经网络划分提取方法名称和工具的深度表现。然后,给定一个方法名称,我们盘算两组相似的名称:第一组对应于可以通过训练的方法名称模型识此外名称;第二组,另一方面,包罗其主体被努力识别为与输入方法主体相似的方法的名称。

如果两个荟萃在一定水平上相交(由阈值参数调优),则方法名称被识别为一致,否则纷歧致。当输入方法名称标志为纷歧致时,我们进一步使用第二组一致名称来建议新名称。

为了评估我们提出的方法,我们使用 2116,413 种训练数据方法和 2805 种测试数据名称更改的方法举行实验,这些方法是从 430 个开源 Java 项目中收集的。实验效果讲明,该方法在识别纷歧致的方法名方面可到达 F1 -丈量值的 67.9%,比现在的技术水平提高了约 15 个百分点。此外,该方法在建议第一个子点上到达 34-50%的准确性,在对纷歧致的方法名称提出准确的全名上到达 16-25%的准确性,再次凌驾了最先进的水平。

最后,我们陈诉了我们的方法如何资助开发人员在野外现场研究中修复 10 个项目中 66 个纷歧致的方法名称。3、配景知识本节简要形貌了神经网络领域的三种技术,即 Word2Vec、段落向量和卷积神经网络。我们的方法依赖于这些技术来实现两个目的:(1)将方法名称和工具中的令牌嵌入到数值向量形式中;(2)提取特征表现以准确识别相似的方法名称和工具。

1)段落向量:段落向量是一种无监视的算法,它从可变长度的文本片段中学习牢固长度的特征表现,例如句子。这种技术是为了克服已知的(1)失去单词顺序和(2)忽略单词语义的单词特征的局限性而提出的。最近的研究提供了证据,讲明段落向量优于其他最先进的技术文本表现,并能有效地捕捉单词和句子之间的语义相似性。

在我们的事情中,我们使用段落向量来训练一个模型来盘算方法名称之间的相似性(将方法名称的序列作为句子)。我们期望这个模型不仅思量词法相似性,而且思量语义相似性: 例如,函数名包罗 Object,而且有 Object 应该被归类为相似的名称,因为它们都形貌了代码实现的功效,以检查荟萃是否包罗放置在参数中的特定工具。在本文后面的部门中,我们详细先容了如何在我们的方法中处置惩罚方法名称来输入段落向量算法。1. 卷积神经网络(CNNs):CNNs 是多层人工神经网络[33]的生物启发变体。

在图像识别领域,CNNs 最初开发并被证明是有效的,它在处置惩罚种种 NLP 任务方面获得了广泛的应用。对于文天职类,这些深度学习模型取得了显著的效果,通过治理捕捉句子的语义举行相关的相似性盘算。最近,一些研究提供了履历证据来支持软件的自然性。

因此,在自然性假设的启发下,我们将源代码,特别是方法体,视为用自然语言编写的文档,并将 CNN 应用于代码嵌入目的。目的是生成一个模型,该模型将允许准确识别类似的方法代码。Bui 等人最近的一项事情提供了开端效果,讲明 CNN 的一些变体甚至有效地捕捉代码语义,从而允许跨编程语言的代码实现的准确分类。

在本研究中,我们使用的是 CNNs 的详细实现 LeNet5,它由下层和上层组成(架构见图 1)。图 1. 我们向量化方法体中使用的 CNNs 架构,其中 C1 和 C2 划分为卷积层,S1 和 S2 划分为子采样层。1. Word2Vec:将方法体的令牌输入 CNNs 时,需要将令牌转换为数值向量。

否则,如果使用单热编码的话,CNN 输入层的巨细会太大,或者如果使用数字编码的话,解释它的输出会被扭曲(例如,为每个令牌分配一个单一的整数值)。机械学习社区经常使用向量表现单词标志。这有两个利益:(1)大量的(唯一的)令牌可以表现为牢固宽度的向量形式(降维),(2)类似的令牌可以定位在一个向量空间中,这样类似的令牌可以以类似的方式处置惩罚 CNN。

我们的方法使用 Word2Vec 来嵌入方法体的标志。Word2Vec 是一种将令牌编码为 n 维向量的技术。它基本上是一个两层的神经网络,专门处置惩罚令牌序列。

神经网络以一组令牌序列(即句子)作为输入,并在令牌和数值向量之间生成映射。该技术不仅将符号嵌入数值向量中,而且还将语义上相似的单词放置在向量空间的相邻位置。

4、研究方法本节先容了调试纷歧致方法名称的方法。如图 2 所示,它涉及两个阶段:(1)培训和(2)识别和建议。在训练阶段,以现实世界项目中的大量方法为输入,划分使用段落向量作为方法名称,Word2Vec+CNNs 作为方法体嵌入数值向量(以下简称向量。

最后,发生了两个差别的向量空间,并将在下一阶段加以使用。因此,训练阶段的目的是将相似的方法名称和物体放置在每个向量空间中的相邻位置。

图 2. 检查和重构纷歧致的方法名的方法概述识别和建议阶段通过比力在名称向量空间中靠近的一组方法名称与在体向量空间中靠近的一组方法名称之间的重叠来确定给定方法是否具有与其主体一致的名称。当重叠为 0 时,名称被认为与正文代码纷歧致,并建议使用替代一致的名称。A. 数据预处置惩罚该步骤旨在准备将给定方法的原始数据输入到我们方法的事情流程中。

我们思量代码的文本表现,并将它们转换为适合于第二节中形貌的深度表现学习技术的令牌(即基本数据单元。鉴于方法名称和主体具有差别的形状(即名称是关于自然语言形貌的,而主体则集中在算法的代码实现上),我们建议使用适用于每种情况的标志化技术:方法名称标志化:凭据驼峰巨细写和下划线命名约定,将方法名称剖析为子标志序列,获得的子标志接纳小写形式。该计谋已在前期研究中被证实有效。

例如,方法名 findField 和 find_field 被标志为相同的序列[find,field],其中 find 和 field 划分是名称的第一个子标志和第二个子标志。方法主体标志化:方法主体通过遵循我们在前面的研究中提出的代码剖析方法转换为文本令牌序列。该方法包罗用深度优先搜索算法遍历方法主体代码的抽象语法树(AST),以收集两种令牌:AST 节点类型和原始代码令牌。

B. 训练这一阶段接纳代码语料库中方法名称和主体的标志,以发生两个数字向量空间,一方面用于盘算方法名称之间的相似性,另一方面用于最终识别纷歧致的名称并提出适当的名称,接纳无监视学习和懒惰学习的思想来嵌入方法名称和主体。方法名称的令牌序列通过段落向量技术嵌入到向量中,因为方法名称的令牌序列类似于形貌方法的句子。相反,方法主体中的所有令牌首先使用 Word2Vec 嵌入到向量中。然后将嵌入的令牌向量输入 CNN,将整个方法体嵌入到一个向量中,该向量将用于将每个方法体表现为一个数值向量。

1. 方法体的令牌嵌入:如图 1 所示,方法体的令牌嵌入到单个的数字向量中,再将其送入 CNN。为此,构建令牌嵌入模型为:TVB<—EW(TB)。

其中 EW 是令牌嵌入函数(即本例中的 Word2Vec),将方法体令牌序列 TB 的训练集作为输入。然后输出一个令牌映射函数 TVB: TWB—> VBW,其中 TWB 是方法体令牌的词汇表,而 VBW 是将令牌嵌入 TWB 的向量空间。

在标志嵌入之后,方法体最终表现为二维数值向量。假设给定方法体 b 由一系列令牌 Tb = (t1, t2, t3,…)表现。

,其中 ti, TWB, Vb 是对应于 Tb 的二维数值向量。那么 Vb 的推论如下:Vb ← l(Tb, TVB)。其中 l 是一个函数,它凭据映射函数 TVB 将方法体的令牌序列转换为二维数值向量。

yobo体育app官方下载

因此,Vb = (v1, v2, v3,…),vk)∈VB,其中 vi←TVB(ti),VB 是一个二维向量荟萃。由于方法体的 token 序列可能有差别的长度(即每个方法体的 k 可能差别),因此必须填充相应的向量,以切合 CNNs 中牢固宽度的输入层。1. 将方法名称和主体嵌入到向量中:通过将方法名称和主体嵌入到相应的数值向量中来构建向量空间。

对于方法名,我们将子标志序列(即每个方法名一个序列)提供应段落嵌入技术。详细来说,我们使用了具有漫衍式内存(PV-DM)技术的段落向量,它将令牌序列嵌入到向量空间中:NVname←EPV (TN)。其中 EPV 为段落向量嵌入函数(即 PV-DM),将方法名子标志序列 TN 的训练集作为输入。输出是一个名称映射函数 NVname: TN—>VN,其中 VN 是用于方法名称的嵌入向量空间。

这一步类似于经典的词嵌入,只是映射关系差别。段落向量将标志序列嵌入到向量中,而 Word2Vec 将标志嵌入到向量中。对于方法体,我们需要另一个映射函数,其中每个方法体的输入是一个二维数值向量。输出是一个对应于实体的向量。

该映射函数为:VVbody ← EBV (VB)。我们的方法使用 CNN 作为嵌入函数 EBV。图 1 显示了本文方法使用的 CNNs 的架构。

输入为方法体的二维数值向量。两对卷积层和子采样层用于捕捉方法的局部特征和淘汰输入数据的维数。

从第二层到下一层的网络层是完全连通的,可以将卷积层和子采样层捕捉到的所有局部特征联合起来。C. 识别和建议这个阶段包罗两个子步骤。

首先,该方法接纳一个给定的方法作为纷歧致识此外查询。通过使用两个向量空间(即 VN 和 V'B)和两个嵌入函数(即 NVname 和 NVbody),识别给定方法的名称是否与其主体一致。第二,如果这个名称纷歧致,该方法会从类似实现的方法的名称中为它建议可能一致的名称。

1. 纷歧致性识别:对于给定方法 mi,取其名称(ni)和体(bi)的一组邻域向量(即:adj(ni)和 adj(bi))。检索到与 adj(ni)和 adj(bi)中的向量对应的实际名称(即 name())后,我们可以盘算两个名称集的交集为 Cfull:Cfull = name(adj(ni)) ∩ name(adj(bi)),如果 Cfull 为空,则认为 bi 名 ni 纷歧致。

可是,Cfull 过于严格,它依赖于准确匹配。换句话说,两个名称集之间应该存在相同的字符序列。

纵然它们有相似的查找行为,Cfull 也无法识别这种关系。在 Java 命名约定中,第一个子标志通常指示方法的关键行为。因此,如果给定方法的关键行为与具有相似主体的其他方法相似,我们可以认为名称是一致的。

因此,我们放宽了一致性的条件。我们不比力全名,而是取两个名称集中每个名称的第一个子标志,以获得如下交集:Crelaxed = f irst(name(adj(ni))) ∩ f irst(name(adj(bi)))。

算法 1 详细形貌了检查方法的名称 ni 与其主体 bi 是否一致的准确例程。我们的方法盘算一个给定方法的余弦相似度来寻找相似的方法。在检索名称 ni 和主体 bi 的嵌入向量之后(参见第 3 行和第 4 行),该方法在各自的向量空间中查找方法名称和主体的顶部 k 个相邻向量(参见第 6 行和第 10 行)。由于阈值 k 可以影响识此外性能,我们在第 V 节中形貌的评估包罗一个 k 值差别的实验。

1. 我们的方法通过提供相似名称的排序列表(参见第 18 行),为给定的方法提供新名称,并提供如下四种排序计谋:R1:这种计谋完全依赖于方法主体之间的相似性。相似的方法体(Namesbiadj)的名字是凭据与给定方法体的相似性来排序的(介于 V'b 和 BodyVadj 之间)。R2:这种计谋首先对 Namesbiadj 中的相同名称举行分组,因为可能存在重复。然后,它凭据相关组的巨细对差别的名称举行排名。

基于方法主体与 R1 之间的相似性,关联被打破。R3:与 R2 类似,这个计谋将 Namesbiadj 中的相同名称分组。

然后,该计谋盘算每个组与 bi 的平均相似度,并凭据平均相似度对组举行排序,但不思量组巨细。R4:为了制止在计谋 R3 中拥有规模小但排名高的组,该计谋最终通过将所有巨细为 1 的组降级到最低位置来重新排列 R3 中发生的所有组。5、实验以及分析通过种种实验对该方法举行了实证验证。在形貌效果和结论之前,我们提出了研究问题和数据收集以及详细的参数设置在实施,以利便复制。

1)研究问题:为了评估该方法,我们建议观察以下研究问题:RQ1:该方法如何有效识别纷歧致的方法名称?RQ2:该方法是否可以提供准确的方法名称?RQ3:在性能方面,这种方法与最先进的方法相好比何?RQ4:在多大水平上,在野外应用这种方法会发生开发人员可以接受的调试建议。2)数据收集:我们从 Apache、Spring、Hibernate、谷歌四个差别社区的开源项目中收集培训和测试数据。我们思量至少有 100 次提交的 430 个 Java 项目,以确保它们获得了良好的维护。

以确保没有数据泄漏之间的训练和测试数据,人为地提高我们的方法的性能,我们从训练数据消除所有方法相关的测试数据(例如,训练数据中的 2,116,413 种方法与测试数据中的 2,805 种方法没有相同的实例)。我们的测试数据包罗每个方法的名称,我们有两个版本:bug 名称和修复后的名称。要构建 oracle,我们需要两个荟萃,一个用于纷歧致的类,另一个用于一致的类。我们将测试数据随机分为两组。

在第一组中,我们只思量方法名的 bug 版本,并将它们标志为纷歧致的。在第二组中,我们只思量牢固的版本,并将它们标志为一致的。

A. RQ1:纷歧致识此外有效性由于我们方法的第一个目的是识别纷歧致的方法名称,所以我们检查我们的方法是否有效地识别了名称纷歧致的方法。我们用收集到的训练数据对模型举行训练,并将其应用于分散的测试数据,该测试数据的收集在 IV-2 节中形貌。思量到识此外性能取决于表现相邻向量荟萃巨细的阈值 k(算法 1 中的第 6 行和第 10 行),我们将 k 设为 1,5 和 n×10,n∈[1,10]。

表 1 给出了性能的实验效果。由于空间的限制,我们将 k 的变化值设置为 40(而不是 100)。总的来说,我们的方法获得了从 50.8%到 60.9%的精度指标(对于给出的效果),而对于纷歧致的种别,f1 丈量到达 67.9%。

特别是,当 k=1 时(即思量最相邻的单个向量),该方法获得了最高的性能。总的趋势确实是,随着 k 的增加,性能下降。表 1. 纷歧致识此外评估效果因为 k 决议了从训练数据中名称和体的向量空间中检索相似方法的数量,所以 k 值越大,非空交集的概率就越大。

因此,纷歧致类的召回率随着 k 的增加而降低。相反,k 值越高,一致性类的召回率越高。总的来说,识别纷歧致的方法名称的方法可以举行调整,以满足从业人员的需求。

当尺度是识别尽可能多的纷歧致的名称时,k 应该设置为一个较低的值。B. RQ2:方法名的准确性建议本实验旨在评估我们的方法在识别纷歧致的名字时提出新名字的性能。建议的名称按可指定的排名计谋(如中所述的 R1、R2、R3 或 R4)举行排名。

前的研究比力了建议名称和 oracle 或令牌集的第一个令牌,但没有思量令牌排序。为了确保公正和全面的评估,我们思量三种差别的场景来评估我们的方法的性能。

我们执行差别的实验,改变 k 值。对于这些实验,该方法为所有标识为纷歧致的方法发生新的名称(即,真阳性+假阳性)。因此,效果包罗假阳性的体现(即,名称已经是一致的)。

yobo体育app官方下载

我们凭据建议名称的数量(改变阈值 thr)盘算性能。排名战略 R1, k 是设置只 1 或 5 因为更高的值不会影响效果当刺= 1 或 5(注意,R1 生产相同数量的建议名称与 k)。对于其他排名计谋,k 是设置为 10,20、30、40 到大量的建议名称,可以聚合(按排名计谋事情)。

从表 2 中列出的 T1 效果可以看出,我们的方法很有可能提示出与识别出的排序计谋纷歧致的名字差别的名字,纵然 k 很高(当 thr=1 时大于 90%,当 thr=5 时大于 60%)。当匹配第一个令牌(T2 为 cf 的效果)和全名(T3 为 cf 的效果)时,无论 k 值如何,排名计谋 R4 的准确率都略高于其他计谋,其准确率为 40%。

thr=5 比 thr=1 更有可能找到一致的名称。k=10 时,排序计谋 R2 和 R3 的性能最好,而排序计谋 R4 在 k=20, thr=5, k=40, thr=1 时性能最好。表 2. 建议方法名的准确性与四个排序计谋上述效果讲明:(1)排名计谋 R2, R3、R4 和执行比 R1 但他们需要更多的候选人,(2)较高的 k 值的准确性并不会增加名字建议,和(3)更多的一些建议的名称(例如,更高的刺值)将提高我们的方法的准确性,但用户需要查找更多的名字。

C. RQ3:与最先进的技术举行比力我们将我们的方法与文献中两种最先进的方法举行比力,这两种方法基于 ngram 模型和卷积注意网络(CAN)模型。后者包罗两个子模型:conv attention 和 copy attention,前者只使用预先训练的词汇,后者可以复制输入向量的标志(即方法体中的标志)。

之所以选择这些技术,是因为它们是用于方法名调试的最新方法。由于 Suzuki 等人提出的 n-gram 模型方法不能建议使用全名,甚至不能使用方法的第一个标志,我们就纷歧致名称识此外性能与它们举行比力。

另一方面,CAN 模型没有明确标识名称纷歧致。相反,模型建议为任何给定的方法命名。

因此,在这个实验中,我们制作了 CAN 模型,而且我们的方法为所有测试数据建议了名称(2805 个 bug 方法名称)。表 3 为与 n-gram 模型的对比效果。

虽然 n-gram 模型的性能在 51.5-54.2%的规模内,所有怀抱,我们的方法优于模型时,k=1 和 5。当 k=1 时,提高了 33 个百分点。特别是,我们的方法使 f1 指标提高了 15 个百分点。

表 3. 识别纷歧致的方法名称与 N-GRAM 模型的比力效果为了将我们的方法与 CAN 模型举行比力,我们提出了两个评估。第一种是作者在论文中提出的评价计谋。第二次评估是基于我们已经为 RQ2 探索过的计谋。

表 4 显示了基于每个子标志基础怀抱的性能,这是作者最初用来表现 CAN 模型性能的评估怀抱。这个指标预计了方法名的子标志在多大水平上可以被正确建议,而不思量它们在方法名中的顺序。表 4. 比力了 CAN 模型和我们基于每个子令牌准则的方法先进的技术直接训练神经网络分类器举行识别或建议通过使用一组训练数据,而我们的方法首先将方法名称和身体转换成向量,使用神经网络,然后搜索相似向量通过盘算它们之间的距离。

从这个意义上说,我们的方法是基于无监视学习实现的。总的来说,效果讲明在向量空间中查找相似的方法对于识别和建议都比其他技术更有效。D. RQ4:应用研究为了观察我们的方法在调试纷歧致的方法名(RQ4)方面的实用性,我们对活跃的软件项目举行了实时研究:我们从我们的方法中提交重新命名建议的拉请求,并评估接受率。

在本实验中,我们随机抽取 10%的训练数据作为测试数据。实际上,为以前的实验收集的标志测试数据代表了开发人员调试方法名的情况。剩下的 90%的方法名现在组成了这个阶段的训练数据。

我们将这个版本的方法应用于目的受试者,以确定他们是否有纷歧致的名称(凭据之前的实验效果使用 k=20)。总的来说,测试集中 211642 种方法中有 4430 种方法被我们的方法识别为纷歧致的。

思量到我们不能用数千个 pull 请求来给项目维护者发垃圾邮件,我们随机选择了 100 个确定的纷歧致方法的案例。然后,我们为这 100 个方法收集建议名称的排名列表:我们在排名计谋 R4 中使用 thr=5,因为这些参数显示全名建议(T3)的最佳性能。从每个排序的建议名称列表中,我们选择排名第一的名称,并准备一个补丁,作为拉请求提交到相关的项目存储库。

如表 5 所示,开发人员同意合并 pull 请求,以重命名 100 个方法中的 40 个。26 重命名建议已经被开发人员验证和批准(基于开发人员的回复),可是 pull 请求还没有被合并(停止提交日期),因为一些项目系统地应用单元测试,并在接受外部更改到主分支之前完成审查任务。在革新我们建议的名称后,四个纷歧致的方法名称也获得了修复。

有趣的是,一个开发人员使用我们的建议作为重命名模式来修复 6 个类似的情况,而不是我们在拉请求中提交的情况。此外,一些开发人员接待我们对纷歧致的方法名称提出的建议,并表现有兴趣从我们的方法中应用更多的建议,因为它似乎提供了比当前名称更有意义的名称。图 5. 现场学习的效果6、总结讨论1.基于语法和语义信息的命名:我们的方法是基于类似的方法实现可能与类似的方法名称相关联的假设。然而,相似性可能有几种差别的界说。

虽然我们的方法依赖于方法体的语法相似性,但我们可以使用动态信息(例如,执行跟踪)来比力差别的方法实现,作为检测语义(即 type-4)代码克隆的实验。然而,获取动态信息是不行扩展的。测试用例并不总是可用的,运行 concolic 执行仍然是昂贵的。虽然我们可以使用代码到代码的搜索技术,但它们的精度不足以检测纷歧致的名称。

因此,在我们的方法中,我们只使用静态和语法信息,并依赖已被证明能够有效捕捉语义的深度学习表现,纵然是代码。2.有效性的威胁:对外部有效性的威胁存在于训练数据中,因为不行能绝对保证训练数据中的所有方法都有一致的名称。为相识决这一威胁,我们从维护良好、声誉良好的开源项目中收集培训数据。只管项目的数量可能不能代表整个世界,但它是已揭晓的关于调试方法名称的文献中使用的最大的数据集。

我们的现场研究进一步证明,训练集足以建设一个良好的模型。对外部有效性的其他威胁是方法名中的拼写错误和缩写,它们会滋扰方法名的嵌入和建议。

方法名是代码可读性和可维护性的关键,可是给方法起一个合适的名字并不是一件容易的事情。因此,许多方法的名称纷歧致,会影响法式的可读性和可维护性,甚至导致一些缺陷。为了淘汰剖析纷歧致方法名的人工事情,我们提出了一种新的方法,通过使用深度学习技术的类似方法来调试纷歧致的方法名。实验效果讲明,该方法在识别纷歧致的方法名方面的性能到达了 f1 -丈量值的 67.9%,比现在最先进的方法提高了约 15 个百分点。

在为纷歧致的方法名建议适当的第一个子标志和全名时,它划分实现了 34-50%和 16-25%的准确性,也优于现在最先进的方法。我们进一步陈诉说,我们的方法资助开发人员修复了 66 个纷歧致的方法名。

致谢本文由南京大学软件学院 2021 级硕士研究生石孟雨翻译转述。


本文关键词:学习,发现,和,yobo体育app官方下载,重构,纷歧,致,的,方法名,方,、

本文来源:yobo体育app官方下载-www.usq.net.cn

【相关推荐】

全国服务热线

0838-80490290