Rediscovering modularity - JavaOne Brazil 2012

123
Rediscovering Modularity Chris Chedgey Structure101 @chedgey JavaOne Brazil December 2012

description

Similar to previous talks, but I added some slides at the end to represent the demos.

Transcript of Rediscovering modularity - JavaOne Brazil 2012

Page 2: Rediscovering modularity - JavaOne Brazil 2012

Architecture

Modularity

Structure

Mud

• defined, communicated, enforced

• interfaces, responsibility

• encapsulation, coupling

Page 3: Rediscovering modularity - JavaOne Brazil 2012

Modularity Manage complexity

by

Encapsulation

Page 4: Rediscovering modularity - JavaOne Brazil 2012

Abstraction

Modularity Manage complexity

by

Encapsulation

Page 5: Rediscovering modularity - JavaOne Brazil 2012

Abstraction

Interface/hiding

Modularity Manage complexity

by

Encapsulation

Page 6: Rediscovering modularity - JavaOne Brazil 2012

Abstraction

Interface/hiding

Cohesion

Modularity Manage complexity

by

Encapsulation

Page 7: Rediscovering modularity - JavaOne Brazil 2012

Abstraction

Interface/hiding

Cohesion

Clear responsibility

Modularity Manage complexity

by

Encapsulation

Page 8: Rediscovering modularity - JavaOne Brazil 2012

Abstraction

Interface/hiding

Cohesion

Coupling Clear responsibility

Modularity Manage complexity

by

Encapsulation

Page 9: Rediscovering modularity - JavaOne Brazil 2012
Page 10: Rediscovering modularity - JavaOne Brazil 2012
Page 11: Rediscovering modularity - JavaOne Brazil 2012

Encapsulation Abstraction

Interfaces/hiding

Cohesion

Coupling Clear responsibility

Page 12: Rediscovering modularity - JavaOne Brazil 2012

Encapsulation Abstraction

Interfaces/hiding

Cohesion

Coupling Clear responsibility

Modularity

Page 13: Rediscovering modularity - JavaOne Brazil 2012

Composition

Complexity

Page 14: Rediscovering modularity - JavaOne Brazil 2012

Composition

Complexity

Cyclomatic

Complexity

(CC)

Page 15: Rediscovering modularity - JavaOne Brazil 2012
Page 16: Rediscovering modularity - JavaOne Brazil 2012
Page 17: Rediscovering modularity - JavaOne Brazil 2012
Page 18: Rediscovering modularity - JavaOne Brazil 2012
Page 19: Rediscovering modularity - JavaOne Brazil 2012
Page 20: Rediscovering modularity - JavaOne Brazil 2012

Encapsulation Abstraction

Interface/hiding

Cohesion

Coupling Clear responsibility

Page 21: Rediscovering modularity - JavaOne Brazil 2012

Encapsulation Abstraction

Interface/hiding

Cohesion

Coupling Clear responsibility

Modularity

Page 22: Rediscovering modularity - JavaOne Brazil 2012
Page 23: Rediscovering modularity - JavaOne Brazil 2012

Composition

Complexity

Cyclomatic

Complexity

(CC)

Page 24: Rediscovering modularity - JavaOne Brazil 2012

Composition

Complexity

Compositional

Complexity

(CC)

Page 25: Rediscovering modularity - JavaOne Brazil 2012
Page 26: Rediscovering modularity - JavaOne Brazil 2012
Page 27: Rediscovering modularity - JavaOne Brazil 2012
Page 28: Rediscovering modularity - JavaOne Brazil 2012

Encapsulation Abstraction

Interface/hiding?

Cohesion

Coupling?

Clear responsibility

Page 29: Rediscovering modularity - JavaOne Brazil 2012

Encapsulation Abstraction

Interface/hiding?

Cohesion

Coupling?

Clear responsibility

Modularity?

Page 30: Rediscovering modularity - JavaOne Brazil 2012

Composition

Complexity

Compositional

Complexity

(CC)

Page 31: Rediscovering modularity - JavaOne Brazil 2012

