ENRE: A Tool Framework for Extensible eNtity Relation Extraction

ENRE: A Tool Framework for Extensible eNtity Relation Extraction
复制标题

DOI:
10.1109/icse-companion.2019.00040
复制
发表时间:
2019-05
期刊:
2019 IEEE/ACM 41st International Conference on Software Engineering: Companion Proceedings (ICSE-Companion)
影响因子:
--
通讯作者:
Wuxia Jin;Yuanfang Cai;R. Kazman;Q. Zheng;Di Cui;Ting Liu
Wuxia Jin;Yuanfang Cai;R. Kazman;Q. Zheng;Di Cui;Ting Liu
中科院分区:
其他
文献类型:
--
作者:
Wuxia Jin;Yuanfang Cai;R. Kazman;Q. Zheng;Di Cui;Ting Liu

文献摘要

相似文献

了解代码实体之间的依赖性是许多软件分析工具和技术的基础。但是,随着新的编程语言和范式的出现,以多种语言编写系统的越来越常见的实践以及动态语言的日益普及,没有现有的框架可以可靠地提取此信息。也就是说,没有工具可以准确地从用多种和动态语言编写的系统中提取依赖性。为了解决这个问题,我们设计并实施了可扩展的实体关系提取(ENRE)框架。 Enre支持从用多种语言编写的系统中提取实体及其依赖项,使用户对感兴趣的依赖关系进行自定义,并明确地使隐式依赖关系。为了证明该框架的可行性,我们开发了两个用于分析Python和Golang计划的ENRE实例。我们对12个Python和Golang项目的实验证明了Enre的有效性和灵活性。通过与商业静态分析工具进行比较,我们表明我们可以从Golang程序中提取依赖性,这些依赖性不受现有工具的支持,我们可以揭示Python中的隐式依赖性。 (演示视频:https://youtu.be/bfxp5bb1yqc)
Understanding the dependencies among code entities is fundamental to many software analysis tools and techniques. However, with the emergence of new programming languages and paradigms, the increasingly common practice of writing systems in multiple languages, and the increasing popularity of dynamic languages, no existing framework can reliably extract this information. That is, no tools exist to accurately extract dependencies from systems written in multiple and dynamic languages. To address this problem, we have designed and implemented the Extensible eNtity Relation Extraction (ENRE) framework. ENRE supports the extraction of entities and their dependencies from systems written in multiple languages, enables the customization of dependencies of interest to the user, and makes implicit dependencies explicit. To demonstrate feasibility of this framework, we developed two ENRE instances for analyzing Python and Golang programs. Our experiments on 12 Python and Golang projects demonstrated the effectiveness and flexibility of ENRE. By comparing with a commercial static analysis tool, we show that we can extract dependencies from Golang programs which are not supported by existing tools and we can reveal implicit dependencies in Python. (Demo Video: https://youtu.be/BfXp5bb1yqc)