User login

Essence and Code Smells

The following table relates code smells to relative essence. Column 'Fowler' refers to the page in Fowler's "Refactoring" book describing this smell. Column 'Wake' refers to the category of smell in Wake's "Refactoring Workbook". Column 'Kind' distinguishes between "Within Class" and "Between Class" smells. Column 'Smell' provides the name of the smell according to Fowler/Wake and may include commonly used aliases. Column 'Essence' describes the correlation of the smell with relative essence: "+" (higher relative essence correlates with more smell), "0" (no direct relationship between relative essence and smell), and "-" (lower relative essence correlates with more smell).

Fowler

Wake

Kind

Smell

Essence

Comment

page 87b

Measured Smells

Within

Comments / Deodorant

0

+

refactoring may involve extract method

page 76b

Measured Smells

Within

Long Method

+

refactoring involves extract method

page 78b

Measured Smells

Within

Long Parameter List

0

smell is more about coupling than indirection

page 76a

Duplication

Within

Duplicated Code

0

(+)

might be positive because duplication is more probable for high complexity/essence code

might be negative, but it could also be about coupling (methods exist in some other class)

page 81a

Data

Between

Data Clumps

0

+

grouping data into a class might just move fields, or might introduce a new class with encapsulation

page 87a

Inheritance

Between

Refused Bequest

0

+

otherwise new super class might be introduced, so there could be a new constructor

page 85b

Inheritance/Responsibility

Between

Inappropriate Intimacy

0

+

extra new class could have appeared

page 83b

Inheritance

Between

Lazy Class / Freeloader

-

refactoring may involve inline class; class has to be eliminated, thus all its methods; because it was lazy, it probably had no loops

page 80b

Responsibility

Between

Feature Envy

0

+

otherwise method would be moved or extracted

page 84b

Responsibility

Between

Message Chains

0

+

refactoring may involve extract method

page 85a

Responsibility

Between

Middle Man

-

refactoring may involve inline method

page 79a

Accommodating Change

Between

Divergent Change

+

refactoring involves extract class

page 80a

Accommodating Change

Between

Shotgun Surgery

-

0

refactoring may involve inline class

page 83a

Accommodating Change

Between

Parallel Inheritance Hierarchies

0

page 82

Conditional Logic

Within

Switch Statements / Simulated Inheritance

+

refactoring involves extract method and new classes

page 84a

Data

Between

Temporary Field

+

refactoring involves extract class

page 85c

Duplication

Within

Alternative Classes with Different Interfaces

0

+

refactoring may involve extract super class

page 86a

Library Classes

Between

Incomplete Library Class

0

+

refactoring may introduce foreign method

Duplication

Within

Magic Number

0

Conditional Logic

Within

Null Check

0

Conditional Logic

Within

Complicated Boolean Expression

0

Conditional Logic

Within

Special Case

0

+

may lead to special case being handled separately

Accommodating Change

Between

Combinatorial Explosion

0

(+)

might be positive, because duplication is more probable for complex/essential code

Analysis

Of the 31 smells, 3 strongly indicate low relative essence, 2 weakly indicate low relative essence, 2 weakly indicate high relative essence, and 14 strongly indicate high relative essence. This means that most of the commonly known smells represent issues where the relative essence is too big. This may be an indication that in practice, most problems with software are related to the lack of modularization. Nevertheless, there are some smells (especially "Lazy Class/Freeloader", "Middle Man", and "Shotgun Surgery") that indicate that the relative essence is too low and the amount of indirection too high.