Context: Dependency Injection (DI) is a commonly applied mechanism to decouple classes from their dependencies in order to provide higher modularization. However, bad DI practices often lead to negative consequences, such as increasing coupling. Although white literature conjectures about the existence of DI anti-patterns, there is no evidence on their practical relevance, usefulness, and generality. Objective: The objective of this study is to propose and evaluate a catalog of Java DI anti-patterns. Methodology: We reviewed the reported DI anti-patterns in order to analyze their completeness and propose a catalog containing 12 Java DI anti-patterns. We developed a tool to statically analyze the occurrence level of the candidate DI anti-patterns in open-source and industry projects. Next, we survey practitioners to assess their perception on the relevance, usefulness, and their willingness on refactoring anti-pattern instances of the catalog. Results: Our static code analyzer tool showed a relative recall of 92.19% and high average precision. It revealed that at least 9 different DI anti-patterns appeared frequently in the analyzed projects. Besides, our survey confirmed the perceived relevance of the catalog and developers expressed their willingness to refactor instances of anti-patterns from source code. Conclusion: The catalog contains Java DI anti-patterns that occur in practice and that are perceived as useful. Sharing it with practitioners may help them to avoid such anti-patterns, thus improving source-code quality.


翻译:背景:依赖性注射(DI)是一个常用的机制,用来将类别与其依赖性脱钩,以提供更高的模块化。然而,不良的DI做法往往会导致负面后果,例如增加组合。虽然白色文献推测存在DI反胸针的存在,但没有证据表明它们的实际相关性、有用性和普遍性。目标:本研究的目的是提议和评估一份Java DI反胸针目录。结果:我们审查了报告的DI反胸针来源,以便分析其完整性,并提出了含有12 Java DI反胸针的目录。我们开发了一个工具,静态分析候选人DI反胸针在开放源和行业项目中的发生程度。我们调查人员评估其对相关性、有用性和是否愿意重新定义反胸针目录。结果:我们静态代码分析工具显示相对回收了92.19 % 和较高的平均精确度。它揭示了在最少9种不同的Dava 数据目录中,我们所认识的愿意性数据库显示的是它们的相关性。

0
下载
关闭预览

相关内容

Java 是一门编程语言,拥有跨平台、面向对象、泛型编程等特性。
专知会员服务
95+阅读 · 2021年8月28日
专知会员服务
18+阅读 · 2020年9月6日
强化学习最新教程,17页pdf
专知会员服务
177+阅读 · 2019年10月11日
[综述]深度学习下的场景文本检测与识别
专知会员服务
78+阅读 · 2019年10月10日
机器学习入门的经验与建议
专知会员服务
94+阅读 · 2019年10月10日
机器学习相关资源(框架、库、软件)大列表
专知会员服务
40+阅读 · 2019年10月9日
计算机 | 国际会议信息5条
Call4Papers
3+阅读 · 2019年7月3日
计算机 | 中低难度国际会议信息8条
Call4Papers
9+阅读 · 2019年6月19日
Transferring Knowledge across Learning Processes
CreateAMind
28+阅读 · 2019年5月18日
计算机 | USENIX Security 2020等国际会议信息5条
Call4Papers
7+阅读 · 2019年4月25日
计算机 | CCF推荐期刊专刊信息5条
Call4Papers
3+阅读 · 2019年4月10日
Call for Participation: Shared Tasks in NLPCC 2019
中国计算机学会
5+阅读 · 2019年3月22日
计算机 | ISMAR 2019等国际会议信息8条
Call4Papers
3+阅读 · 2019年3月5日
A Technical Overview of AI & ML in 2018 & Trends for 2019
待字闺中
17+阅读 · 2018年12月24日
人工智能 | 国际会议截稿信息9条
Call4Papers
4+阅读 · 2018年3月13日
【音乐】Attention
英语演讲视频每日一推
3+阅读 · 2017年8月22日
CSKG: The CommonSense Knowledge Graph
Arxiv
18+阅读 · 2020年12月21日
Arxiv
10+阅读 · 2020年4月5日
Directions for Explainable Knowledge-Enabled Systems
Arxiv
26+阅读 · 2020年3月17日
VIP会员
相关VIP内容
专知会员服务
95+阅读 · 2021年8月28日
专知会员服务
18+阅读 · 2020年9月6日
强化学习最新教程,17页pdf
专知会员服务
177+阅读 · 2019年10月11日
[综述]深度学习下的场景文本检测与识别
专知会员服务
78+阅读 · 2019年10月10日
机器学习入门的经验与建议
专知会员服务
94+阅读 · 2019年10月10日
机器学习相关资源(框架、库、软件)大列表
专知会员服务
40+阅读 · 2019年10月9日
相关资讯
计算机 | 国际会议信息5条
Call4Papers
3+阅读 · 2019年7月3日
计算机 | 中低难度国际会议信息8条
Call4Papers
9+阅读 · 2019年6月19日
Transferring Knowledge across Learning Processes
CreateAMind
28+阅读 · 2019年5月18日
计算机 | USENIX Security 2020等国际会议信息5条
Call4Papers
7+阅读 · 2019年4月25日
计算机 | CCF推荐期刊专刊信息5条
Call4Papers
3+阅读 · 2019年4月10日
Call for Participation: Shared Tasks in NLPCC 2019
中国计算机学会
5+阅读 · 2019年3月22日
计算机 | ISMAR 2019等国际会议信息8条
Call4Papers
3+阅读 · 2019年3月5日
A Technical Overview of AI & ML in 2018 & Trends for 2019
待字闺中
17+阅读 · 2018年12月24日
人工智能 | 国际会议截稿信息9条
Call4Papers
4+阅读 · 2018年3月13日
【音乐】Attention
英语演讲视频每日一推
3+阅读 · 2017年8月22日
Top
微信扫码咨询专知VIP会员