Composition

Complexity

Compositional

Complexity

(CC)

Hierarchical

=> Scalable

Page 32: Rediscovering modularity - JavaOne Brazil 2012

Coupling

Page 33: Rediscovering modularity - JavaOne Brazil 2012

Coupling

Dependencies

Page 34: Rediscovering modularity - JavaOne Brazil 2012

Dependencies

Page 35: Rediscovering modularity - JavaOne Brazil 2012

Dependencies

Page 36: Rediscovering modularity - JavaOne Brazil 2012
Page 37: Rediscovering modularity - JavaOne Brazil 2012
Page 38: Rediscovering modularity - JavaOne Brazil 2012
Page 39: Rediscovering modularity - JavaOne Brazil 2012

“Tangles”

Page 40: Rediscovering modularity - JavaOne Brazil 2012

“Tangles”

Page 41: Rediscovering modularity - JavaOne Brazil 2012
Page 42: Rediscovering modularity - JavaOne Brazil 2012
Page 43: Rediscovering modularity - JavaOne Brazil 2012
Page 44: Rediscovering modularity - JavaOne Brazil 2012
Page 45: Rediscovering modularity - JavaOne Brazil 2012
Page 46: Rediscovering modularity - JavaOne Brazil 2012
Page 47: Rediscovering modularity - JavaOne Brazil 2012
Page 48: Rediscovering modularity - JavaOne Brazil 2012
Page 49: Rediscovering modularity - JavaOne Brazil 2012
Page 50: Rediscovering modularity - JavaOne Brazil 2012
Page 51: Rediscovering modularity - JavaOne Brazil 2012
Page 52: Rediscovering modularity - JavaOne Brazil 2012

=

Not scalable!!

Page 53: Rediscovering modularity - JavaOne Brazil 2012

Ideally…

Page 54: Rediscovering modularity - JavaOne Brazil 2012

Ideally…

Start with a loose “architecture”

Page 55: Rediscovering modularity - JavaOne Brazil 2012

Ideally…

Start with a loose “architecture”

Let suitable architecture emerge, without “baggage”

At some point stronger, higher-level abstractions are needed

(~50Kloc – Martin, Foote)

Restructure to defined architecture

Iterate with development

Strengthen with growth

Page 56: Rediscovering modularity - JavaOne Brazil 2012

Ideally…

Start with a loose “architecture”

Let suitable architecture emerge, without “baggage”

Page 57: Rediscovering modularity - JavaOne Brazil 2012

Ideally…

Start with a loose “architecture”

Let suitable architecture emerge, without “baggage”

At some point stronger, higher-level abstractions are needed

(~50Kloc – Martin, Foote)

Page 58: Rediscovering modularity - JavaOne Brazil 2012

Ideally…

Start with a loose “architecture”

Let suitable architecture emerge, without “baggage”

At some point stronger, higher-level abstractions are needed

(~50Kloc – Martin, Foote)

Restructure to defined architecture

Page 59: Rediscovering modularity - JavaOne Brazil 2012

Ideally…

Start with a loose “architecture”

Let suitable architecture emerge, without “baggage”

At some point stronger, higher-level abstractions are needed

(~50Kloc – Martin, Foote)

Restructure to defined architecture

Iterate with development

Page 60: Rediscovering modularity - JavaOne Brazil 2012

Ideally…

Start with a loose “architecture”

Let suitable architecture emerge, without “baggage”

At some point stronger, higher-level abstractions are needed

(~50Kloc – Martin, Foote)

Restructure to defined architecture

Iterate with development

Strengthen with growth

Page 61: Rediscovering modularity - JavaOne Brazil 2012

0.7.2

Mar „04

Page 62: Rediscovering modularity - JavaOne Brazil 2012

0.8.6

Oct „04

Page 63: Rediscovering modularity - JavaOne Brazil 2012

0.8.7

Apr „05

Page 64: Rediscovering modularity - JavaOne Brazil 2012

Erosion

“Sometimes the developers manage to maintain this purity of design through the initial development and into the first release. More often something goes wrong. The software starts to rot like a piece of bad

