源代码的AI建模理解任务一直在取得重大进展,并正在生产开发管道中采用。然而,可靠性问题,特别是模型是否实际上是学习源代码的任务相关方面,正在提出。虽然最近的模型探测方法已经观察到许多用于代码模型中的信号意识缺乏信号意识,即,未捕获任务相关信号的模型,它们不提供解决问题的解决方案。在本文中,我们探索了数据驱动的方法来提高模型的模型“信号意识:1)我们将SE概念与课程学习的AI技术相结合; 2)通过自定义Delta调试以生成简化的信号保留程序,将它们纳入AI模型,将SE辅助纳入AI模型。通过我们的技术,我们在模型信号意识方面取得了高达4.8倍的提高。使用代码复杂性的概念,我们进一步从数据集的角度介绍了一种新颖的学习内省方法。
translated by 谷歌翻译
在源代码中自动定位易受攻击的陈述至关重要,以确保软件安全性和缓解开发人员的调试工作。这在当今软件生态系统中变得更加重要,其中易受攻击的代码可以在像GitHub这样的软件存储库中轻松且无意中流动。在这类数百万的代码行中,传统的静态和动态方法争取缩放。虽然基于机器学习的方法在这样的设置中看起来很有希望,但大多数工作都在较高的粒度下检测到脆弱的代码 - 在方法或文件级别。因此,开发人员仍然需要检查大量代码以找到需要修复的弱势陈述。本文提出了一种新的集合学习方法来定位脆弱的陈述。我们的模型结合了基于图形的基于序列的神经网络,以成功捕获程序图的本地和全局上下文,并有效地了解代码语义和易受攻击的模式。为了研究天鹅绒的效果,我们使用了一个现成的合成数据集和最近发布的现实世界数据集。在静态分析设置中,未提前检测到易受攻击功能,Velvet可以实现4.5倍的性能,而不是真实世界数据上的基线静态分析仪。对于孤立的漏洞本地化任务,在我们假设特定漏洞声明未知的同时知道函数的漏洞,我们将天鹅绒与几个神经网络进行比较,这些内部网络也参加了本地和全局代码背景。天鹅绒分别达到99.6%和43.6%的13.6%,分别在合成数据和现实世界数据上实现了高精度,优于基线深度学习模型5.3-29.0%。
translated by 谷歌翻译
Machine Learning for Source Code (ML4Code) is an active research field in which extensive experimentation is needed to discover how to best use source code's richly structured information. With this in mind, we introduce JEMMA, an Extensible Java Dataset for ML4Code Applications, which is a large-scale, diverse, and high-quality dataset targeted at ML4Code. Our goal with JEMMA is to lower the barrier to entry in ML4Code by providing the building blocks to experiment with source code models and tasks. JEMMA comes with a considerable amount of pre-processed information such as metadata, representations (e.g., code tokens, ASTs, graphs), and several properties (e.g., metrics, static analysis results) for 50,000 Java projects from the 50KC dataset, with over 1.2 million classes and over 8 million methods. JEMMA is also extensible allowing users to add new properties and representations to the dataset, and evaluate tasks on them. Thus, JEMMA becomes a workbench that researchers can use to experiment with novel representations and tasks operating on source code. To demonstrate the utility of the dataset, we also report results from two empirical studies on our data, ultimately showing that significant work lies ahead in the design of context-aware source code models that can reason over a broader network of source code entities in a software project, the very task that JEMMA is designed to help with.
translated by 谷歌翻译
在本文中,我们解决了深入学习的软件漏洞自动修复问题。数据驱动漏洞修复的主要问题是已知确认漏洞的少数现有数据集仅由几千例组成。然而,培训深度学习模型通常需要数十万例的例子。在这项工作中,我们利用了错误修复任务和漏洞修复任务的直觉相关,并且可以传输来自错误修复的知识可以传输到修复漏洞。在机器学习界中,这种技术称为转移学习。在本文中,我们提出了一种修复名为Vreepair的安全漏洞的方法,该方法是基于转移学习。 vreepair首先在大型错误修复语料库上培训,然后在漏洞修复数据集上调整,这是一个较小的数量级。在我们的实验中,我们表明,仅在错误修复语料库上培训的模型可能已经修复了一些漏洞。然后,我们证明转移学习改善了修复易受攻击的C功能的能力。我们还表明,转移学习模型比具有去噪任务训练的模型更好,并在漏洞固定任务上进行微调。总而言之,本文表明,与在小型数据集上的学习相比,转移学习适用于修复C中的安全漏洞。
translated by 谷歌翻译
深度学习方法的最新突破引发了人们对基于学习的错误探测器的兴趣。与传统的静态分析工具相比,这些错误检测器是直接从数据中学到的,因此更容易创建。另一方面,它们很难训练,需要大量数据,而这些数据不容易获得。在本文中,我们提出了一种称为Meta Bug检测的新方法,该方法比现有基于学习的错误探测器具有三个至关重要的优势:Bug-Type通用(即,能够捕获在培训期间完全没有观察到的错误类型),可以自我解释(即能够在没有任何外部可解释方法的情况下解释其自身的预测)和样本有效(即,比标准错误检测器所需的培训数据要少得多)。我们的广泛评估表明,我们的元错误检测器(MBD)有效地捕获了各种错误,包括NULL指针解除,阵列索引外部漏洞,文件句柄泄漏甚至是并发程序中的数据竞赛;在此过程中,MBD还大大优于几个值得注意的基线,包括Facebook推断,一种著名的静态分析工具和FICS,即最新的异常检测方法。
translated by 谷歌翻译
深层神经网络(DNN)越来越多地用于软件工程和代码智能任务。这些是强大的工具,能够通过数百万参数从大型数据集中学习高度概括的模式。同时,它们的大容量可以使他们容易记住数据点。最近的工作表明,当训练数据集嘈杂,涉及许多模棱两可或可疑的样本时,记忆风险特别强烈表现出来,而记忆是唯一的追索权。本文的目的是评估和比较神经代码智能模型中的记忆和概括程度。它旨在提供有关记忆如何影响神经模型在代码智能系统中的学习行为的见解。为了观察模型中的记忆程度,我们为原始训练数据集增加了随机噪声,并使用各种指标来量化噪声对训练和测试各个方面的影响。我们根据Java,Python和Ruby Codebase评估了几种最先进的神经代码智能模型和基准。我们的结果突出了重要的风险:数百万可训练的参数允许神经网络记住任何包括嘈杂数据,并提供错误的概括感。我们观察到所有模型都表现出某些形式的记忆。在大多数代码智能任务中,这可能会很麻烦,因为它们依赖于相当容易发生噪声和重复性数据源,例如GitHub的代码。据我们所知,我们提供了第一个研究,以量化软件工程和代码智能系统领域的记忆效应。这项工作提高了人们的意识,并为训练神经模型的重要问题提供了新的见解,这些问题通常被软件工程研究人员忽略。
translated by 谷歌翻译
大多数自动化软件测试任务可以从测试用例的抽象表示中受益。传统上,这是通过基于测试案例的代码覆盖范围来完成的。规范级别的标准可以替换代码覆盖范围以更好地表示测试用例的行为,但通常不具有成本效益。在本文中,我们假设测试用例的执行痕迹可以使其在自动测试任务中抽象其行为的好选择。我们提出了一种新颖的嵌入方法Test2VEC,该方法将测试执行映射到潜在空间。我们在测试案例的优先级(TP)任务中评估了此表示形式。我们的默认TP方法基于嵌入式向量与历史失败测试向量的相似性。我们还根据测试向量的多样性研究了一种替代方案。最后,我们提出了一种决定给定测试套件的方法,以决定选择哪种TP。该实验基于几个真实和种子故障,具有超过一百万个执行痕迹。结果表明,就第一个失败测试案例(FFR)的中位数等级而言,我们提议的TP将最佳替代品提高了41.80%。就中位数APFD和中位数归一化FFR而言,它的表现优于传统代码覆盖范围的方法25.05%和59.25%。
translated by 谷歌翻译
随着预先训练模型的巨大成功,Pretrain-Then-Finetune范式已被广泛采用下游任务,以获得源代码的理解。但是,与昂贵的培训从头开始培训,如何将预先训练的模型从划痕进行有效地调整到新任务的训练模型尚未完全探索。在本文中,我们提出了一种桥接预先训练的模型和与代码相关任务的方法。我们利用语义保留的转换来丰富下游数据分集,并帮助预先接受的模型学习语义特征不变于这些语义上等效的转换。此外,我们介绍课程学习以易于努力的方式组织转换的数据,以微调现有的预先训练的模型。我们将我们的方法应用于一系列预先训练的型号,它们在源代码理解的任务中显着优于最先进的模型,例如算法分类,代码克隆检测和代码搜索。我们的实验甚至表明,在没有重量训练的代码数据上,自然语言预先训练的模型罗伯塔微调我们的轻质方法可以优于或竞争现有的代码,在上述任务中进行微调,如Codebert和Codebert和GraphCodebert。这一发现表明,代码预训练模型中仍有很大的改进空间。
translated by 谷歌翻译
深度学习最近在程序分析任务(例如错误检测)方面取得了最初的成功。缺乏真正的错误,大多数现有的作品通过将合成错误注入正确的程序来构建培训和测试数据。尽管达到了高测试精度(例如90%),但发现所得的错误检测器在实践中令人惊讶地无法使用,即用于扫描真实软件存储库时<10%的精度。在这项工作中,我们认为这种巨大的性能差异是由分布变化引起的,即实际错误分布与用于训练和评估检测器的合成错误分布之间的基本不匹配。为了应对这一关键挑战,我们建议在两个阶段训练一个错误检测器,首先是合成错误分布,以使模型适应错误检测域,然后在真实的错误分布上调整模型,以将模型驱动到真实分布。在这两个阶段中,我们利用多任务层次结构,焦点损失和对比度学习来进一步提高性能。我们对三种经过广泛研究的错误类型进行了广泛的评估,为此,我们仔细设计了新的数据集,以捕获真正的错误分布。结果表明,我们的方法实际上是有效的,并且可以成功地减轻分配的转变:我们学到的检测器在测试集和最新版本的开源存储库中都表现出色。我们的代码,数据集和模型可在https://github.com/eth-sri/learning-real-bug-detector上公开获取。
translated by 谷歌翻译
The International Workshop on Reading Music Systems (WoRMS) is a workshop that tries to connect researchers who develop systems for reading music, such as in the field of Optical Music Recognition, with other researchers and practitioners that could benefit from such systems, like librarians or musicologists. The relevant topics of interest for the workshop include, but are not limited to: Music reading systems; Optical music recognition; Datasets and performance evaluation; Image processing on music scores; Writer identification; Authoring, editing, storing and presentation systems for music scores; Multi-modal systems; Novel input-methods for music to produce written music; Web-based Music Information Retrieval services; Applications and projects; Use-cases related to written music. These are the proceedings of the 3rd International Workshop on Reading Music Systems, held in Alicante on the 23rd of July 2021.
translated by 谷歌翻译
在这项工作中,我们审查并评估了一个具有公开可用和广泛使用的数据集的深度学习知识追踪(DLKT)模型,以及学习编程的新型学生数据集。评估的DLKT模型已重新实现,用于评估先前报告的结果的可重复性和可复制性。我们测试在与模型的主要架构上独立于模型的比较模型中找到的不同输入和输出层变化,以及在某些研究中隐含地和明确地使用的不同最大尝试计数选项。几个指标用于反映评估知识追踪模型的质量。评估的知识追踪模型包括Vanilla-DKT,两个长短期内存深度知识跟踪(LSTM-DKT)变体,两个动态键值存储器网络(DKVMN)变体,以及自我细致的知识跟踪(SAKT)。我们评估Logistic回归,贝叶斯知识跟踪(BKT)和简单的非学习模型作为基准。我们的结果表明,DLKT模型一般优于非DLKT模型,DLKT模型之间的相对差异是微妙的,并且在数据集之间经常变化。我们的研究结果还表明,通常的纯模型,例如平均预测,比更复杂的知识追踪模型更好地表现出更好的性能,尤其是在准确性方面。此外,我们的公制和封路数据分析显示,用于选择最佳模型的度量标准对模型的性能有明显的影响,并且该度量选择可以影响模型排名。我们还研究了输入和输出层变化的影响,过滤出长期尝试序列,以及随机性和硬件等非模型属性。最后,我们讨论模型性能可重量和相关问题。我们的模型实现,评估代码和数据作为本工作的一部分发布。
translated by 谷歌翻译
反向工程师受益于二进制中的标识符(例如函数名称)的存在,但通常将其删除以释放。训练机器学习模型自动预测功能名称是有希望的,但从根本上讲很难:与自然语言中的单词不同,大多数函数名称仅出现一次。在本文中,我们通过引入极端功能标签(XFL)来解决此问题,这是一种极端的多标签学习方法,可为二进制功能选择适当的标签。 XFL将函数名称分为代币,将每个功能视为具有自然语言标记文本的问题的信息标签。我们将二进制代码的语义与通过dexter进行标签,这是一种新颖的函数,将基于静态分析的特征与来自呼叫图的本地上下文和整个二进制的全局上下文相结合。我们证明,XFL/Dexter在Debian Project的10,047个二进制数据集上的功能标签上优于最新技术,获得了83.5%的精度。我们还研究了XFL与文献中的替代二进制嵌入的组合,并表明Dexter始终为这项任务做得最好。结果,我们证明了二进制函数标记可以通过多标签学习有效地措辞,并且二进制函数嵌入得益于包括明确的语义特征。
translated by 谷歌翻译
Deep learning (DL) models of code have recently reported great progress for vulnerability detection. In some cases, DL-based models have outperformed static analysis tools. Although many great models have been proposed, we do not yet have a good understanding of these models. This limits the further advancement of model robustness, debugging, and deployment for the vulnerability detection. In this paper, we surveyed and reproduced 9 state-of-the-art (SOTA) deep learning models on 2 widely used vulnerability detection datasets: Devign and MSR. We investigated 6 research questions in three areas, namely model capabilities, training data, and model interpretation. We experimentally demonstrated the variability between different runs of a model and the low agreement among different models' outputs. We investigated models trained for specific types of vulnerabilities compared to a model that is trained on all the vulnerabilities at once. We explored the types of programs DL may consider "hard" to handle. We investigated the relations of training data sizes and training data composition with model performance. Finally, we studied model interpretations and analyzed important features that the models used to make predictions. We believe that our findings can help better understand model results, provide guidance on preparing training data, and improve the robustness of the models. All of our datasets, code, and results are available at https://figshare.com/s/284abfba67dba448fdc2.
translated by 谷歌翻译
动态类型的语言如JavaScript和Python已成为最受欢迎的使用中的使用中。重要的优势可以从动态类型的程序中的类型注释累积。逐渐键入的这种方法是由Querecript编程系统示例,允许程序员指定部分键入的程序,然后使用静态分析来推断剩余类型。然而,通常,静态类型推断的有效性受到限制,取决于程序结构和初始注释的复杂性。结果,对于可以在动态类型的程序中可以在静态预测类型中推进本领域的新​​方法的强大动机,并且该具有可接受的性能用于交互式编程环境。以前的工作表明了使用深度学习的概率类型推断的承诺。在本文中,我们通过引入一系列图形的神经网络(GNN)模型来推进过去的工作,该模型在新型流程图(TFG)表示上运行。 TFG表示输入程序的元素,作为与语法边缘和数据流边缘连接的图表节点,并且我们的GNN模型训练以预测给定输入程序的TFG中的类型标签。我们为我们的评估数据集中的100种最常见类型的GNN模型研究了不同的设计选择,并显示了我们最佳的准确性的两个GNN配置,分别实现了87.76%和86.89%的前1个精度,优于两个最密切相关的深度学习型推断从过去的工作 - 矮人的前进剂,顶级1的精度为84.62%,兰丹特精确为79.45%。此外,这两种配置的平均推理吞吐量为353.8和1,303.9文件/秒,而DeepTyper的186.7个文件/秒和LambDanet的1,050.3文件/秒。
translated by 谷歌翻译
软件工程(ML4SE)的机器学习是一个积极发展的研究领域,专注于帮助程序员工作的方法。为了在实践中应用开发的方法,他们需要实现合理的质量,以帮助而不是分散开发人员的注意力。尽管开发新方法来代码表示和数据收集可以提高模型的整体质量,但它没有考虑到我们可以从手头项目中获得的信息。在这项工作中,我们研究了如果我们针对特定项目,则如何提高模型的质量。我们开发一个框架来评估质量改进,模型可以在特定项目上的方法名称预测任务进行微调后获得。我们评估了三种不同复杂性的模型,并在三个设置中进行了比较它们的质量:在大型Java项目的大型数据集上进行培训,进一步对特定项目的数据进行了微调,并从头开始训练了此数据。我们表明,每项项目的微调可以极大地提高模型的质量,因为它们捕获了项目的领域和命名约定。我们开放用于数据收集的工具以及运行实验的代码:https://zenodo.org/record/6040745。
translated by 谷歌翻译
基于机器学习的程序分析最近显示了整合正式和概率推理对辅助软件开发的承诺。但是,在没有大型注释的语料库的情况下,培训这些分析是挑战性的。为了解决这个问题,我们呈现Buglab,一种自我监督学习的错误检测和修复方法。Buglab Co-Trains两种型号:(1)检测仪模型,用于检测和修复代码中的错误,(2)选择器模型,了解为探测器创建用于训练数据的错误代码。在2374个真实错误的测试数据集上,Buglab的Python实现在基线方法上提高了30%,并在开源软件中找到19个以前未知的错误。
translated by 谷歌翻译
In software development, it is common for programmers to copy-paste or port code snippets and then adapt them to their use case. This scenario motivates the code adaptation task -- a variant of program repair which aims to adapt variable identifiers in a pasted snippet of code to the surrounding, preexisting source code. However, no existing approach has been shown to effectively address this task. In this paper, we introduce AdaptivePaste, a learning-based approach to source code adaptation, based on transformers and a dedicated dataflow-aware deobfuscation pre-training task to learn meaningful representations of variable usage patterns. We evaluate AdaptivePaste on a dataset of code snippets in Python. Results suggest that our model can learn to adapt source code with 79.8% accuracy. To evaluate how valuable is AdaptivePaste in practice, we perform a user study with 10 Python developers on a hundred real-world copy-paste instances. The results show that AdaptivePaste reduces the dwell time to nearly half the time it takes for manual code adaptation, and helps to avoid bugs. In addition, we utilize the participant feedback to identify potential avenues for improvement of AdaptivePaste.
translated by 谷歌翻译
Automated software debugging is a crucial task for improving the productivity of software developers. Many neural-based techniques have been proven effective for debugging-related tasks such as bug localization and program repair (or bug fixing). However, these techniques often focus only on either one of them or approach them in a stage-wise manner, ignoring the mutual benefits between them. In this work, we propose a novel unified \emph{Detect-Localize-Repair} framework based on a pretrained programming language model CodeT5 to seamlessly address these tasks, named CodeT5-DLR. Specifically, we propose three objectives to adapt the generic CodeT5 for debugging: a bug detection objective to determine whether a given code snippet is buggy or not, a bug localization objective to identify the buggy lines, and a program repair objective to translate the buggy code to its fixed version. We evaluate it on each of these tasks and their combined setting on two newly collected line-level debugging datasets in Java and Python. Extensive results show that our model significantly outperforms existing baselines from both NLP and software engineering domains.
translated by 谷歌翻译
Deep learning-based vulnerability detection models have recently been shown to be effective and, in some cases, outperform static analysis tools. However, the highest-performing approaches use token-based transformer models, which do not leverage domain knowledge. Classical program analysis techniques such as dataflow analysis can detect many types of bugs and are the most commonly used methods in practice. Motivated by the causal relationship between bugs and dataflow analysis, we present DeepDFA, a dataflow analysis-guided graph learning framework and embedding that uses program semantic features for vulnerability detection. We show that DeepDFA is performant and efficient. DeepDFA ranked first in recall, first in generalizing over unseen projects, and second in F1 among all the state-of-the-art models we experimented with. It is also the smallest model in terms of the number of parameters, and was trained in 9 minutes, 69x faster than the highest-performing baseline. DeepDFA can be used with other models. By integrating LineVul and DeepDFA, we achieved the best vulnerability detection performance of 96.4 F1 score, 98.69 precision, and 94.22 recall.
translated by 谷歌翻译
最近的工作通过从上下文重建令牌来了解源代码的上下文表示。对于诸如英语中汇总代码的下游语义理解任务,这些表示应该理想地捕获程序功能。但是,我们表明流行的基于重建的BERT模型对源代码编辑敏感,即使编辑保存语义。我们提出了僵局:一种学习代码功能的对比预训练任务,而不是形成。触发预先训练神经网络,以识别许多不等效的干扰者之间的程序的功能类似的变体。我们使用自动源到源编译器作为数据增强的形式来缩放可扩展这些变体。对比预训练将JavaScript摘要和打字类型推理准确性提高2%至13%。我们还提出了一个新的零拍摄JavaScript代码克隆检测数据集,显示施加均比更强大和语义有意义。就此而言,我们以39%的Auroc在普发的环境中以39%的AUROC倾斜,高达5%的自然代码。
translated by 谷歌翻译