TEST DRIVEN
DESIGNLEMi ORHAN ERGiN
software craftsman @ acm
LEMi ORHAN ERGiN
agile software craftsman @ acm
/lemiorhan
lemiorhanergin.com
@lemiorhan
managing partner at acm
developin...
Jack W. Reeves
The C++ JournalVol. 2, No. 2. 1992
http://user.it.uu.se/~carle/softcraft/notes/Reeve_SourceCodeIsTheDesign....
Source code is the real
so!ware design
Designing so!ware is an exercise in managing complexity
Jack W. Reeves
What is Soft...
The so!ware design is
not complete until it has
been coded and tested
Testing is part of the process of refining the desig...
Programming
Source Code
SOFTWARE DESIGN
Test and
Verification
The very first value of
so!ware is…
Robert C. Martin
Author of Clean Code and Clean Coder
Owner of cleancoders.com trainin...
The very first value of
so!ware is to tolerate and
facilitate on-going changes
Robert C. Martin
Author of Clean Code and C...
Each city has to be renewed in order to
meet the needs of its populace.
So!ware-intensive systems are like that.
Grady Boo...
Programming
Source Code
SOFTWARE DESIGN
Refactoring
Test and
Verification
Everything is part of the
design process
Jack W. Reeves
What is Software Design? The C++ JournalVol. 2, No. 2. 1992
http:/...
but…
we develop
without
driving
the design
nebulaconcepts and terminology trigger ideas about the design
what we really do in general…
proto-star
initial classes containing the logic
simple structure, basic domain model and behaviors
brown dwarfbasic dependencies, works as we expect
utility classes start to occur
main sequence star
needless complexity starts, a lot of inter-dependencies
manual testing starts to take longer time than ...
hard to add new features
too much debugging
too many workarounds
too complex to know every flow
red giant
blue-white
super giant
single change affects many areas,
no reuse - duplication hell,
fragile system - unstable prod
scary ...
red super giant
huge classes, tons of workarounds,
no new features, maintenance mode rules,
basic implementations take wee...
supernova
employee turnovers,
frustrated management,
blame & fight
black hole
deadly loop of total rewrite or exit from the market
Programming
Source Code
SOFTWARE DESIGN
Refactoring
Test and
Verification
Programming
Source Code
SOFTWARE DESIGN
Refactoring
good?
Test and
Verification
COUPLING
When readfile() is changed, do you change writeFile() too?
It shows how many places we need to change
Two elements are loosely
coupled if they are not
shown in the same diff
Kent Beck
The creator of extreme programming
One of...
COHESION
Do you search a lot where to change?
It shows how easy to find the places we need to change
How many files at any
one time is still open for
edit shows the level of
cohesion
Nat Pryce
Co-Author of Growing Object-Or...
Programming
Source Code
SOFTWARE DESIGN
Refactoring
Low Coupling
Test and
Verification
High Cohesion
Programming
Source Code
SOFTWARE DESIGN
Refactoring
is hard and needs discipline!
Test and
Verification
High CohesionLow C...
Programming
Source Code
Test and
Verification
SOFTWARE DESIGN
Refactoring
Test Driven
High CohesionLow Coupling
Programming
Source Code
Test and
Verification
SOFTWARE DESIGN
Refactoring
Test Driven
High CohesionLow Coupling
Programming
Source Code
Test and
Verification
SOFTWARE DESIGN
Refactoring
Test Driven
High CohesionLow Coupling
Programming
Source Code
Test and
Verification
SOFTWARE DESIGN
Refactoring
Test Driven
High CohesionLow Coupling
Programming
Source Code
Test and
Verification
SOFTWARE DESIGN
Refactoring
Test Driven
High CohesionLow Coupling
Programming
Source Code
Test and
Verification
SOFTWARE DESIGN
Refactoring
Test Driven
High CohesionLow Coupling
Programming
Source Code
Test and
Verification
SOFTWARE DESIGN
Refactoring
Test Driven
High CohesionLow Coupling
Programming
Source Code
Test and
Verification
SOFTWARE DESIGN
Refactoring
Test Driven
High CohesionLow Coupling
Unit testing frameworks
Mocking frameworks
Automated testing types
Design principles
Refactoring techniques
Clean code pri...
Unit testing frameworks
Mocking frameworks
Automated testing types
Design principles
Refactoring techniques
Clean code pri...
Unit testing frameworks
Mocking frameworks
Automated testing types
Design principles
Refactoring techniques
Clean code pri...
Unit testing frameworks
Mocking frameworks
Automated testing types
Design principles
Refactoring techniques
Clean code pri...
small set of entities
few lines in methods
follows OOP design guidelines
simple design, names are the intensions
marbles
If you really want to see something interesting:)
ursa minor
and polaris
LEMi ORHAN ERGiN
agile software craftsman @ acm
/lemiorhan
lemiorhanergin.com
@lemiorhan
Test Driven Design - GDG DevFest Istanbul 2016
Test Driven Design - GDG DevFest Istanbul 2016
Próxima SlideShare
Cargando en…5
×

Test Driven Design - GDG DevFest Istanbul 2016

119.004 visualizaciones

Publicado el

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.

Publicado en: Software
20 comentarios
3.826 recomendaciones
Estadísticas
Notas
Sin descargas
Visualizaciones
Visualizaciones totales
119.004
En SlideShare
0
De insertados
0
Número de insertados
11.028
Acciones
Compartido
0
Descargas
1.759
Comentarios
20
Recomendaciones
3.826
Insertados 0
No insertados

No hay notas en la diapositiva.

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

×