Skip to content
Vis Kirubakaran edited this page Apr 13, 2023 · 2 revisions

Welcome to the CodeSmell Wiki!

Project Description

CodeSmell is a tool for detecting and visualizing code smells for object-oriented languages, primarily Java. Code smells are a costly infection in source code which can cause further damage as development progresses if not properly addressed early on. This tool aims to aid in detecting these smells and notifying the user of potential areas to direct their focus on by analyzing a set of 9 smells.

Code Smells

Code Smell Name Description
Feature Envy A class that accesses other class data more often than its own [1].
God Class A class that has too many responsibilities, or is just too large [2].
ISPViolation Implementors of an interface selectively fail to realize all defined methods [3].
Inappropriate Intimacy One classes use the internal fields and methods of another class [4].
Lazy Class A class that is underused [5].
Misplaced Class A class that needs the classes from other packages more than those from its own package [1].
Orphan Variable A collection of constants that belong in a different class than the class they are defined within [6].
Refused Bequest A class that does not use all of its inherited properties from its superclass [7].
Shotgun Surgery A feature whose behavior is defined in many different classes and methods, making it difficult to modify [1].

Project Authors

Name Project Contributions
Golan Hassin Lazy, Misplaced Class, Parser, GUI Code Smell Display.
Relevant Pull Requests
Relevant Kanban Tasks
Visakan Kirubakaran Maven, Joern Integration (Data Retrieval and Handling, Logging and Error Handling Joern Query), RelationshipManager, PackageManager, StatTracker, Inappropriate Intimacy, Refused Bequest, Orphan Variable, Parser.
Relevant Pull Requests
Relevant Kanban Tasks
Sabin Plaiasu God Class, ISP Violation, Frontend, Overall System Architecture, LayoutManager, Parser, Joern Integration (Serialization/Deserialization Handling, Server Refactor).
Relevant Pull Requests
Relevant Kanban Tasks
Martin Rivard Feature Envy, Shotgun Surgery, LayoutManager.
Relevant Pull Requests
Relevant Kanban Tasks

References

[1]. Yamashita, A. and Moonen, L., 2022. Exploring the Impact of Inter-smell Relations on Software Maintainability: An Empirical Study. [online] Simula.no. Available at: https://www.simula.no/sites/default/files/publications/Simula.simula.1508.pdf [Accessed 18 October 2022].

[2] Abbes M, Khomh F, Guéhéneuc Y-G, Antoniol G: An empirical study of the impact of two antipatterns, blob and spaghetti code, on program comprehension. In Proc. of 15th European Conference on Software Maintenance and Reengineering (CSMR). IEEE, Oldenburg, Germany. Available: https://jserd.springeropen.com/articles/10.1186/s40411-014-0011-9 [Accessed 18 October 2022].

[3]. Madasu, Vamsi & Venna, Trinadh & Eltaeib, Tarik. (2015). SOLID Principles in Software Architecture and Introduction to RESM Concept in OOP. Journal of Engineering Science and Technology. 2. 3159-40. Available at: https://www.researchgate.net/publication/273451390_SOLID_Principles_in_Software_Architecture_and_Introduction_to_RESM_Concept_in_OOP [Accessed 18 October 2022].

[4]. “Inappropriate intimacy” Refactoring.Guru. [Online]. Available: https://refactoring.guru/smells/inappropriate-intimacy. [Accessed: 16-Oct-2022].

[5]. Douch, G., 2022. Lazy Class. [online] Code Smells. Available at: https://code-smells.com/dispensables/lazy-class#:~:text=Lazy%20Class%20smells%20represent%20classes,code%20smell%20to%20Large%20Class. [Accessed 15 October 2022]

[6]. J. Au-Yeung, “Code smells in JavaScript classes,” Medium, 12-Feb-2020. [Online]. Available: https://betterprogramming.pub/javascript-code-smells-classes-93f15551fa9a.[Accessed: 06-Dec-2022].

[7]. “Refused bequest” Refactoring.Guru. [Online]. Available: https://refactoring.guru/smells/refused-bequest. [Accessed: 16-Oct-2022].