Title: Identification of Refused Bequest Code Smells
1Identification of Refused Bequest Code
Smells E. Ligu, A. Chatzigeorgiou, T.
Chaikalis, N. Ygeionomakis Department of Applied
Informatics University of Macedonia, Greece
ICSM2013, Early
Research Achievements Track, September 24, 2013
2Context
In the world of OO systems, inheritance is not a
panacea
breatheAir() regulateBodyTemp()
giveBirthToLiveYoung() produceMilkIfFemale()
swim()
breatheAir() regulateBodyTemp()
giveBirthToLiveYoung() produceMilkIfFemale()
swim()
3Problem
Goal Identification of Refused Bequest Code
Smells
Refused Bequest a subclass does not want to
support the interface inherited from its parent
class Fowler non-trivial problem to
resolve Appropriate Refactoring Replace
Inheritance with Delegation Famous quote
Favor Composition over Inheritance GoF
4Key Concept
5Smell Thermometer
- Signs of Refused Bequest
- no superclass method is overridden
- no inherited method is invoked on subclass
instances - no super class method invocations
- No argument in favor of inheritance
- Refused Bequest is highly improbable
- inherited methods have been re-implemented to
provide functionality that is specific to the
subclass -gt goal is to enable polymorphism. - the presence of errors -gt inherited functionality
is actually employed.
6Example
SweetHome 3D v.4.0 LOC 76K, 460 classes, 69
hierarchies, 42 test cases
7Tool
Implementation on top of the JDeodorant tool
http//java.uom.gr/ref_bequest/
8Threat to Validity
Assumption unit tests exercise thoroughly system
functionality Threat to construct validity
introduced errors might not lead to test failures
because tests have not been designed to cause
the invocation of the corresponding methods and
not because the methods are not actually
utilized. Mitigation perform identification on
projects with extensive test coverage
9Question 1 (academic) Would you trust an
automated tool to identify and resolve design
defects on its own? Question 2 (provocative) Do
you think that industrial engineers actually
regard the resolution of smells as a (serious)
way to improve the code?
ICSM2013, Early
Research Achievements Track, September 24, 2013