tdd is for dreamers, not for real developers, isn't it? - entwicklertag frankfurt 2017

43
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

Upload: sven-amann

Post on 12-Apr-2017

209 views

Category:

Software


0 download

TRANSCRIPT

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

Why do I talk about TDD?

Why TDD (discussions)?

artwork by Sven Amann - CC BY-SA 4.0

Sven Amann

artwork by Sven Amann - CC BY-SA 4.0

Academics code

PhysicistComputer Scientist

artwork by Sven Amann - CC BY-SA 4.0

A Pro

Introduction to Computer Science I - WS06/07

artwork by Sven Amann - CC BY-SA 4.0

“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

Academics codeartwork by Sven Amann - CC BY-SA 4.0

Academic Industry Developer

artwork by Sven Amann - CC BY-SA 4.0

Academic Industry Developer

artwork by Sven Amann - CC BY-SA 4.0

Academic Industry Developer

artwork by Sven Amann - CC BY-SA 4.0

“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

?!?

artwork by Sven Amann - CC BY-SA 4.0

Agile Alliance TDD1976: 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/

Queueing Theory

Source: http://blog.jbrains.ca/permalink/how-test-driven-development-works-and-more

Test-first Programming

Source: http://blog.jbrains.ca/permalink/how-test-driven-development-works-and-more

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

ClassicTDD

ClassicTDD Test: 1 = “I”

return “I”;

Test: 2 = “II”

return (i == 1) ? “I” : “II”;

Test: 3 = “III”

return i * “I”;

...

ClassicTDD

• Roman Numbers • FizzBuzz • Bowling Game • Game of Life • Harry Potter Book Sets • …

Algorithms with well-defined input-output relation

Test!

!Test

artwork by Sven Amann - CC BY-SA 4.0

–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.”

Table 3-25, p. 179

Developer Test ≠

Acceptance Test

artwork by Sven Amann - CC BY-SA 4.0

“a developer should never test their own code” –Glenford Myers

artwork by Sven Amann - CC BY-SA 4.0

self control

Developer tests are our job!

artwork by Sven Amann - CC BY-SA 4.0

Test

Test B

Test Waste

Valuable Tests

artwork by Sven Amann - CC BY-SA 4.0

TDD Tests

Required Functionality

All It Can Do

artwork by Sven Amann - CC BY-SA 4.0

Waste

Toy Project Real Software

???

Test-driven Programming

Source: http://blog.jbrains.ca/permalink/how-test-driven-development-works-and-more

London School TDD

London School TDD

Source: http://coding-is-like-cooking.info/tag/london-school-tdd/

???Sale

Catalog

Display

Acceptance Test: “Sell One Item”

–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

class Persondef ageDate.today.year - birthday.yearendend

test “a person’s age is determined by birthday” doseventy_niner = Person.new birthday: Date.new(1979)travel_to Date.new(2009)assert_equal 30, seventy_niner.ageend

artwork by Sven Amann - CC BY-SA 4.0

class Persondef age(now = Date.today)now - birthday.yearendend

test “a person’s age is determined by birthday” doseventy_niner = Person.new birthday: Date.new(1979)assert_equal 30, seventy_niner.age Date.new(2009)end

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…

–David Heinemeier Hansson (DHH)

“Writing software is more like writing french poetry than a hard science.”

The Ultimate Design (You’ll Never Need)

artwork by Sven Amann - CC BY-SA 4.0

–Joe Rainsberger (jbrains)

“TDD doesn't create design. You do.”

Check Your Own Work Cleanup After Your TDD

Remember To Think Listen Closely & Consider the Context

–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.”

Sven Amannacademicscode.com letsdeveloper.com youtube.com/letsdeveloper @svamann

artwork by Sven Amann - CC BY-SA 4.0