Red, green,
… what now?!
@kevinrutherford
@jjeffries1
Primitive Obsession
Feature Envy
Sim
ulated
Polym
orphism
Lazy Class
Temporary Field
Inappropriate Intimacy
ShotgunSurgery
Data Clump
Long
M
ethod
Large Class
???
??? ???
???
???
???
???
RefusedBequest
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Connascence of ...
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Connascence of ...
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Connascence of ...
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Connascence of ...
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Connascence of ...
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Connascence of ...
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Connascence of ...
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Connascence of ...
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Connascence of ...
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Connascence of ...
Scanning a
single item
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Test: Code:
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Test: Code:CoEO
scan()scan()
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Test: Code:
CoV
CoEO
scan()scan()
5050
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Test: Code:CoEO
CoM
scan()scan()
int
int
int
Checkout with
an empty basket
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Test: Code:
CoM
int
int
int
unitPrice = 50
unitPrice = 50
int
CoA
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Test: Code:
CoM
int
int
int
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Test: Code:
Different items
have different
prices
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Test: Code:
string string
CoM
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Test: Code:
string string
balance.add()
balance.add()
CoM
CoA
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Test: Code:
“A”“A”
string string
balance.add()
balance.add()
CoV
CoM
CoA
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Test: Code:
CoV
“A”“A”
3030
string string
balance.add()
balance.add()
CoV
CoM
CoA
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Test: Code:
“A”“A”
string string
balance.add()
balance.add()
CoV
CoM
CoA
Money, MoneyMoney, Money
CoP
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Test: Code:
string string
balance.add()
balance.add()
CoM
CoA
Money, MoneyMoney, Money
CoP
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Test: Code:
string string
CoM
Map Map
CoM
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Test: Code:
Recap
Scanning a
single item
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Scanning has no
effect on the balance
Both classes know
the price = 50
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Introduce
Parameter{
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Scanning has no
effect on the balance
Everyone knows we use
an int to represent money
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Write a test{
Checkout with
an empty basket
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Everyone knows we use
an int to represent money
Common test
setup
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Introduce @Before
block{
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Everyone knows we use
an int to represent money
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Introduce Money class{
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Different items
have different
prices
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
balance.add()
called twice
Strings used to
represent product
codes
Everyone depends
on “A”
Everyone knows
the price of “B”
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Introduce
Parameter{
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
balance.add()
called twice
Strings used to
represent product
codes
Everyone depends
on “A”
Constructor parameters
are indistinguishable
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Introduce
Parameter{
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
balance.add()
called twice
Strings used to
represent product
codes
Constructor parameters
are indistinguishable
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Introduce a Map of
names to prices{
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Strings used to
represent product
codes
Map used to represent
the price list
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Introduce
PriceList{
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Introduce
ProductCode{
Name
Type
Meaning
Algorithm
Position
Execution Order
Timing
Value
Identity
1
2
3
4
5
6
7
8
9
Red, green,
… what now?!
@kevinrutherford
@jjeffries1

Red, green, ... what now?!