Agile Software Architecture

852 views

Published on

Published in: Technology, News & Politics
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
852
On SlideShare
0
From Embeds
0
Number of Embeds
44
Actions
Shares
0
Downloads
18
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Agile Software Architecture

  1. 1. Agile Software Architecture <ul><ul><ul><ul><ul><li>Cesario Ramos </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>04-2009 </li></ul></ul></ul></ul></ul>
  2. 2. <ul><li>Code focussed </li></ul><ul><li>Do what is important now </li></ul><ul><li>Evolves during the project </li></ul><ul><li>Defers Implementation </li></ul><ul><li>Documentation focussed </li></ul><ul><li>Do what is important in the long term </li></ul><ul><li>Defined upfront </li></ul><ul><li>Includes Implementation </li></ul>Agile Architecture Classic Architecture
  3. 3. Why agile software architecture?
  4. 4. <ul><li>Deliver Fast </li></ul><ul><ul><li>Increase ROI. </li></ul></ul><ul><ul><li>Early validation of your business case. </li></ul></ul><ul><ul><li>Give customers what they want when they want it. </li></ul></ul>
  5. 5. <ul><li>Defer Commitment </li></ul><ul><ul><li>Reduce risk. </li></ul></ul><ul><ul><li>Decide based on most possible knowledge. </li></ul></ul><ul><ul><li>Keep yours and the customers options open. </li></ul></ul>
  6. 6. <ul><li>Eliminate Waste </li></ul><ul><ul><li>Support something that does not add value now. </li></ul></ul><ul><ul><li>Have the architecture slow you down </li></ul></ul>
  7. 7. so we need sw architecture to... <ul><li>Be the simplest solution to support the current functionality. </li></ul><ul><li>Change without increasing risk or waste. </li></ul><ul><li>Change economically. </li></ul><ul><li>Change without making the software worse. </li></ul><ul><li>Evolve in early and refine later iterations. </li></ul>
  8. 8. Comparing with civil engineering
  9. 9. <ul><li>Based on concrete analysis using physics and mathematics. </li></ul><ul><li>Based on things you know and change slowly. </li></ul><ul><li>Plan, Do, Review. </li></ul>Plan the work, work the plan
  10. 10. <ul><li>Requirements </li></ul><ul><li>Design </li></ul><ul><li>Coding </li></ul><ul><li>Testing </li></ul><ul><li>Release </li></ul><ul><li>Analysis </li></ul><ul><li>Design </li></ul><ul><li>Construction </li></ul><ul><li>Inspection </li></ul><ul><li>Release </li></ul>Software Development Civil Engineering Coding is NOT Construction
  11. 11. and then.... <ul><li>When do we test our requirements? </li></ul><ul><li>When do we test our design? </li></ul><ul><li>What if we overdo it? </li></ul><ul><li>How do you handle changes? </li></ul><ul><li>Requirements </li></ul><ul><li>Architecture and Design </li></ul><ul><li>Coding </li></ul><ul><li>Testing </li></ul><ul><li>Release </li></ul>
  12. 12. How to create agile software architecture?
  13. 13. High level guidelines. <ul><li>It’s helpful to know the functional modules needed to do the kind of business at hand. </li></ul><ul><li>It’s helpful to know your current state and to know the desired future state modules architecture. (based in info known at the time.) </li></ul><ul><li>You should include in the release plan the steps needed to go from current state to future state. </li></ul><ul><ul><li>Consider ROI in the decision making process </li></ul></ul><ul><li>Work on architectural modules only when actually needed. </li></ul><ul><li>Evolve the architecture during the various releases </li></ul><ul><ul><li>Do not let quality decay, Refactor to the Open Closed. </li></ul></ul><ul><li>Validate, adapt and re-plan architecture. </li></ul>
  14. 14. <ul><li>Needed modules to do the business at hand? </li></ul>
  15. 15. DCI Architecture <ul><li>What the system IS </li></ul><ul><ul><li>Captures what is stable </li></ul></ul><ul><ul><li>The domain classes </li></ul></ul><ul><li>What the system DOES </li></ul><ul><ul><li>User stories. </li></ul></ul><ul><ul><li>Business objects. </li></ul></ul>
  16. 16. <ul><li>Evolve the architecture? </li></ul>
  17. 17. Open Closed Principle <ul><li>A module should be open for extension and closed for modification </li></ul>
  18. 18. <ul><li>Refactoring as Fowler proposed </li></ul><ul><ul><li>Improving the design of existing code. </li></ul></ul><ul><li>Refactoring to be Open Closed. </li></ul><ul><ul><ul><li>For handling future requirements. </li></ul></ul></ul>Refactoring <ul><li>Provides Value by </li></ul><ul><ul><ul><li>Reducing Risk </li></ul></ul></ul><ul><ul><ul><li>Reducing Waste </li></ul></ul></ul>
  19. 19. Separation Of Concerns <ul><li>Low Coupling </li></ul><ul><ul><li>Minimal dependencies </li></ul></ul><ul><ul><li>Minimal side effects </li></ul></ul><ul><li>High Cohesion </li></ul><ul><ul><li>Single responsibility </li></ul></ul><ul><ul><li>One reason to change </li></ul></ul>
  20. 20. Tests Drive Design <ul><li>Supports you to look at your public API. </li></ul><ul><li>Supports you to think about cohesion. </li></ul><ul><li>Supports you to think about coupling. </li></ul><ul><li>Supports you to not produce redundancies. </li></ul>
  21. 21. Readable code <ul><li>public void advanceTurn() { </li></ul><ul><ul><li>if ( characterHavingCurrentTurn + 1 < p layableCharacters .size()) </li></ul></ul><ul><ul><ul><li>characterHavingCurrentTurn ++; </li></ul></ul></ul><ul><ul><li>else </li></ul></ul><ul><ul><ul><li>characterHavingCurrentTurn = 0; </li></ul></ul></ul><ul><li>} </li></ul>
  22. 22. Programming by Intention <ul><li>public void advanceTurn() { </li></ul><ul><ul><li>if (notAllCharactersInListHadTheirTurn()) </li></ul></ul><ul><ul><ul><li>nextCharacterInTheListGetsTheTurn(); </li></ul></ul></ul><ul><ul><li>else </li></ul></ul><ul><ul><ul><li>firstCharacterInTheListGetsTheTurn(); </li></ul></ul></ul><ul><li>} </li></ul><ul><li>private void firstCharacterInTheListGetsTheTurn() { </li></ul><ul><li>characterHavingCurrentTurn = 0; </li></ul><ul><li>} </li></ul><ul><li>private void nextCharacterInTheListGetsTheTurn() { </li></ul><ul><li>characterHavingCurrentTurn ++; </li></ul><ul><li>} </li></ul><ul><li>private boolean notAllCharactersInListHadTheirTurn() { </li></ul><ul><li>return characterHavingCurrentTurn + 1 < playableCharacters .size(); </li></ul><ul><li>} </li></ul>
  23. 23. Summary <ul><li>Agile Architecture helps you reduce risk and waste. </li></ul><ul><li>OO/XP principles and practices make evolving architecture possible. </li></ul><ul><li>Particular approach depends upon knowledge of domain, technology and project size. </li></ul>
  24. 24. Agile Software Architecture <ul><ul><ul><ul><ul><li>Cesario Ramos </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>04-2009 </li></ul></ul></ul></ul></ul>

×