← 最新论文
🤖 AI

Graph Construction and Matching for Imperative Programs using Neural and Structural Methods

本文提出了一种流水线,通过将抽象语法树解析与语义嵌入相结合,将命令式程序及其注释转换为统一的、带类型的属性图,从而在不同语言和注释风格之间实现一致的图表示,以促进验证工件的复用。

原作者: Arshad Beg, Diarmuid O'Donoghue, Rosemary Monahan

发布于 2026-04-30
📖 1 分钟阅读☕ 轻松阅读

原作者: Arshad Beg, Diarmuid O'Donoghue, Rosemary Monahan

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下,你拥有一个庞大的图书馆,里面收藏着构建不同类型机器的操作手册。有些手册是用英语写的,有些用法语,还有些是用秘密代码编写的。即使两台机器执行完全相同的功能(例如“举起一个沉重的箱子”),由于使用的语言或具体的写作风格不同,它们的手册看起来可能截然不同。

问题是:当你需要构建一台新机器时,如何找到正确的手册进行复用? 通常,人类必须阅读数百页内容才能找到匹配项,这既缓慢又令人沮丧。

本文提出了一种利用计算机图人工智能来解决该问题的智能方法。以下是他们方法的分解,使用简单的类比说明:

1. 目标:在人群中寻找“双胞胎”

研究人员希望找到“验证工件”。你可以将它们理解为附加在软件程序上的蓝图、安全检查和质量保证。他们想知道:“这个新程序是否看起来像我们已经检查过的旧程序?”如果是,我们就可以复用旧的安全检查,而无需从头开始。

2. 挑战:不同语言,相同逻辑

本文考察了三种用于编写这些安全检查的“语言”:

  • 带 ACSL 的 C 语言:就像在特定笔记本风格中写食谱。
  • 带 JML 的 Java:就像用不同的笔记本写同一份食谱,但符号略有不同。
  • Dafny(用于 C#):就像直接将食谱写入烹饪说明中,而不使用单独的笔记本。

尽管它们完成相同的工作,但符号和单词看起来不同。计算机通常会被这些表面差异搞糊涂。

3. 解决方案:将代码转化为“分子模型”

研究人员不是阅读文字,而是将代码及其安全规则转化为3D 分子模型(他们称之为)。

  • 节点(原子):程序的每一部分(如变量、循环或安全规则)都变成一个点。
  • 边(键):连接点的线条显示它们之间的关系(例如,“此变量输入到该循环”)。

这创建了程序结构的可视化地图。关键在于,他们不仅映射代码,还将安全规则(注释)直接映射到地图上。

4. 秘诀:赋予地图“大脑”

地图很好,但它不理解含义。两张地图可能在结构上相似,但含义不同。为了解决这个问题,研究人员使用AI 模型(具体为 SentenceTransformer 和 CodeBERT)来赋予地图一个“大脑”。

  • 类比:想象给你的分子模型拍张照片,并通过一个超级智能的翻译器。AI 读取模型内部的文本,并生成一个数字指纹(向量),该指纹捕捉代码的含义,而不仅仅是形状。
  • 现在,计算机可以比较 Java 程序的“指纹”与 C 程序的“指纹”。即使它们看起来不同,如果它们的指纹匹配,计算机就知道它们在本质上是一样的。

5. 流程:工厂流水线

本文描述了一个自动执行此过程的管道(流水线):

  1. 输入:他们获取原始代码(C、Java 或 C#)。
  2. 翻译:他们使用脚本自动向代码添加安全规则(如果不存在),或将代码翻译成不同的语言。
  3. 图构建:他们将代码转化为那些“分子模型”(图)。
  4. AI 增强:他们使用 AI 为这些图生成“指纹”。
  5. 匹配:他们比较指纹。如果两个程序具有相似的指纹,它们就是匹配项。

6. 发现

他们在 56 个不同的程序(如排序列表或搜索数字)及其变体上测试了这种方法。

  • 结果:该系统成功地为所有三种语言创建了这些图地图。
  • 匹配:当他们比较这些程序时,系统正确识别出两个程序是“双胞胎”(相似度得分非常高),即使一个是用 C 语言编写的,另一个是用 Java 编写的。它还正确识别出排序程序和搜索程序不是双胞胎(相似度得分低)。

7. 缺陷(局限性)

作者诚实地指出了不足之处:

  • “正则表达式”问题:该系统使用简单的模式匹配规则(如“查找和替换”工具)来构建图。它很快,但如果代码杂乱无章或写法怪异,系统可能会遗漏细节。
  • AI 的知识:所使用的 AI 模型是通用型的。它们并非专门训练成为代码的“律师”。它们可能会遗漏人类专家能发现的非常细微的安全规则差异。

总结

简而言之,本文构建了一个用于软件安全检查的通用翻译器和匹配器。通过将代码及其规则转化为结构化地图,然后赋予这些地图AI 生成的含义,他们证明了计算机可以在不同的编程语言之间找到相似的软件。这是迈向未来的第一步,在这个未来中,我们可以自动复用安全检查,从而节省开发者的时间并使软件更安全。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →