SlideShare una empresa de Scribd logo
1 de 110
Descargar para leer sin conexión
Retrofitting
Architecture
(video)

Chris Chedgey
Structure101
@chedgey

Oredev
November 9th 2012, Malmo
Architecture   •   defined, communicated, enforced

 Modularity    •   interfaces, responsibility

  Structure    •   encapsulation, coupling

       Mud     •
Modularity
Manage complexity
       by
Encapsulation
Information hiding



  Modularity
  Manage complexity
         by
  Encapsulation
Information hiding
Defined interface



                Modularity
                Manage complexity
                       by
                Encapsulation
Information hiding
Defined interface
                                 Clear responsibility


                Modularity
                Manage complexity
                       by
                Encapsulation
Information hiding
Defined interface
                                 Clear responsibility


                Modularity
                Manage complexity
                       by
                Encapsulation
 Cohesion
Information hiding
Defined interface
                                 Clear responsibility


                Modularity
                Manage complexity
                       by
                Encapsulation
 Cohesion
                    Coupling
Information hiding
Defined interface
                                 Clear responsibility


                Modularity
                Manage complexity
                       by
                Encapsulation
 Cohesion
                    Coupling          Abstraction
Information hiding Clear responsibility
 Defined interface




                         Coupling Abstraction
Encapsulation
              Cohesion
Information hiding Clear responsibility
 Defined interface




                         Coupling Abstraction
Encapsulation
              Cohesion        Modularity
Complexity

             Composition
Complexity

                Composition

   Cyclomatic
   Complexity
     (CC)
(same problem)
Information hiding Clear responsibility
 Defined interface




                         Coupling Abstraction
Encapsulation
              Cohesion        Modularity
Complexity

                Composition

   Cyclomatic
   Complexity
     (CC)
Complexity

                Composition
Compositional
 Complexity
   (CC)
Namespaces



Classes
Information hiding?Clear responsibility
 Defined interface?




                         Coupling? Abstraction
Encapsulation
              Cohesion       Modularity?
Complexity

                Composition

Compositional
 Complexity
   (CC)
Complexity

                Composition

Compositional
 Complexity       +Hierarchical
   (CC)            => Scalable
Coupling
Dependencies
Dependencies
“Tangles”
=
=


    Not scalable!!
Ideally…
Start with a loose “architecture”
Ideally…
Start with a loose “architecture”
Let suitable architecture emerge, without “baggage”
Ideally…
Start with a loose “architecture”
Let suitable architecture emerge, without “baggage”
At some point stronger, higher-level abstractions are needed
Ideally…
Start with a loose “architecture”
Let suitable architecture emerge, without “baggage”
At some point stronger, higher-level abstractions are needed
(~50Kloc – Martin, Foote)
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
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
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
0.7.2
Mar „04
0.8.6
Oct „04
0.8.7
Apr „05
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”
0.8.8
May „05
1.0.0
Jun „06
1.3.0
Nov „07
1.3.5
Sep „08
Cost…
Cost…
  Miserable developers
Cost…
  Miserable developers
  Cost per feature increases
Cost…
  Miserable developers
  Cost per feature increases
  Unexpected impacts of change
Cost…
  Miserable developers
  Cost per feature increases
  Unexpected impacts of change
  Unreliable schedules
Cost…
  Miserable developers
  Cost per feature increases
  Unexpected impacts of change
  Unreliable schedules
  Test cycles increase
Cost…
  Miserable developers
  Cost per feature increases
  Unexpected impacts of change
  Unreliable schedules
  Test cycles increase
  Reuse less
Cost…
  Miserable developers
  Cost per feature increases
  Unexpected impacts of change
  Unreliable schedules
  Test cycles increase
  Reuse less
  Value of your code base declines
Technical Debt
Technical Debt
Technical Debt
Technical Debt
Abstraction
Abstraction
Abstraction
Abstraction
Abstraction
Abstraction
Abstraction
Abstraction
Refactoring   Restructuring
Refactoring                  Restructuring
•   “Changing code without   •   “Reorganizing a code-base
    modifying behavior to        without modifying the code to
    improve nonfunctional        improve modularity”
    attributes.”
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
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
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.
Retrofitting…
Retrofitting…
Physical or virtual?
Retrofitting…
Physical or virtual?
Top-down or bottom-up?
Retrofitting…
Physical or virtual?
Top-down or bottom-up?
Bust big class tangles
Retrofitting…
Physical or virtual?
Top-down or bottom-up?
Bust big class tangles
Create a structured model (levelized+CC) (use strategies)
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)
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
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
Structure101
Restructure101

  Structure101
