Skip to content

Latest commit

 

History

History
70 lines (60 loc) · 3.23 KB

README.md

File metadata and controls

70 lines (60 loc) · 3.23 KB

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.

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 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.

You can make following two types of contributions:

  • Add more information related to smells (using the pre-defined templates; see below)
  • Modify the python program that generates Html pages

Compilation and execution

Specify the path variables in the Main.py, and execute it using python3. I used PyCharm CE for developing and executing the program.

Templates

You may add new smells, categories, and references to the collection. The new items must follow the template specified below.

Smell template

[smell]
[smell-id]XX (must be unique)
[smell-category]category-id such as DESIGN
[smell-name]smell name
[smell-description]description of the smell (one line; could be multiple statements. Use '\n' for creating new paragraph)
[smell-example]example of the smell (one line. Use '\n' for introducing line break)
[smell-aka]also known as (one line; a smell may have multiple [smell-aka] statements)
[smell-ref]main reference in which it was defined
[smell-tool]id of the tool that supports detection of this smell; one smell definition may have multiple [smell-tool] statements
[smell-end]

Category template

[define-smell-category]
[smell-category-id] must be unique
[smell-category-name]such as "Design smells"
[smell-category-parent]it is used to create hierarhcy of smells. It should be empty for root level smell categories, specify the parent category such as "CODE" for sub-categories "DESIGN" and "ARCH".
[define-smell-category-end]

Reference template

[reference]
[ref-id]must be unique
[ref-text]a single line reference text (in ACM ref format)
[ref-image]it is not used currently
[ref-url]url of the resource
[ref-end]

Tool template

[tool]
[tool-id]must be unique
[tool-name]
[tool-description]a single line description; may have multiple statements
[tool-url]it is mandatory
[tool-supported-smell]id(s) of smells supported by tool. a tool may have multiple [tool-supported-smell] statements
[tool-supported-languages]a single line.
[tool-end]

Smell definition template

[smell-definition]
[sd-id]must be unique smell definition
[definition]
[ref]single line reference
[smell-definition-end]