Exploring the Architectural Impact of Possible Dependencies in Python Software

Exploring the Architectural Impact of Possible Dependencies in Python Software
复制标题

DOI:
10.1145/3324884.3416619
复制
发表时间:
2020-09
期刊:
2020 35th IEEE/ACM International Conference on Automated Software Engineering (ASE)
影响因子:
--
通讯作者:
Wuxia Jin;Yuanfang Cai;R. Kazman;Gang Zhang;Q. Zheng;Ting Liu
Wuxia Jin;Yuanfang Cai;R. Kazman;Gang Zhang;Q. Zheng;Ting Liu
中科院分区:
其他
文献类型:
--
作者:
Wuxia Jin;Yuanfang Cai;R. Kazman;Gang Zhang;Q. Zheng;Ting Liu

文献摘要

相似文献

软件实体之间的依赖性是许多软件分析研究和体系结构分析工具的基础。动态键入的语言,例如Python,JavaScript和Ruby,可以容忍缺乏明确的类型参考,从而使某些句法依赖性在源代码中不可见。与源代码中直接引用的显式依赖关系相比,我们称这些可能的依赖关系。类型推理技术已被广泛研究和应用,但是现有的体系结构分析研究和工具没有考虑到可能的依赖关系。基本问题是,这些缺失的依赖关系在多大程度上影响建筑分析?为了回答这个问题,我们使用类型推理技术来表现可能的依赖性,对105个Python项目进行了实证研究。我们的研究表明,可能的依赖性对建筑的影响比显式依赖关系的架构影响要高:(1)文件级可能的依赖关系至少占所有文件级依赖性的27.93%,并创建不同的依赖性结构。仅依赖项,平均差异为30.71%; (2)添加可能的依赖项可显着提高精度(0.52%〜14.18%),召回(31.73%〜39.12%)和F1分数(22.13%〜32.09%)的捕获共同变换关系; (3)平均而言,涉及依赖关系的文件会影响架构子空间内的28%的文件和42%的依赖关系,而不是仅仅涉及显式依赖项的文件; (4)平均而言,涉及依赖关系的文件消耗了32%的维护工作。因此,现有工具报告的可维护性得分使用这些动态语言编写的系统似乎比实际模块化更好。这些证据强烈地表明,可能的依赖性比对体系结构质量的明确依赖性具有更大的影响,架构分析和工具应评估甚至强调由于动态分类而导致的依赖性的架构影响。
Dependencies among software entities are the basis for many software analytic research and architecture analysis tools. Dynamically typed languages, such as Python, JavaScript and Ruby, tolerate the lack of explicit type references, making certain syntactic dependencies indiscernible in source code. We call these possible dependencies, in contrast with the explicit dependencies that are directly referenced in source code. Type inference techniques have been widely studied and applied, but existing architecture analytic research and tools have not taken possible dependencies into consideration. The fundamental question is, to what extent will these missing possible dependencies impact the architecture analysis? To answer this question, we conducted an empirical study with 105 Python projects, using type inference techniques to manifest possible dependencies. Our study revealed that the architectural impact of possible dependencies is substantial-higher than that of explicit dependencies: (1) file-level possible dependencies account for at least 27.93% of all file-level dependencies, and create different dependency structures than that of explicit dependencies only, with an average difference of 30.71%; (2) adding possible dependencies significantly improves the precision (0.52%~14.18%), recall(31.73%~39.12%), and F1 scores (22.13%~32.09%) of capturing co-change relations; (3) on average, a file involved in possible dependencies influences 28% more files and 42% more dependencies within architectural sub-spaces than a file involved in just explicit dependencies; (4) on average, a file involved in possible dependencies consumes 32% more maintenance effort. Consequently, maintainability scores reported by existing tools make a system written in these dynamic languages appear to be better modularized than it actually is. This evidence stronglysuggests that possible dependencies have a more significant impact than explicit dependencies on architecture quality, that architecture analysis and tools should assess and even emphasize the architectural impact of possible dependencies due to dynamic typing.