My talk about the history of TDD and the discussions about its positive and negative aspects on software development. Held on Frankfurter Entwicklertag 2017.
TDD is for Dreamers, not for Real Developers, Isn't It? - Entwicklertag Frankfurt 2017
1. TDD is for Dreamers,
not for Real Developers,
Isn’t It?
Sven Amann
academicscode.com
letsdeveloper.com
@svamann
artwork by Sven Amann - CC BY-SA 4.0
2. Why do I talk about TDD?
Why TDD
(discussions)?
artwork by Sven Amann - CC BY-SA 4.0
Sven Amann
3. artwork by Sven Amann - CC BY-SA 4.0
Academics code
Physicist
Computer
Scientist
6. “Faster development, higher code quality,
better design, and less waste!” Kent Beck
“Self-testing code and clean
interfaces!” Martin Fowler
“Exhaustive test suites, close to no
debugging, changing code without
fear, reduced coupling, …” Uncle Bob
“Fast feedback and safe
refactoring” James Shore
11. “TDD is dead. Long live testing” DHH
“TDD needs a funeral.” Cope
“The real "problems" with TDD [is] in the "driven"
part, not the "test" part [and] the zealotry of
some of its evangelists” Rich Hickey
14. Agile Alliance TDD
1976: The Dark Age of Developer Testing
“a developer should never test their own code”
Glenford Myers in “Software Reliability”
1994 - Kent Beck develops SUnit
1999 - Kent says “test first” in “XP Explained”
until 2002 - “test first” evolves to “test driven”
Source: https://www.agilealliance.org/glossary/tdd/
17. Uncle Bob’s Three Laws of TDD
1. You are not allowed to write any
production code unless it is to make a
failing unit test pass.
2. You are not allowed to write any more
of a unit test than is sufficient to fail;
and compilation failures are failures.
3. You are not allowed to write any more
production code than is sufficient to
pass the one failing unit test.
Source: http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd
20. Classic
TDD
• Roman Numbers
• FizzBuzz
• Bowling Game
• Game of Life
• Harry Potter Book Sets
• …
Algorithms with
well-defined input-output relation
22. –John Sonmez
“By writing unit tests ... you find all kinds of
problems with that code ... of those units [but]
unit testing is more of an appraisal activity than
a testing one... very few regressions are caught
by unit tests since changing the unit of code
you’re testing almost always involves changing
the unit test itself.”
34. –James O. Coplien (Cope)
“TDD was created to replace up-front
architecture. It is not a testing technique.”
Source: https://twitter.com/jcoplien/status/828291686128304130
35. class Person
def age
Date.today.year - birthday.year
end
end
test “a person’s age is determined by birthday” do
seventy_niner = Person.new birthday: Date.new(1979)
travel_to Date.new(2009)
assert_equal 30, seventy_niner.age
end
36. artwork by Sven Amann - CC BY-SA 4.0
class Person
def age(now = Date.today)
now - birthday.year
end
end
test “a person’s age is determined by birthday” do
seventy_niner = Person.new birthday: Date.new(1979)
assert_equal 30, seventy_niner.age Date.new(2009)
end
37. First Design,
then Code,
then Test.
That’s how
we’ve always
done it.
artwork by Sven Amann - CC BY-SA 4.0
Traditional
Waterfall
Testing
Agile
Over-Enthusiast
All but that…
38. –David Heinemeier Hansson (DHH)
“Writing software is more like writing french
poetry than a hard science.”
41. Check Your Own Work Cleanup After Your TDD
Remember To Think
Listen Closely &
Consider the Context
42. –Joe Rainsberger (jbrains)
“TDD Is Not Magic. The rules themselves do not
guarantee success. You have to keep the brain
switched on. You have to pay attention to what’s
happening. You need a place to ask questions
and get answers. You need to know that when you
practise TDD, your code starts to speak to you,
but in a language you [may not yet] understand,
and that when you write tests and run them, this
act equates to learning a language by hearing it,
trying to speak it, and by native speakers
correcting you. If you do these things, then I
expect TDD to “work” for you.”