Skip to main content
QUICK REVIEW

[论文解读] Path-Based Function Embedding and its Application to Specification Mining

Daniel DeFreez, Aditya Thakur|arXiv (Cornell University)|Feb 21, 2018
Software Engineering Research参考文献 22被引用 16
一句话总结

该论文提出 func2vec,一种基于神经网络的方法,通过在代码的标记化下推自动机(ℓ-PDS)表示上进行随机游走,生成句子以学习分布式函数嵌入。该方法能有效将函数同义词(语义相似但语法不同)聚类成组,在 Linux 内核黄金标准上实现 87% 的精确率和 71% 的召回率,并实现了跨文件系统和驱动程序的高支持度错误处理规范挖掘。

ABSTRACT

Identifying the relationships among program elements is useful for program understanding, debugging, and analysis. One such relationship is synonymy. Function synonyms are functions that play a similar role in code, e.g. functions that perform initialization for different device drivers, or functions that implement different symmetric-key encryption schemes. Function synonyms are not necessarily semantically equivalent and can be syntactically dissimilar; consequently, approaches for identifying code clones or functional equivalence cannot be used to identify them. This paper presents func2vec, an algorithm that maps each function to a vector in a vector space such that function synonyms are grouped together. We compute the function embedding by training a neural network on sentences generated from random walks over an encoding of the program as a labeled pushdown system (l-PDS). We demonstrate that func2vec is effective at identifying function synonyms in the Linux kernel. Furthermore, we show how function synonyms enable mining error-handling specifications with high support in Linux file systems and drivers.

研究动机与目标

  • 为解决在 Linux 内核等低级系统代码中识别函数同义词的挑战,其中命名惯例不可靠,且函数在语法和语义上可能差异显著。
  • 开发一种可扩展的无监督方法,学习捕捉分层程序结构的函数嵌入,而无需事先了解命名或语义等价性。
  • 通过跨多个实现利用函数同义词,提升 Linux 中错误处理规范挖掘的支持度。
  • 证明函数嵌入可增强大规模、低级代码库中传统方法因错误路径出现频率过低而失效时的规范挖掘效果。

提出的方法

  • 将程序表示为标记化下推自动机(ℓ-PDS),其中节点代表程序元素(函数、指令、类型、错误码),边以语义类型进行标记。
  • 在 ℓ-PDS 上生成随机游走,以产生标签序列,这些序列被视作神经网络训练的句子。
  • 在这些标签序列上训练跳字模型(受 word2vec 启发),以在 300 维空间中学习函数的密集向量表示(嵌入)。
  • 使用 t-SNE 将学习到的 R³⁰⁰ 嵌入投影到 2D 以进行可视化和聚类分析。
  • 通过测量函数向量之间的余弦相似度,利用学习到的嵌入识别函数同义词。
  • 通过统一不同实现中的错误处理模式,利用识别出的函数同义词,实现跨实现的规范挖掘,从而获得更高的支持度。

实验结果

研究问题

  • RQ1在 Linux 内核等大规模、低级系统代码中,基于在标记化下推自动机上进行随机游走训练的神经网络,能否有效将函数同义词聚类?
  • RQ2与人工整理的黄金标准相比,func2vec 在识别函数同义词方面的精确率和召回率如何?
  • RQ3由 func2vec 衍生的函数嵌入能否提升 Linux 文件系统和驱动程序中挖掘的错误处理规范的支持度和质量?
  • RQ4func2vec 在多大程度上能通过聚合语义相似函数中的稀有错误处理模式,减少规范挖掘中的误报?

主要发现

  • 在包含 683 个 Linux 内核函数、分为 127 个同义词类的人工整理黄金标准上,func2vec 实现了 87% 的精确率和 71% 的召回率。
  • 该方法成功基于语义角色(如 probe、open、free)对 Linux 内核中的函数同义词进行聚类,可视化结果通过 t-SNE 投影得以体现。
  • 通过在多个实现中识别函数同义词,func2vec 实现了跨实现的错误处理规范挖掘,其支持度显著高于单一实现所能达到的水平。
  • 对 5 个 Linux 文件系统和 48 个设备驱动程序的评估表明,使用 func2vec 可提升挖掘的错误处理规范的质量和可靠性。
  • func2vec 是首个将基于神经网络的函数嵌入应用于大规模系统代码(如 Linux 内核,200 万行代码)的技术,展示了其可扩展性和有效性。
  • 该方法优于仅依赖正常执行路径或孤立错误轨迹的传统规范挖掘技术,尤其在处理罕见或实现特定的错误处理模式时表现更优。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。