Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

109
Rediscovering Modularity Chris Chedgey Structure101 @chedgey Stuttgart, Munich, Nuremberg November 20 th 22 nd 2012

description

 

Transcript of Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Page 1: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Rediscovering Modularity Chris Chedgey Structure101 @chedgey Stuttgart, Munich, Nuremberg November 20th – 22nd 2012

Page 2: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Modularity Manage complexity

by

Encapsulation

Page 3: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Information hiding

Modularity Manage complexity

by

Encapsulation

Page 4: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Defined interface

Information hiding

Modularity Manage complexity

by

Encapsulation

Page 5: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Defined interface

Information hiding

Clear responsibility

Modularity Manage complexity

by

Encapsulation

Page 6: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Defined interface

Information hiding

Cohesion

Clear responsibility

Modularity Manage complexity

by

Encapsulation

Page 7: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Defined interface

Information hiding

Cohesion Coupling

Clear responsibility

Modularity Manage complexity

by

Encapsulation

Page 8: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Abstraction

Defined interface

Information hiding

Cohesion Coupling

Clear responsibility

Modularity Manage complexity

by

Encapsulation

Page 9: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 10: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 11: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Encapsulation Abstraction

Defined interface

Information hiding

Cohesion

Coupling

Clear responsibility

Page 12: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Encapsulation Abstraction

Defined interface

Information hiding

Cohesion

Coupling

Clear responsibility

Modularity

Page 13: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Composition

Complexity

Page 14: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Composition

Complexity

Cyclomatic

Complexity

(CC)

Page 15: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 16: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 17: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 18: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 19: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

(same problem)

Page 20: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 21: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Encapsulation Abstraction

Defined interface

Information hiding

Cohesion

Coupling

Clear responsibility

Modularity

Page 22: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 23: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Composition

Complexity

Cyclomatic

Complexity

(CC)

Page 24: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Composition

Complexity

Compositional

Complexity

(CC)

Page 25: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 26: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 27: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Classes

Packages

Page 28: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Encapsulation Abstraction

Defined interface?

Information hiding?

Cohesion

Coupling?

Clear responsibility

Modularity?

Page 29: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Composition

Complexity

Compositional

Complexity

(CC)

Page 30: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Composition

Complexity

Compositional

Complexity

(CC)

+Hierarchical

=> Scalable

Page 31: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Coupling

Page 32: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Dependencies

Page 34: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 35: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 36: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

“Tangles”

Page 37: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 38: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 39: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 40: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 41: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 42: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 43: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 44: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 45: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 46: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 47: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

=

Page 48: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

=

Not scalable!!

Page 49: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Ideally…

Start with a loose “architecture”

Page 50: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Ideally…

Start with a loose “architecture”

Let suitable architecture emerge, without “baggage”

Page 51: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Ideally…

Start with a loose “architecture”

Let suitable architecture emerge, without “baggage”

At some point stronger, higher-level abstractions are needed

Page 52: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 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 53: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 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 54: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 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 55: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 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 - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

0.7.2

Mar „04

Page 57: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

0.8.6

Oct „04

Page 58: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

0.8.7

Apr „05

Page 59: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 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 60: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

0.8.8

May „05

Page 61: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

1.0.0

Jun „06

Page 62: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

1.3.0

Nov „07

Page 63: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

1.3.5

Sep „08

Page 64: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Cost…

Page 65: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Cost…

Miserable developers

Page 66: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Cost…

Miserable developers

Cost per feature increases

Page 67: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Cost…

Miserable developers

Cost per feature increases

Unexpected impacts of change

Page 68: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Cost…

Miserable developers

Cost per feature increases

Unexpected impacts of change

Unreliable schedules

Page 69: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Cost…

Miserable developers

Cost per feature increases

Unexpected impacts of change

Unreliable schedules

Test cycles increase

Page 70: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Cost…

Miserable developers

Cost per feature increases

Unexpected impacts of change

Unreliable schedules

Test cycles increase

Reuse less

Page 71: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 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 72: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Technical Debt

Page 73: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Technical Debt

Page 74: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Technical Debt

Page 75: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Technical Debt

Page 76: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 77: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 78: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 79: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 80: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 81: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 82: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 83: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Abstraction

Page 84: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Abstraction

Page 85: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Abstraction

Page 86: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Abstraction

Page 87: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Abstraction

Page 88: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Abstraction

Page 89: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Abstraction

Page 90: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Abstraction

Page 91: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Refactoring Restructuring

Page 92: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Refactoring

• “Changing code without

modifying behavior to

improve nonfunctional

attributes.”

Restructuring

• “Reorganizing a code-base

without modifying the code to

improve modularity”

Page 93: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 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 94: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 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 95: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 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 96: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Retrofitting…

Page 97: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Retrofitting…

Physical or virtual?

Page 98: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Retrofitting…

Physical or virtual?

Top-down or bottom-up?

Page 99: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Retrofitting…

Physical or virtual?

Top-down or bottom-up?

Bust big class tangles

Page 100: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Retrofitting…

Physical or virtual?

Top-down or bottom-up?

Bust big class tangles

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

Page 101: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 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 102: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 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 103: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 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 104: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012
Page 105: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Structure101

Page 106: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Restructure101

Structure101

Page 107: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Restructure101

Structure101

Visualization

Page 108: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Restructure101

Structure101

Page 109: Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, November 2012

Architecture

Modularity

Structure

Mud

• defined, communicated, enforced

• interfaces, responsibility

• encapsulation, coupling

Thank you! Structure101

@chedgey