meat.”

Bob Martin, “Agile Software Development”

Page 65: Rediscovering modularity - JavaOne Brazil 2012

0.8.8

May „05

Page 66: Rediscovering modularity - JavaOne Brazil 2012

1.0.0

Jun „06

Page 67: Rediscovering modularity - JavaOne Brazil 2012

1.3.0

Nov „07

Page 68: Rediscovering modularity - JavaOne Brazil 2012

1.3.5

Sep „08

Page 69: Rediscovering modularity - JavaOne Brazil 2012

Cost…

Page 70: Rediscovering modularity - JavaOne Brazil 2012

Cost…

Miserable developers

Page 71: Rediscovering modularity - JavaOne Brazil 2012

Cost…

Miserable developers

Cost per feature increases

Page 72: Rediscovering modularity - JavaOne Brazil 2012

Cost…

Miserable developers

Cost per feature increases

Unexpected impacts of change

Page 73: Rediscovering modularity - JavaOne Brazil 2012

Cost…

Miserable developers

Cost per feature increases

Unexpected impacts of change

Unreliable schedules

Page 74: Rediscovering modularity - JavaOne Brazil 2012

Cost…

Miserable developers

Cost per feature increases

Unexpected impacts of change

Unreliable schedules

Test cycles increase

Page 75: Rediscovering modularity - JavaOne Brazil 2012

Cost…

Miserable developers

Cost per feature increases

Unexpected impacts of change

Unreliable schedules

Test cycles increase

Reuse less

Page 76: Rediscovering modularity - JavaOne Brazil 2012

Cost…

Miserable developers

Cost per feature increases

Unexpected impacts of change

Unreliable schedules

Test cycles increase

Reuse less

Value of your code base declines

Page 77: Rediscovering modularity - JavaOne Brazil 2012

Technical Debt

Page 78: Rediscovering modularity - JavaOne Brazil 2012

Technical Debt

Page 79: Rediscovering modularity - JavaOne Brazil 2012
Page 80: Rediscovering modularity - JavaOne Brazil 2012
Page 81: Rediscovering modularity - JavaOne Brazil 2012
Page 82: Rediscovering modularity - JavaOne Brazil 2012
Page 83: Rediscovering modularity - JavaOne Brazil 2012
Page 84: Rediscovering modularity - JavaOne Brazil 2012
Page 85: Rediscovering modularity - JavaOne Brazil 2012
Page 86: Rediscovering modularity - JavaOne Brazil 2012

Abstraction

Page 87: Rediscovering modularity - JavaOne Brazil 2012

Abstraction

Page 88: Rediscovering modularity - JavaOne Brazil 2012

Abstraction

Page 89: Rediscovering modularity - JavaOne Brazil 2012

Abstraction

Page 90: Rediscovering modularity - JavaOne Brazil 2012

Abstraction

Page 91: Rediscovering modularity - JavaOne Brazil 2012

Abstraction

Page 92: Rediscovering modularity - JavaOne Brazil 2012

Abstraction

Page 93: Rediscovering modularity - JavaOne Brazil 2012

Abstraction

Page 94: Rediscovering modularity - JavaOne Brazil 2012

Refactoring Restructuring

Page 95: Rediscovering modularity - JavaOne Brazil 2012

Refactoring

• “Changing code without

modifying behavior to

improve nonfunctional

attributes.”

Restructuring

• “Reorganizing a code-base

without modifying the code to

improve modularity”

Page 96: Rediscovering modularity - JavaOne Brazil 2012

Refactoring

• “Changing code without

modifying behavior to

improve nonfunctional

attributes.”

• Code is readable

Restructuring

• “Reorganizing a code-base

without modifying the code to

improve modularity”

• Code-base is understandable

Page 97: Rediscovering modularity - JavaOne Brazil 2012

Refactoring

• “Changing code without

modifying behavior to

improve nonfunctional

attributes.”

• Code is readable

• A lot of invasive code editing

Restructuring

