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.

Let's list various definitions of a smell first.

Total documented smells: 279

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 more smells and populate other relevant information such as tool support. If you would like to see something relevant which is currently missing, feel free to offer a pull request. Here is the URL to the open-source repository. You may also contact me at tusharsharma@ieee.org.

A survey on software smells:

Our survey paper titled "A survey on software smells" published in the April 2018 issue of Journal of Systems and Software may interest you. The paper provides a comprehensive overview of many dimensions concerning smells including definition, types, effects, causes, and detection.


I would like to thank Prof. Diomidis Spinellis for suggesting me many improvements.

My sincere thanks to the following contributors: Neil Ernst, Vadim Zaytsev.

Last updated: October 10, 2021

All rights reserved (c) Tushar Sharma 2017-21.