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.
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
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
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
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
26. COUPLING
When readfile() is changed, do you change writeFile() too?
It shows how many places we need to change
27. 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
28. COHESION
Do you search a lot where to change?
It shows how easy to find the places we need to change
29. 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