Restructure101

  Structure101
Restructure101

  Structure101
Architecture   •   defined, communicated, enforced

 Modularity    •   interfaces, responsibility

  Structure    •   encapsulation, coupling

       Mud     •
                                Thank you!
                                Chris Chedgey
                                Structure101
                                @chedgey
                                (video)

Más contenido relacionado

Destacado

Architectural drafting-Ar.Archana Sreedharan
Architectural drafting-Ar.Archana SreedharanArchitectural drafting-Ar.Archana Sreedharan
Architectural drafting-Ar.Archana Sreedharanarchsree
 
Retrofitting of RC Beam Column Joint
Retrofitting of RC Beam Column JointRetrofitting of RC Beam Column Joint
Retrofitting of RC Beam Column JointDishamk
 
Thesis on earth architecture
Thesis on earth architectureThesis on earth architecture
Thesis on earth architectureBhavi Vador
 
Seismic retrofit of building structures
Seismic retrofit of building structuresSeismic retrofit of building structures
Seismic retrofit of building structuresgopi1991
 
Repair and strengthening of reinforced concrete beam column joints
Repair and strengthening of reinforced concrete beam column jointsRepair and strengthening of reinforced concrete beam column joints
Repair and strengthening of reinforced concrete beam column jointsPavan Kumar N
 
Repair and Retrofit on Beam and Column Joints
Repair and Retrofit on Beam and Column JointsRepair and Retrofit on Beam and Column Joints
Repair and Retrofit on Beam and Column Jointsamerald24
 
Seismic retrofit methods
Seismic retrofit methodsSeismic retrofit methods
Seismic retrofit methodsPaul McMullin
 

Destacado (14)

Egyptian architecture
Egyptian architectureEgyptian architecture
Egyptian architecture
 
Ppt mud
Ppt mudPpt mud
Ppt mud
 
Architectural drafting-Ar.Archana Sreedharan
Architectural drafting-Ar.Archana SreedharanArchitectural drafting-Ar.Archana Sreedharan
Architectural drafting-Ar.Archana Sreedharan
 
Mudarchitecture,
Mudarchitecture,Mudarchitecture,
Mudarchitecture,
 
Retrofitting of RC Beam Column Joint
Retrofitting of RC Beam Column JointRetrofitting of RC Beam Column Joint
Retrofitting of RC Beam Column Joint
 
Retrrofitting
RetrrofittingRetrrofitting
Retrrofitting
 
Thesis on earth architecture
Thesis on earth architectureThesis on earth architecture
Thesis on earth architecture
 
Seismic retrofit of building structures
Seismic retrofit of building structuresSeismic retrofit of building structures
Seismic retrofit of building structures
 
Repair and strengthening of reinforced concrete beam column joints
Repair and strengthening of reinforced concrete beam column jointsRepair and strengthening of reinforced concrete beam column joints
Repair and strengthening of reinforced concrete beam column joints
 
Repair and Retrofit on Beam and Column Joints
Repair and Retrofit on Beam and Column JointsRepair and Retrofit on Beam and Column Joints
Repair and Retrofit on Beam and Column Joints
 
Seismic retrofit methods
Seismic retrofit methodsSeismic retrofit methods
Seismic retrofit methods
 
VERNACULAR ARCHITECTURE
VERNACULAR ARCHITECTUREVERNACULAR ARCHITECTURE
VERNACULAR ARCHITECTURE
 
Concrete repair
Concrete repairConcrete repair
Concrete repair
 
Adobe construction
Adobe constructionAdobe construction
Adobe construction
 

Similar a Retrofitting Architecture - Oredev 2012

Rediscovering Modularity - JFall 2012 version
Rediscovering Modularity - JFall 2012 versionRediscovering Modularity - JFall 2012 version
Rediscovering Modularity - JFall 2012 versionChris Chedgey
 
