2 个月前
学习类型推断以增强数据流分析
Seidel, Lukas ; Effendi, Sedick David Baker ; Pinho, Xavier ; Rieck, Konrad ; van der Merwe, Brink ; Yamaguchi, Fabian

摘要
静态分析动态类型代码是一项具有挑战性的任务,因为即使是在编译时确定过程调用的目标这样看似简单的任务,在不知道对象类型的情况下也变得复杂。为了解决这一挑战,逐渐类型(gradual typing)越来越多地被添加到动态类型语言中,一个典型的例子是 TypeScript,它为 JavaScript 引入了静态类型。逐渐类型提高了开发人员验证程序行为的能力,有助于构建健壮、安全且易于调试的程序。然而,在实际应用中,用户很少直接注解类型。与此同时,传统的类型推断在程序规模增大时面临性能相关的挑战。基于机器学习的统计技术提供了更快的推断速度,尽管最近的方法总体上提高了准确性,但在用户定义的类型上的表现仍然远不如最常见的内置类型。这进一步限制了它们在现实世界中的实用性,因为这些技术很少与面向用户的应用程序集成。我们提出了一种名为 CodeTIDAL5 的基于 Transformer 的模型,该模型经过训练可以可靠地预测类型注解。为了有效地检索和重新整合结果,我们从程序的代码属性图中提取使用片段(usage slices)。我们将我们的方法与最近的神经网络类型推断系统进行对比,在 ManyTypes4TypeScript 基准测试中,我们的模型比当前最先进的方法高出 7.85%,总体准确率达到 71.27%。此外,我们介绍了 JoernTI,这是将我们的方法集成到 Joern 中的一个项目,Joern 是一个开源的静态分析工具。我们展示了通过增加额外的类型信息,分析过程得到了改进。由于我们的模型即使在普通 CPU 上也能实现快速推断时间,因此通过 Joern 提供我们的系统将具有很高的可访问性,并促进安全研究的发展。