Ultimate agilisttokyo

  • View

  • Download

Embed Size (px)

Text of Ultimate agilisttokyo

  1. 1. Ultimate Agilist Tokyo Nov 17, 2012 How to be an Agile ProgrammerT s u y o s h i U s h i o121116
  2. 2. 121116
  3. 3. Think aboutDenition of Agile Programmer in this session121116
  4. 4. AgendaLearn about other denitionsDiscussionConclusion121116
  5. 5. Learn aboutother definitions121116
  6. 6. What is Agile Development?Agile software development is a group of software development methods based on iterative andincremental development, where requirements and solutions evolve through collaboration betweenself-organizing, cross-functional teams. It promotes adaptive planning, evolutionary developmentand delivery, a time-boxed iterative approach, and encourages rapid and exible response tochange. It is a conceptual framework that promotes foreseen interactions throughout the developmentcycle. The Agile Manifesto[1] introduced the term in 2001.WIKIPEDIA http://en.wikipedia.org/wiki/Agile_software_development121116
  7. 7. Agile Manifesto Value Principle 1. Our highest priority is to satisfy the customer through earlyand continuous delivery of valuable software. 2. Welcome changing requirements, even late in development.Individuals and interactions Agile processes harness change for the customers competitive advantage.over processes and tools 3. Deliver working software frequently, from a couple of weeks to acouple of months, with a preference to the shorter timescale. 4. Business people and developers must work together daily throughout the project.Working software over comprehensive 5. Build projects around motivated individuals. Give them the environment documentationand support they need, and trust them to get the job done. 6. The most efcient and effective method of conveying information toand within a development team is face-to-face conversation.Customer collaboration 7. Workingsoftware is the primary measure of progress. over contract negotiation 8. Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indenitely. 9. Continuous attention to technicalexcellence and good design enhances agility.Responding to change over10. Simplicity--the art of maximizing the amount of work not done--is essential.following a plan 11. The best architectures, requirements, and designs emerge from self-organizing teams. 12. At regular intervals, the team reects on howto become more effective, hen tunes and adjusts its behavior accordingly.121116
  8. 8. Analyze it121116
  9. 9. XP practices http://ullizee.wordpress.com/2009/11/02/extreme-programming-revisited-part-i/121116
  10. 10. five objectives for agile programmerContinuous Delivery of valuable software Embrace changeDeliver Working Software frequently Continuous attention to Technical Excellence and Good DesignCreate the best architecture, requirements and design emergeform Self-Organization-TeamProgrammer related Agile Manifesto 12 principles121116
  11. 11. Manifesto for software craftsmanship Not only working software, but also well-crafted software Not only responding to change, but also steadily adding value Not only individuals and interactions, but also a community of professionals Not only customer collaboration, but also productive partnerships http://manifesto.softwarecraftsmanship.org121116
  12. 12. ICAgile ICAgile exists to support education in the agile space.Use ICAgiles denitive learning roadmap to nd accredited coursesthat recognize students as they progress along their specialty paths. Fundamentals of AgileAgile Business Analysis+Value Management Agile ProjectManagement Agile Facilitation + CoachingAgile Software Design +Programming Agile Testing http://www.icagile.com/index.html121116
  13. 13. Learning AreasAgile Software Design +Programming1.1. Test Driven Development1.2. Good Design 1. Designing & Programming 1.3. Technical Debt1.4. Refactoring1.5. Legacy Code2.1. Acceptance Test 2. Testing2.2. Programming the test3.1. Collaboration 3. Teams and Behaviors 3.2. Collective Accountability3.3. Team Activity4.1. Function-Based Development 4. Structuring Work4.2. Planning 5. Environment 5.1. Leveraging Tools121116
  14. 14. five objectives andpracticesFive Objectives PracticesAgile Programmers mandatory skill Map121116
  15. 15. Discussion121116
  16. 16. Golden Circle Why is Vision is our gut has emotion and heartcreate something bigger then your self How is Mission brings up guiding principle Why What is RulesWhy time to market(ex) HowHow 12 principleshas practices What priacticesWhat1. Post What (Practice ex. TDD)is dynamic organic2. Post How (Principles ex 12 principles)3. Post Why (Guts, Visions ex. time to market)Agile programmer can choice from 12 principlesfor Why. and can realize how by what.Think about Why for this session (Tsuyoshi)121116
  17. 17. Conclusion121116
  18. 18. http://newtechusa.net/culture-con/Ill share your conclusions later in English.Thank you!121116
  19. 19. Appendix. Technical elementofiCAgile Agile Software Design + Programming every books are referenced by Amazon.co.jp or Amazon.com121116
  20. 20. 1. Designing & Programming1.1. Test Driven Development 1.1.1. The value of test-driven development 1.1.2. Identifying usage patterns to dene the object or function interface 1.1.3. Identifying completeness of conditions that drive usage patterns in the code 1.1.4. Avoiding duplication in the conditions 1.1.5. Red-Green-Refactor 1.1.6. Test SpeedTest Driven Development: By Example Test-Driven iOS Development Growing Object-Oriented Software, Guided by TestsKent Beck (2002)Graham Lee (2012) Steve Freeman, Nat Pryce (2009) required knowledge121116
  21. 21. 1. Designing & Programming Architecture (1.2.1)1.2. Good Design Becks 4 rules of simple design(1.2.2) McCabe complexity (1.2.2) DRY (1.2.3.) SOLID (1.2.3.) 1.2.1. Role of Design-in-the-Large 1.2.2. Simple design 1.2.3. Evaluating Design and Design Principle 1.2.4. Design Patterns 1.2.5. Clean Programming 1.2.6. Listening to your tests Agile Software DevelopmentThe Art of Readable Code Robert C. Martin (2011) Dustin Boswell, Trevor Foucher (2011)121116
  22. 22. continue...Becks 4 rules of simple designPass all testsContains no duplicationsExpress the intent of the programmersMinimizes the number of classes and methods http://theholyjava.wordpress.com/2011/02/14/clean-code-four-simple-design-rules/ Patterns of Enterprise Application Architecture Martin Fowler (2002) SOILDSingle responsibility principleOpen/Closed PrincipleLiskov substitution principleInterface segregation principleDependency Inversion PrincipleIf you want to understand SOLID , Read Agile Software Development!Design Patterns: Elements of JavaReusable Object-Oriented SoftwareErich Helm, Richard Johnson,Ralph Vissides, John Gamma(1994) (2004)Pattern-oriented software architectureFrank Buschmann, etc (1996)121116
  23. 23. continue...If you cant understand OO, try these.Just Enough Software Architecture: A Risk-Driven Approach George Fairbanks (2010) (2003)Agile Education by Object GameAGILE2011 sessionhttp://enterprisezine.jp/iti/detail/3385?p=2121116
  24. 24. 1. Designing & Programming1.3. Technical Debt 1.3.1. Recognizing technical debt 1.3.2. Discussing technical debt choices with stakeholders.121116
  25. 25. 1. Designing & ProgrammingDB, HTML refactoring ( Refactoring 1.4.1. Principles of refactoring 1.4.2. Code smells 1.4.3. Common refactorings 1.4.4. The larger world of refactoring 1.4.5. RefactoringRefactoring: Improving the Design of Existing Code Refactoring WorkbookRefactoring Databases:Martin Fowler , Kent Beck, John Brant, William C. Wake (2003)Evolutionary Database DesignWilliam Opdyke, Don Roberts(1999)Scott W. Ambler (2006)121116
  26. 26. 1. Designing & Programmingwitout test code (1.5.2.)1.5. Legacy coderefactoring toolsstatically typed langagebreaking down into stepscatch errors with compilerdynamic language1.5.1. Approaching legacy codebreaking down into steps1.5.2. Refactoring without testwhich are likely less error1.5.3. Retrotting test onto legacy code Working Effectively With Legacy CodeMichael Feathers (2004)(2007)121116
  27. 27. 2. Testing2.1. Acceptance Testing Unit Test (2.1.1.)2.1.1. Types of tests to automateComponent Test2.1.2. Test as Specication and DocumentationAcceptance Test2.1.3. ATDD as aid to design thinkingnon-functional Test2.1.4. Tester-Business-Developer Collaboration2.1.5. ATDD ProcessATDD 3 different forms (2.1.6.) a text based form ( cucumber)2.1.6. ATDD Styles & Tools table (FIT)2.1.7. Testing the system bypassing the user interface in code (xUnit)2.1.8. Testing the system through the user interface2.1.9. Cross-functional testingcucumber (2.1.8.) Robot Framework non-functional tests(2.1.9.) capacity response time security etc...ATDD by Example: A Practical Guide to Acceptance Test-Driven DevelopmentMarkus Gartner (2012)121116
  28. 28. 2. Testing2.2. Programming the tests test doubles (2.2.6.) stub 2.2.1. Coding Tests by Intentionmocks 2.2.2. Testing the testsfakes 2.2.3. Test execution timespies 2.2.4. Fixture Setup 2.2.5. Result Verication 2.2.6. Use test doubles 2.2.7. Refactoring TestxUnit Test patterns at least 3 different ways of verifying the test code (2.2.2.) xUnit Test Patterns: Refactoring Test Code Gerard Meszaros (2007)121116
  29. 29. 3. Teams and behaviorsClass Diagrams (3.1.5.)Sequence Diagram3.1. CollaborationInstance and Deployment diagramsCRC cards and similar 3.1.1. Collaboration Skillstask and kanban board (3.1.6.) 3.1.2. Work allocationstory maps 3.1.3. Stakeholder Conversations burn chart 3.1.4. Pair Programmingcumulative flow diagrams 3.1.5. Communication designphysical and electronic radiators 3.1.6. Information Radiators 3.1.7. Working spaces 3.1.8. Distributed teamsUML Distilled: A Brief Guide to the Standard Object Modeling Language Agile S