Rediscovering Modularity - .NET Edition
Rediscovering Modularity - .NET EditionRediscovering Modularity - .NET Edition
Rediscovering Modularity - .NET EditionChris Chedgey
 
Digital Transformation with Kubernetes, Containers, and Microservices
Digital Transformation with Kubernetes, Containers, and MicroservicesDigital Transformation with Kubernetes, Containers, and Microservices
Digital Transformation with Kubernetes, Containers, and MicroservicesLightbend
 
Stuff About CQRS
Stuff About CQRSStuff About CQRS
Stuff About CQRSthinkddd
 
GoF J2EE Design Patterns
GoF J2EE Design PatternsGoF J2EE Design Patterns
GoF J2EE Design PatternsThanh Nguyen
 
Bridging the Divide between Architecture and Code (Germany JUGs version)
Bridging the Divide between Architecture and Code (Germany JUGs version)Bridging the Divide between Architecture and Code (Germany JUGs version)
Bridging the Divide between Architecture and Code (Germany JUGs version)Chris Chedgey
 
Framework Engineering_Final
Framework Engineering_FinalFramework Engineering_Final
Framework Engineering_FinalYoungSu Son
 
Bridging the divide between architecture and code (US version)
Bridging the divide between architecture and code (US version)Bridging the divide between architecture and code (US version)
Bridging the divide between architecture and code (US version)Chris Chedgey
 
Agile integration: Decomposing the monolith
Agile integration: Decomposing the monolithAgile integration: Decomposing the monolith
Agile integration: Decomposing the monolithJudy Breedlove
 
Knowledge Management with K-Infinity
Knowledge Management with K-InfinityKnowledge Management with K-Infinity
Knowledge Management with K-InfinityESUG
 
Phil Bracikowski [InfluxData] | InfluxDB Cloud Durability Walkthrough | Influ...
Phil Bracikowski [InfluxData] | InfluxDB Cloud Durability Walkthrough | Influ...Phil Bracikowski [InfluxData] | InfluxDB Cloud Durability Walkthrough | Influ...
Phil Bracikowski [InfluxData] | InfluxDB Cloud Durability Walkthrough | Influ...InfluxData
 
Code Structural Analysis
Code Structural AnalysisCode Structural Analysis
Code Structural AnalysisEduards Sizovs
 
Code Structural Analysis
Code Structural AnalysisCode Structural Analysis
Code Structural AnalysisDmitry Buzdin
 
Agile Architecture Tech And Patterns
Agile Architecture   Tech And PatternsAgile Architecture   Tech And Patterns
Agile Architecture Tech And Patternspragkirk
 
Cut your Dependencies with Dependency Injection - .NET User Group Osnabrueck
Cut your Dependencies with Dependency Injection - .NET User Group OsnabrueckCut your Dependencies with Dependency Injection - .NET User Group Osnabrueck
Cut your Dependencies with Dependency Injection - .NET User Group OsnabrueckTheo Jungeblut
 
Microservices, Kubernetes, and Application Modernization Done Right
Microservices, Kubernetes, and Application Modernization Done RightMicroservices, Kubernetes, and Application Modernization Done Right
Microservices, Kubernetes, and Application Modernization Done RightLightbend
 
Paolo Kreth - Persistence layers for microservices – the converged database a...
Paolo Kreth - Persistence layers for microservices – the converged database a...Paolo Kreth - Persistence layers for microservices – the converged database a...
Paolo Kreth - Persistence layers for microservices – the converged database a...matteo mazzeri
 
After Agile, DevOps, and Lean IT: Modern Methodology in the Age of Disruption
After Agile, DevOps, and Lean IT: Modern Methodology in the Age of DisruptionAfter Agile, DevOps, and Lean IT: Modern Methodology in the Age of Disruption
After Agile, DevOps, and Lean IT: Modern Methodology in the Age of DisruptionAtlassian
 
Infrastructure as Microservices - OReillySACon London 2016
Infrastructure as Microservices - OReillySACon London 2016Infrastructure as Microservices - OReillySACon London 2016
Infrastructure as Microservices - OReillySACon London 2016Kief Morris
 

