Code smell /kəʊd smɛl/noun
A characteristic of computer code that may indicate a deeper flaw.
Code smells are surface-level indicators of deeper programming design flaws. The following code smells are from the Mäntylä-Lassenius taxonomy.
A Bloater smell represents a code element that has grown so large that it cannot be effectively handled.
An Object-Orientation Abuser smell occurs when code does not take full advantage of object-oriented design.
Change Preventer smells inhibit future development and modification of code.
Dispensable smells are unnecessary code that causes clutter in your codebase.
A Coupler smell represents high degrees of dependency between different parts of the codebase.
Books about code smells
Learn to write better smelling code.
Refactoring: Improving the Design of Existing Code
Code smells: A Predictor of Remarkable Quality Improvement
Clean Code: A Handbook of Agile Software Craftsmanship