中文

学习如何监听:自动发现事件驱动 JavaScript API 中的缺陷模式

软件工程 2022-02-14 v3

摘要

事件驱动编程在 JavaScript 社区中被广泛采用,既在客户端用于处理 UI 事件和 AJAX 请求,也在服务器端用于适应文件或网络 I/O 等长时间运行的操作。许多流行的基于事件的 API 允许将事件名指定为自由形式的字符串而不进行任何验证,可能导致丢失未被任何监听器注册的事件,以及针对永不触发的事件存在的死监听器。在先前的工作中,Madsen 等人提出了一种精确的静态分析来检测此类问题,但其分析因可能需要程序规模指数级数量的上下文而无法扩展。聚焦于检测死监听器的问题,我们提出了一种通过学习来正确使用基于事件的 API 的方法:首先使用简单的静态分析挖掘大规模 JavaScript 代码语料库以识别注册事件监听器的代码片段,然后应用统计建模来识别异常模式,这些模式通常指示不正确的 API 用法。在对 127,531 个开源 JavaScript 代码库的大规模评估中,我们的技术在验证集上保持了 90.9% 的精确率和 7.5% 的召回率,检测到 75 个异常监听器注册模式,证明基于学习的方法来检测事件处理缺陷是可行的。在一项额外实验中,我们在 25 个开源项目中调查了这些模式的实例,并向项目维护者报告了 30 个问题,其中 7 个已被确认为缺陷。

关键词

引用

@article{arxiv.2107.13708,
  title  = {Learning how to listen: Automatically finding bug patterns in event-driven JavaScript APIs},
  author = {Ellen Arteca and Max Schäfer and Frank Tip},
  journal= {arXiv preprint arXiv:2107.13708},
  year   = {2022}
}

备注

19 pages, 6 figures. Accepted and to appear in IEEE TSE