Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Test Driven Design

Test Driven Design

This is the deck I presented at GDG DevFest Istanbul 2016.

TDD is the elengant way of designing software. People scares from it so much, because software design is hard and it requires discipline. In this talk, I tried to describe what TDD is from software design perspective.

Lemi Orhan Ergin

December 04, 2016
Tweet

More Decks by Lemi Orhan Ergin

Other Decks in Programming

Transcript

  1. 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
  2. Jack W. Reeves The C++ Journal Vol. 2, No. 2.

    1992 http://user.it.uu.se/~carle/softcraft/notes/Reeve_SourceCodeIsTheDesign.pdf What is So!ware Design?
  3. 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++ Journal Vol. 2, No. 2. 1992 http://user.it.uu.se/~carle/softcraft/notes/Reeve_SourceCodeIsTheDesign.pdf
  4. 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++ Journal Vol. 2, No. 2. 1992 http://user.it.uu.se/~carle/softcraft/notes/Reeve_SourceCodeIsTheDesign.pdf
  5. The very first value of so!ware is… Robert C. Martin

    Author of Clean Code and Clean Coder Owner of cleancoders.com training site
  6. 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
  7. 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, Turkey Credit: European Space Imaging
  8. Everything is part of the design process Jack W. Reeves

    What is Software Design? The C++ Journal Vol. 2, No. 2. 1992 http://user.it.uu.se/~carle/softcraft/notes/Reeve_SourceCodeIsTheDesign.pdf
  9. main sequence star needless complexity starts, a lot of inter-dependencies

    manual testing starts to take longer time than usual
  10. hard to add new features too much debugging too many

    workarounds too complex to know every flow red giant
  11. blue-white super giant single change affects many areas, no reuse

    - duplication hell, fragile system - unstable prod scary refactoring, silos occur
  12. 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
  13. COUPLING When readfile() is changed, do you change writeFile() too?

    It shows how many places we need to change
  14. 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
  15. COHESION Do you search a lot where to change? It

    shows how easy to find the places we need to change
  16. 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
  17. Programming Source Code SOFTWARE DESIGN Refactoring is hard and needs

    discipline! Test and Verification High Cohesion Low Coupling
  18. 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
  19. 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
  20. 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
  21. 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
  22. small set of entities few lines in methods follows OOP

    design guidelines simple design, names are the intensions marbles