Refactoring : A change made to the internal structure of
software to make it easier to understand and
cheaper to modify without changing its
observable behavior.
Code smells (Fowler)
• Alternative Classes with Different Interfaces
• Comments
• Data Class
• Data Clumps
• Divergent Change
• Duplicated Code
• Feature Envy
• Inappropriate Intimacy
• Incomplete Library Class
• Large Class
• Lazy Class
• Long Method
• Long Parameter List
• Message Chains
• Middle Man
• Parallel Inheritance
Hierarchies
• Primitive Obsession
• Refused Bequest
• Shotgun Surgery
• Speculative Generality
• Switch Statements
• Temporary Field
• Mystery Guest
• Resource Optimism
• Test Run War
• General Fixture
• Eager Test
• Lazy Test
• Assertion Roulette
• Indirect Testing
• For Testers Only
• Sensitive Equality
• Test Code Duplication
Inappropriate assertions
• Duplication between test method
and TestCase names
• Dependent test methods
software to make it easier to understand and
cheaper to modify without changing its
observable behavior.
Code smells (Fowler)
• Alternative Classes with Different Interfaces
• Comments
• Data Class
• Data Clumps
• Divergent Change
• Duplicated Code
• Feature Envy
• Inappropriate Intimacy
• Incomplete Library Class
• Large Class
• Lazy Class
• Long Method
• Long Parameter List
• Message Chains
• Middle Man
• Parallel Inheritance
Hierarchies
• Primitive Obsession
• Refused Bequest
• Shotgun Surgery
• Speculative Generality
• Switch Statements
• Temporary Field
• Mystery Guest
• Resource Optimism
• Test Run War
• General Fixture
• Eager Test
• Lazy Test
• Assertion Roulette
• Indirect Testing
• For Testers Only
• Sensitive Equality
• Test Code Duplication
Inappropriate assertions
• Duplication between test method
and TestCase names
• Dependent test methods