Similar a Retrofitting Architecture - Oredev 2012 (20)

Rediscovering Modularity - JFall 2012 version
Rediscovering Modularity - JFall 2012 versionRediscovering Modularity - JFall 2012 version
Rediscovering Modularity - JFall 2012 version
 
Rediscovering Modularity - .NET Edition
Rediscovering Modularity - .NET EditionRediscovering Modularity - .NET Edition
Rediscovering Modularity - .NET Edition
 
Digital Transformation with Kubernetes, Containers, and Microservices
Digital Transformation with Kubernetes, Containers, and MicroservicesDigital Transformation with Kubernetes, Containers, and Microservices
Digital Transformation with Kubernetes, Containers, and Microservices
 
Stuff About CQRS
Stuff About CQRSStuff About CQRS
Stuff About CQRS
 
GoF J2EE Design Patterns
GoF J2EE Design PatternsGoF J2EE Design Patterns
GoF J2EE Design Patterns
 
Bridging the Divide between Architecture and Code (Germany JUGs version)
Bridging the Divide between Architecture and Code (Germany JUGs version)Bridging the Divide between Architecture and Code (Germany JUGs version)
Bridging the Divide between Architecture and Code (Germany JUGs version)
 
Framework Engineering_Final
Framework Engineering_FinalFramework Engineering_Final
Framework Engineering_Final
 
Bridging the divide between architecture and code (US version)
Bridging the divide between architecture and code (US version)Bridging the divide between architecture and code (US version)
Bridging the divide between architecture and code (US version)
 
Agile integration: Decomposing the monolith
Agile integration: Decomposing the monolithAgile integration: Decomposing the monolith
Agile integration: Decomposing the monolith
 
Knowledge Management with K-Infinity
Knowledge Management with K-InfinityKnowledge Management with K-Infinity
Knowledge Management with K-Infinity
 
Phil Bracikowski [InfluxData] | InfluxDB Cloud Durability Walkthrough | Influ...
Phil Bracikowski [InfluxData] | InfluxDB Cloud Durability Walkthrough | Influ...Phil Bracikowski [InfluxData] | InfluxDB Cloud Durability Walkthrough | Influ...
Phil Bracikowski [InfluxData] | InfluxDB Cloud Durability Walkthrough | Influ...
 
Design Principles
Design PrinciplesDesign Principles
Design Principles
 
Code Structural Analysis
Code Structural AnalysisCode Structural Analysis
Code Structural Analysis
 
Code Structural Analysis
Code Structural AnalysisCode Structural Analysis
Code Structural Analysis
 
Agile Architecture Tech And Patterns
Agile Architecture   Tech And PatternsAgile Architecture   Tech And Patterns
Agile Architecture Tech And Patterns
 
Cut your Dependencies with Dependency Injection - .NET User Group Osnabrueck
Cut your Dependencies with Dependency Injection - .NET User Group OsnabrueckCut your Dependencies with Dependency Injection - .NET User Group Osnabrueck
Cut your Dependencies with Dependency Injection - .NET User Group Osnabrueck
 
Microservices, Kubernetes, and Application Modernization Done Right
Microservices, Kubernetes, and Application Modernization Done RightMicroservices, Kubernetes, and Application Modernization Done Right
Microservices, Kubernetes, and Application Modernization Done Right
 
Paolo Kreth - Persistence layers for microservices – the converged database a...
Paolo Kreth - Persistence layers for microservices – the converged database a...Paolo Kreth - Persistence layers for microservices – the converged database a...
Paolo Kreth - Persistence layers for microservices – the converged database a...
 
After Agile, DevOps, and Lean IT: Modern Methodology in the Age of Disruption
After Agile, DevOps, and Lean IT: Modern Methodology in the Age of DisruptionAfter Agile, DevOps, and Lean IT: Modern Methodology in the Age of Disruption
After Agile, DevOps, and Lean IT: Modern Methodology in the Age of Disruption
 
Infrastructure as Microservices - OReillySACon London 2016
Infrastructure as Microservices - OReillySACon London 2016Infrastructure as Microservices - OReillySACon London 2016
Infrastructure as Microservices - OReillySACon London 2016
 

Retrofitting Architecture - Oredev 2012