51. Ideally…
Start with a loose “architecture”
Let suitable architecture emerge, without “baggage”
52. Ideally…
Start with a loose “architecture”
Let suitable architecture emerge, without “baggage”
At some point stronger, higher-level abstractions are needed
53. Ideally…
Start with a loose “architecture”
Let suitable architecture emerge, without “baggage”
At some point stronger, higher-level abstractions are needed
(~50Kloc – Martin, Foote)
54. 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
55. 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
56. 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
60. 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”
68. Cost…
Miserable developers
Cost per feature increases
Unexpected impacts of change
69. Cost…
Miserable developers
Cost per feature increases
Unexpected impacts of change
Unreliable schedules
70. Cost…
Miserable developers
Cost per feature increases
Unexpected impacts of change
Unreliable schedules
Test cycles increase
71. Cost…
Miserable developers
Cost per feature increases
Unexpected impacts of change
Unreliable schedules
Test cycles increase
Reuse less
72. Cost…
Miserable developers
Cost per feature increases
Unexpected impacts of change
Unreliable schedules
Test cycles increase
Reuse less
Value of your code base declines
93. Refactoring Restructuring
• “Changing code without • “Reorganizing a code-base
modifying behavior to without modifying the code to
improve nonfunctional improve modularity”
attributes.”
94. Refactoring Restructuring
• “Changing code without • “Reorganizing a code-base
modifying behavior to without modifying the code to
improve nonfunctional improve modularity”
attributes.”
• Code-base is understandable
• Code is readable
95. Refactoring Restructuring
• “Changing code without • “Reorganizing a code-base
modifying behavior to without modifying the code to
improve nonfunctional improve modularity”
attributes.”
• Code-base is understandable
• Code is readable
• Minimal invasive code editing
• A lot of invasive code editing
96. Refactoring Restructuring
• “Changing code without • “Reorganizing a code-base
modifying behavior to improve without modifying the code to
nonfunctional attributes.” improve modularity”
• Code is readable • Code-base is understandable
• A lot of invasive code editing • Minimal invasive code editing
• Scope: small worlds of a few • Scope: whole code base; what
classes at a time; what you see you don‟t see in the IDE
in the IDE.
102. 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)
103. 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
104. 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