Design smell

In computer programming, design smells are "structures in the design that indicate violation of fundamental design principles and negatively impact design quality".[1] The origin of the term "design smell" can be traced to the term "code smell" which was featured in the book Refactoring: Improving the Design of Existing Code by Martin Fowler.[2]

Different authors have defined the word "smell" in different ways:

Design smells indicate the accumulated design debt (one of the prominent dimensions of technical debt). Bugs or unimplemented features are not accounted as design smells. Design smells arise from the poor design decisions that make the design fragile and difficult to maintain. It is a good practice to identify design smells in a software system and apply appropriate refactoring to eliminate it to avoid accumulation of technical debt.

The context (characterized by various factors such as the problem at hand, design eco-system, and platform) plays an important role to decide whether a certain structure or decision should be considered as a design smell. Many a times, it is appropriate to live with design smells due to constraints imposed by the context.

Common design smells

Tools to detect design smells

See also

References

  1. 1 2 3 4 5 6 7 8 9 10 11 12 Girish Suryanarayana, Ganesh SG, Tushar Sharma (2014). "Refactoring for software design smells: Managing technical debt". Morgan Kaufmann. ISBN 978-0128013977
  2. 1 2 3 4 5 6 Fowler, Martin (1999). Refactoring. Improving the Design of Existing Code. Addison-Wesley. ISBN 0-201-48567-2.
  3. N. Moha, Y. Gueheneuc, L. Duchien, and A. Le Meur. "Decor: A method for the specification and detection of code and design smells". IEEE Trans. Softw. Eng., 36(1):20–36, January 2010.
  4. 1 2 R. C. Martin. Agile Software Development, Principles, Patterns, and Practices. Addison-Wesley, 2003.
  5. Trifu A. "Automated strategy based restructuring of object oriented code". In Proceedings of the 7th German workshop on software-reengineering (WSR); 2005.
  6. Stal M. "Software architecture refactoring". Tutorial in The international conference on object oriented programming, systems, languages and applications (OOPSLA); 2007.
  7. Sonargraph-quality: A tool for assessing and monitoring technical quality. Available at: https://www.hello2morrow.com/products/sonargraph/quality.
  8. 1 2 3 4 Structural Investigation of Software Systems (SISSy) Tool. Available at: http://sissy.fzi.de/SISSy/CMS/index.html.
  9. Structural Analysis for Java Tool (Stan4J). Available at: http://stan4j.com/.
  10. 1 2 3 InFusion - Design flaw detection tool. Available at: http://www.intooitus.com/products/infusion.
  11. SDMetrics - A UML design quality metrics tool; 2012. Available at: http://www.sdmetrics.com.
  12. Page-Jones M. "The practical guide to structured systems design". 2nd ed. Prentice Hall; 1988.
  13. Budd T. "An introduction to object-oriented programming". 3rd ed. Addison Wesley; 2001.
  14. Page-Jones M. "Fundamentals of object-oriented design in UML". Addison-Wesley Professional; 1999.
  15. Sefika M, Sane A, Campbell RH. "Monitoring compliance of a software system with its high-level design models". In Proceedings of the 18th international conference on software engineering, ICSE ‘96, Washington, DC, USA; 1996. p. 387–96.
  16. Designite - A Software Design Quality Assessment Tool. Available at: http://www.designite-tools.com
This article is issued from Wikipedia - version of the Tuesday, May 03, 2016. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.