面向静态分析的真实世界 R 代码剖析
编程语言
2024-01-30 v1 软件工程
摘要
背景 R 编程语言拥有一个庞大且活跃的社区,尤其是在统计计算领域。其解释执行的特性允许一些有趣的构造,例如在运行时操作函数,这阻碍了对 R 程序的静态分析。同时,关于这些特性,乃至整个 R 语言在实践中如何被使用,现有研究尚显不足。目标:本文中,我们对超过 5000 万行真实世界的 R 程序和包进行了大规模静态分析,以识别其特征和实际使用的特性。此外,我们比较了 R 用户脚本与包作者实现之间的异同。我们为诸如 lintr 包之类的静态分析工具以及潜在的代码解释器优化提供了见解,并揭示了未来研究的领域。方法:我们分析了随出版物提交的 4230 个 R 脚本以及 19450 个 CRAN 包的源代码,涉及超过 350000 个 R 文件,收集并总结了感兴趣特性的定量信息。结果:我们发现基于名称的索引操作、赋值和循环的使用频率很高,但 R 的大多数反射式函数使用频率较低。此外,在出版物提交的代码中,我们既没有发现测试函数,也没有发现很多对 R 的外部函数接口(FFI)的调用。结论:R 脚本和包源代码存在差异,例如在大小、包含其他包的方式以及对 R 反射能力的使用上。我们提供了使用频繁且应被静态分析工具优先处理的特性,如运算符赋值、函数调用以及某些反射式函数(如 load)。
引用
@article{arxiv.2401.16228,
title = {On the Anatomy of Real-World R Code for Static Analysis},
author = {Florian Sihler and Lukas Pietzschmann and Raphael Straub and Matthias Tichy and Andor Diera and Abdelhalim Dahou},
journal= {arXiv preprint arXiv:2401.16228},
year = {2024}
}
备注
11+1 pages, 6 figures, 2 tables, accepted at MSR 2024