Code smell is any symptom in the source code of a program that possibly indicates a deeper problem. It is the process of identifying bad software program and altering in such a way that it does not alter the external behavior of the code, yet improves its internal structure. Code smell can even take a bad design and rework it into a good one.
Some common Coding smells:
- Duplicated code: identical or very similar code exists in more than one location.Long method: a method, function, or procedure that has grown too large.
- Large class: a class that has grown too large. See God object.
- Too many parameters: a long list of parameters in a procedure or function make readability and code quality worse.
- Feature envy: a class that uses methods of another class excessively.
- Inappropriate intimacy: a class that has dependencies on implementation details of another cclass.
- Lazy class / Freeloader: a class that does too little.
- Contrived complexity: forced usage of overly complicated design patterns where simpler design would suffice.
- Excessive use of literals: these should be coded as named constants, to improve readability and to avoid programming errors. Additionally, literals can and should be externalized into resource files/scripts where possible, to facilitate localization of software if it is intended to be deployed in different regions.
- Ubercallback: a callback that is trying to do everything
Determining what is and is not a code smell is often a subjective judgment, and will often vary by language, developer and development methodology.
There are some tools such as Checkstyle, PMD and FindBugs for Java, to automatically check for certain kinds of code smells.