• “Reorganizing a code-base

without modifying the code to

improve modularity”

• Code-base is understandable

• Minimal invasive code editing

Page 98: Rediscovering modularity - JavaOne Brazil 2012

Refactoring

• “Changing code without modifying behavior to improve nonfunctional attributes.”

• Code is readable

• A lot of invasive code editing

• Scope: small worlds of a few classes at a time; what you see in the IDE.

Restructuring

• “Reorganizing a code-base without modifying the code to improve modularity”

• Code-base is understandable

• Minimal invasive code editing

• Scope: whole code base; what you don‟t see in the IDE

Page 99: Rediscovering modularity - JavaOne Brazil 2012

Retrofitting…

Page 100: Rediscovering modularity - JavaOne Brazil 2012

Retrofitting…

Physical or virtual?

Page 101: Rediscovering modularity - JavaOne Brazil 2012

Retrofitting…

Physical or virtual?

Top-down or bottom-up?

Page 102: Rediscovering modularity - JavaOne Brazil 2012

Retrofitting…

Physical or virtual?

Top-down or bottom-up?

Bust big class tangles

Page 103: Rediscovering modularity - JavaOne Brazil 2012

Retrofitting…

Physical or virtual?

Top-down or bottom-up?

Bust big class tangles

Create a structured model (levelized+CC) (use strategies)

Page 104: Rediscovering modularity - JavaOne Brazil 2012

Retrofitting…

Physical or virtual?

Top-down or bottom-up?

Bust big class tangles

Create a structured model (levelized+CC) (use strategies)

Adjust module boundaries (strengthen abstractions)

Page 105: Rediscovering modularity - JavaOne Brazil 2012

Retrofitting…

Physical or virtual?

Top-down or bottom-up?

Bust big class tangles

Create a structured model (levelized+CC) (use strategies)

Adjust module boundaries (strengthen abstractions)

Define layers, visibility

Page 106: Rediscovering modularity - JavaOne Brazil 2012

Retrofitting…

Physical or virtual?

Top-down or bottom-up?

Bust big class tangles

Create a structured model (levelized+CC) (use strategies)

Adjust module boundaries (strengthen abstractions)

Define layers, visibility

Repair violations in the implementation levels

Page 107: Rediscovering modularity - JavaOne Brazil 2012
Page 108: Rediscovering modularity - JavaOne Brazil 2012

Structure101

Page 109: Rediscovering modularity - JavaOne Brazil 2012

Restructure101

Structure101

Page 110: Rediscovering modularity - JavaOne Brazil 2012

Restructure101

Structure101

Page 111: Rediscovering modularity - JavaOne Brazil 2012

Restructure101

Structure101

Page 112: Rediscovering modularity - JavaOne Brazil 2012
Page 113: Rediscovering modularity - JavaOne Brazil 2012

Restructure code-base here …

Page 114: Rediscovering modularity - JavaOne Brazil 2012

Restructure code-base here …

…to remove

complexity

here …

Page 115: Rediscovering modularity - JavaOne Brazil 2012

Restructure code-base here …

…to remove

complexity

here …

…and create

IDE actions

here.

Page 116: Rediscovering modularity - JavaOne Brazil 2012
Page 117: Rediscovering modularity - JavaOne Brazil 2012

Detect structural debt

here…

Page 118: Rediscovering modularity - JavaOne Brazil 2012
Page 119: Rediscovering modularity - JavaOne Brazil 2012

Define visibility

and layering

rules here…

Page 120: Rediscovering modularity - JavaOne Brazil 2012
Page 121: Rediscovering modularity - JavaOne Brazil 2012

Communicate

and enforce at

edit and build

time…

Page 122: Rediscovering modularity - JavaOne Brazil 2012

Communicate

and enforce at

edit and build

time…

Page 123: Rediscovering modularity - JavaOne Brazil 2012

Architecture

Modularity

Structure

Mud

• defined, communicated, enforced

• interfaces, responsibility

• encapsulation, coupling

Chris Chedgey Structure101 @chedgey

Thank you!