Anúncio

Test Driven Design - GDG DevFest Istanbul 2016

Software Crafter em Craftbase
4 de Dec de 2016
Anúncio

Mais conteúdo relacionado

Apresentações para você(20)

Anúncio

Similar a Test Driven Design - GDG DevFest Istanbul 2016(20)

Mais de Lemi Orhan Ergin(20)

Anúncio

Test Driven Design - GDG DevFest Istanbul 2016

  1. TEST DRIVEN DESIGNLEMi ORHAN ERGiN software craftsman @ acm
  2. LEMi ORHAN ERGiN agile software craftsman @ acm /lemiorhan lemiorhanergin.com @lemiorhan managing partner at acm developing since 2001 worked at Sony and eBay/GittiGidiyor consultant, architect, trainer, developer founder of Software Craftsmanship Turkey ex product owner of Agile Turkey Summit meetup.scturkey.org summit.agileturkey.org
  3. Jack W. Reeves The C++ JournalVol. 2, No. 2. 1992 http://user.it.uu.se/~carle/softcraft/notes/Reeve_SourceCodeIsTheDesign.pdf What is So!ware Design?
  4. Source code is the real so!ware design Designing so!ware is an exercise in managing complexity Jack W. Reeves What is Software Design? The C++ JournalVol. 2, No. 2. 1992 http://user.it.uu.se/~carle/softcraft/notes/Reeve_SourceCodeIsTheDesign.pdf
  5. The so!ware design is not complete until it has been coded and tested Testing is part of the process of refining the design Jack W. Reeves What is Software Design? The C++ JournalVol. 2, No. 2. 1992 http://user.it.uu.se/~carle/softcraft/notes/Reeve_SourceCodeIsTheDesign.pdf
  6. Programming Source Code SOFTWARE DESIGN Test and Verification
  7. The very first value of so!ware is… Robert C. Martin Author of Clean Code and Clean Coder Owner of cleancoders.com training site
  8. The very first value of so!ware is to tolerate and facilitate on-going changes Robert C. Martin Author of Clean Code and Clean Coder Owner of cleancoders.com training site
  9. Each city has to be renewed in order to meet the needs of its populace. So!ware-intensive systems are like that. Grady Booch Developed UML Wrote foreword to “Design Patterns” and “Technical Debt” books Istanbul, TurkeyCredit: European Space Imaging
  10. Programming Source Code SOFTWARE DESIGN Refactoring Test and Verification
  11. Everything is part of the design process Jack W. Reeves What is Software Design? The C++ JournalVol. 2, No. 2. 1992 http://user.it.uu.se/~carle/softcraft/notes/Reeve_SourceCodeIsTheDesign.pdf
  12. but… we develop without driving the design
  13. nebulaconcepts and terminology trigger ideas about the design what we really do in general…
  14. proto-star initial classes containing the logic simple structure, basic domain model and behaviors
  15. brown dwarfbasic dependencies, works as we expect utility classes start to occur
  16. main sequence star needless complexity starts, a lot of inter-dependencies manual testing starts to take longer time than usual
  17. hard to add new features too much debugging too many workarounds too complex to know every flow red giant
  18. blue-white super giant single change affects many areas, no reuse - duplication hell, fragile system - unstable prod scary refactoring, silos occur
  19. red super giant huge classes, tons of workarounds, no new features, maintenance mode rules, basic implementations take weeks, no one knows how overall system works, rollbacks a!er deployments, architect saves the company
  20. supernova employee turnovers, frustrated management, blame & fight
  21. black hole deadly loop of total rewrite or exit from the market
  22. Programming Source Code SOFTWARE DESIGN Refactoring Test and Verification
  23. Programming Source Code SOFTWARE DESIGN Refactoring good? Test and Verification
  24. COUPLING When readfile() is changed, do you change writeFile() too? It shows how many places we need to change
  25. Two elements are loosely coupled if they are not shown in the same diff Kent Beck The creator of extreme programming One of the signatories of the Agile Manifesto Pioneered software design patterns and TDD
  26. COHESION Do you search a lot where to change? It shows how easy to find the places we need to change
  27. How many files at any one time is still open for edit shows the level of cohesion Nat Pryce Co-Author of Growing Object-Oriented Software Guided by Tests Early adopter of XP
  28. Programming Source Code SOFTWARE DESIGN Refactoring Low Coupling Test and Verification High Cohesion
  29. Programming Source Code SOFTWARE DESIGN Refactoring is hard and needs discipline! Test and Verification High CohesionLow Coupling
  30. Programming Source Code Test and Verification SOFTWARE DESIGN Refactoring Test Driven High CohesionLow Coupling
  31. Programming Source Code Test and Verification SOFTWARE DESIGN Refactoring Test Driven High CohesionLow Coupling
  32. Programming Source Code Test and Verification SOFTWARE DESIGN Refactoring Test Driven High CohesionLow Coupling
  33. Programming Source Code Test and Verification SOFTWARE DESIGN Refactoring Test Driven High CohesionLow Coupling
  34. Programming Source Code Test and Verification SOFTWARE DESIGN Refactoring Test Driven High CohesionLow Coupling
  35. Programming Source Code Test and Verification SOFTWARE DESIGN Refactoring Test Driven High CohesionLow Coupling
  36. Programming Source Code Test and Verification SOFTWARE DESIGN Refactoring Test Driven High CohesionLow Coupling
  37. Programming Source Code Test and Verification SOFTWARE DESIGN Refactoring Test Driven High CohesionLow Coupling
  38. Unit testing frameworks Mocking frameworks Automated testing types Design principles Refactoring techniques Clean code principles LEARN Continuous Integration Source code versioning Notification mechanism Code coverage monitoring Practice TDD via katas Develop via TDD Acceptance testing via TDD Verify by behaviours via BDD ESTABLISH PERFORM
  39. Unit testing frameworks Mocking frameworks Automated testing types Design principles Refactoring techniques Clean code principles LEARN Continuous Integration Source code versioning Notification mechanism Code coverage monitoring Practice TDD via katas Develop via TDD Acceptance testing via TDD Verify by behaviours via BDD ESTABLISH PERFORM
  40. Unit testing frameworks Mocking frameworks Automated testing types Design principles Refactoring techniques Clean code principles LEARN Continuous Integration Source code versioning Notification mechanism Code coverage monitoring Practice TDD via katas Develop via TDD Acceptance testing via TDD Verify by behaviours via BDD ESTABLISH PERFORM
  41. Unit testing frameworks Mocking frameworks Automated testing types Design principles Refactoring techniques Clean code principles LEARN Continuous Integration Source code versioning Notification mechanism Code coverage monitoring Practice TDD via katas Develop via TDD Acceptance testing via TDD Verify by behaviours via BDD ESTABLISH PERFORM
  42. small set of entities few lines in methods follows OOP design guidelines simple design, names are the intensions marbles
  43. If you really want to see something interesting:) ursa minor and polaris
  44. LEMi ORHAN ERGiN agile software craftsman @ acm /lemiorhan lemiorhanergin.com @lemiorhan
Anúncio