We have been working on “design smells” for more than two
years. In this journey, we have collected various design smells, categorized
them, named them with our naming scheme, and cataloged them. Our initial work
has been published in Journal of Object Technology in 2012 – “Towards a
Principle-based Classification of Structural Design Smells”.
In order to strengthen our catalog of design smells, we
started collecting experiences of developers/designers/architects/managers with
the design smells in their projects. On
this forum, we invite contributions from the software developer community to
share their experiences with design smells. In your projects, if you have
observed (or suffered by) any design smell, feel free to share your experience
with the smell; you may describe various dimensions associated with smell - how
you encountered the smell, problems brought in by the smell, how you refactored
the smell, and what are the key take-away for you.
We classified design smells using four design principles
i.e. Abstraction, Encapsulation, Modularization, and Hierarchy. Smells
classified with each principles and a brief description associated with each
smells can be found here.
To help you in this process we have provided a sample experience below:
To help you in this process we have provided a sample experience below:
An experience with “Unutilized Abstraction”
During maintenance
and refactoring, developers often refactor code bases which results in some of
the old classes becoming obsolete. However, such code segments are often left
in the code base (sometimes by mistake) making the source code bulge in size.
Consider this documentation from the Java bug database for a set of classes in
JDK source base (Check the original bug report “JDK-7161105: unused
classes in jdk7u repository” here: http://bugs.sun.com/view_bug.do?bug_id=7161105):
“the ObjectFactory/SecuritySupport
classes that were duplicated in many packages were replaced by a unified set
under internal/utils. When the jaxp 1.4.5 source bundle was dropped however, it
was a copy of the source bundle on top of the original source, therefore
leaving these classes behind unremoved.”
We understand that it is not possible to share the project/company
name due to privacy reasons and we respect that; thus, it is perfectly ok to
camouflage project/company details during the description. You may report your
experiences with a proprietary project or any open source project.
You may share your experiences in the form of comment to
this post or by mailing us at designsmells@gmail.com.