A Taxonomy of Software Smells

Kent Beck coined the term “code smell” in the popular Refactoring book by Martin Fowler and defined it informally as certain structures in the code that suggest (sometimes they scream for) the possibility of refactoring. Since then, various smells have been reported that impair software quality in one or more ways. I attempt to prepare and present a taxonomy of software smells by cataloging, classifying, and inter-relating smell definitions present in existing literature with their references.

You may access the taxonomy here.

The taxonomy is generated by a python program that I wrote to generate html pages. I provide smell description as well as corresponding references in a specific format and supply them to the python program. The program generates required html pages with links that inter-relate the generated html pages. I used basic CSS to look the collection of the html files a little better.

This taxonomy is evolving. I plan to add many more smells (for instance, lexicon smells, performance smells, and energy smells). If you would like to point me to a (missing) smell or reference, or would like to suggest something, feel free to email to me at tusharsharma@ieee.org.

Author: Tushar

Tushar Sharma is a software engineering researcher, developer, and author. He is currently a Research Scientist at Siemens Corporate Technology, Charlotte, USA. The topics related to software design and architecture, refactoring, software quality (specifically code and design quality), and technical debt define his career interests. He earned PhD from Athens University of Economics and Business, Athens, Greece with specialization in software engineering in May 2019. Earlier, he obtained an MS in Computer Science from the Indian Institute of Technology-Madras, Chennai, India. His professional experience includes working with Siemens Research and Technology Center, Bangalore, India for more than seven years (2008-2015). He co-authored the book Refactoring for Software Design Smells: Managing Technical Debt and two Oracle Java certification books. He has founded and developed Designite which is a software design quality assessment tool used by many practitioners and researchers worldwide. He is an IEEE Senior Member.