so long, and thanks for all the tests (scottish developers 2014)
DESCRIPTION
TDD has long been recommended by agile practitioners, but the community still argues about how to go about it. Inside-out or outside-in? Mockist or classical? Through a component’s public API or for every class? And then there’s Kent Beck’s famous quote: “I get paid for code that works, not for tests, so my philosophy is to test as little as possible to reach a given level of confidence.” This introduces a further level of subjectivity, especially since developers are frequently overconfident. In this session, Seb will explore the choices that agile teams need to make when considering which development practices to adopt. He’ll look again at some of the arguments for the different approaches and urge teams to practice until you’re happy with the way you code.TRANSCRIPT
![Page 1: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/1.jpg)
So long, and thanks for all the tests
Seb Rose
Claysnow Limited
@sebrose
Friday, 2 May 14
![Page 2: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/2.jpg)
Friday, 2 May 14
![Page 3: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/3.jpg)
“The last ever dolphin message was misinterpreted as a surprisingly sophisticated attempt to do a double-backwards-somersault through a hoop whilst whistling the 'Star Spangled Banner', but in fact the message was this: So long and thanks for all the fish.”
http://en.wikipedia.org/wiki/The_Hitchhiker%27s_Guide_to_the_Galaxy_(novel)
Friday, 2 May 14
![Page 4: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/4.jpg)
Why do we test software?
“a process of gathering information about [software] with the intent that the information
could be used for some purpose”
Friday, 2 May 14
![Page 5: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/5.jpg)
Developer tests
What are they for?• making sure the code works• preventing regressions• documenting the code• driving a testable design
Friday, 2 May 14
![Page 6: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/6.jpg)
“I get paid for code that works, not for tests, so my philosophy is to test as little as possible to reach a
given level of confidence ...
“I suspect this level of confidence is high compared to industry standards”
http://stackoverflow.com/questions/153234/how-deep-are-your-unit-tests/153565#153565
Friday, 2 May 14
![Page 7: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/7.jpg)
Friday, 2 May 14
![Page 8: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/8.jpg)
Developer testing
When do you write tests?• never• after writing the code• while you write the code• before writing the code
Friday, 2 May 14
![Page 9: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/9.jpg)
http://www.slideshare.net/sebrose/common-objections-to-tdd-and-their-refutations
Any objections?
Friday, 2 May 14
![Page 10: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/10.jpg)
“Takes too much time to write tests.”
“If I change something it will break a whole bunch of tests that I will have to fix and it will be more work for me in the end than just verifying my changes manually.”
“Running the tests takes too long.”
http://www.slideshare.net/sebrose/common-objections-to-tdd-and-their-refutations
Friday, 2 May 14
![Page 11: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/11.jpg)
“No scientific proof of it actually having any benefit (compared to just code reviews, pair programming or etc.) for the same amount of time”
“It's not practical for the kind of work I do. By which I mean, it cannot be conclusively shown to provide tangible benefits that outweigh the perceived costs.”
http://www.slideshare.net/sebrose/common-objections-to-tdd-and-their-refutations
Friday, 2 May 14
![Page 12: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/12.jpg)
TDD - Where did it all go wrong?
Ian Cooper - http://vimeo.com/68375232
Why are people abandoning TDD?
- Test first is unproductive obstacle- Faster feedback gives the competitive advantage- It’s difficult to understand the test’s intent
Friday, 2 May 14
![Page 13: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/13.jpg)
Accelerating agile
Dan North - http://vimeo.com/68215534
Isn’t agility about speed?
- Fast feedback- Understand the risk- Use appropriate methods
http://programmingandthecity.wordpress.com/2013/09/30/whats-dan-north-wearing-today/
Friday, 2 May 14
![Page 14: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/14.jpg)
TDD is dead
David Heinemeier Hansson- http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.htmlhttp://david.heinemeierhansson.com/2014/test-induced-design-damage.html
TDD isn’t useful anymore
- We’ve learnt what we needed- Unit tests aren’t useful- Testability hurts the design
Friday, 2 May 14
![Page 15: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/15.jpg)
Oh no it’s not
Robert C. Martin (aka Uncle Bob) -
TDD is still useful
- Unit tests are fast and thorough- It’s not universally applicable- Decomposition is good design
http://blog.8thlight.com/uncle-bob/2014/04/25/MonogamousTDD.htmlhttp://blog.8thlight.com/uncle-bob/2014/04/30/When-tdd-does-not-work.htmlhttp://blog.8thlight.com/uncle-bob/2014/05/01/Design-Damage.html
Friday, 2 May 14
![Page 16: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/16.jpg)
Queuing theory
JB Rainsberger - http://www.jbrains.ca/permalink/how-test-driven-development-works-and-more
Given a process B, which follows a process A, sometimes in performing B we need to perform some of A again. We can remove the need to rework by taking some portion of process B and performing it before process A
Friday, 2 May 14
![Page 17: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/17.jpg)
“With emergent design, a development organization starts delivering functionality and lets the design emerge.
...while it is being built, the organization will [...] refactor out the commonality ...
At the end [we are] left with the smallest set of the design needed, as opposed to the design that could have been anticipated in advance.”
Emergent design
http://en.wikipedia.org/wiki/Emergent_Design
Friday, 2 May 14
![Page 18: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/18.jpg)
http://effectivesoftwaredesign.com/2013/10/18/avoiding-technical-debt-how-to-accumulate-technical-savings/
Adaptable design up-front?
“... software systems must evolve, and that this evolution must be supported through well planned, adaptable designs.”
Friday, 2 May 14
![Page 19: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/19.jpg)
http://blog.testdouble.com/posts/2014-01-25-the-failures-of-intro-to-tdd.html
Fake it until you make it
“The goal of this game is to discover as many collaboration objects as necessary in order to define leaf nodes that implement a piece of narrowly-defined logic that your feature needs.”
Friday, 2 May 14
![Page 20: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/20.jpg)
Domain discontinuity
Robert C. Martin (aka Uncle Bob) -
“First I am going to express my deep disagreement with the Author.
I will refute his arguments and utterly destroy his conclusions.
And then, once I'm done salting the ground where he used to live, I'll tell you why I completely agree with him.”
http://blog.8thlight.com/uncle-bob/2014/01/27/TheChickenOrTheRoad.html
Friday, 2 May 14
![Page 21: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/21.jpg)
Domain discontinuity
Robert C. Martin (aka Uncle Bob) -
TDD works within an architectural domain
- Refactoring is cheap- Test the behaviour not the implementation- We won’t get it right the first time
http://blog.8thlight.com/uncle-bob/2014/01/27/TheChickenOrTheRoad.html
Friday, 2 May 14
![Page 22: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/22.jpg)
Domain discontinuity
Robert C. Martin (aka Uncle Bob) -
TDD doesn’t work across domains
- Refactoring is costly- Moving behaviours requires new tests- Architecture must be up-front
http://blog.8thlight.com/uncle-bob/2014/01/27/TheChickenOrTheRoad.html
Friday, 2 May 14
![Page 23: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/23.jpg)
What about architecture and design?
https://leanpub.com/software-architecture-for-developers
Friday, 2 May 14
![Page 24: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/24.jpg)
Friday, 2 May 14
![Page 25: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/25.jpg)
Dreyfus model of skill acquisition
http://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition
Friday, 2 May 14
![Page 26: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/26.jpg)
Intermission
Friday, 2 May 14
![Page 27: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/27.jpg)
Friday, 2 May 14
![Page 28: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/28.jpg)
http://www.slideshare.net/dannorth/accelerating-agile-testing
Friday, 2 May 14
![Page 29: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/29.jpg)
http://www.slideshare.net/dannorth/accelerating-agile-testing
Friday, 2 May 14
![Page 30: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/30.jpg)
http://c2.com/cgi/wiki?ExtremeRules
But, Dan. What about the Extreme Rules?
Friday, 2 May 14
![Page 31: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/31.jpg)
There’s a rule to cover that...
http://c2.com/cgi/wiki?TheyreJustRules
Friday, 2 May 14
![Page 32: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/32.jpg)
TDD
Friday, 2 May 14
![Page 33: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/33.jpg)
Which test first?
Inside-out? - “Classicist”
Outside-in? - “London school”
In the middle? - also “Classic”
http://programmers.stackexchange.com/questions/166409/tdd-outside-in-vs-inside-out
http://martinfowler.com/articles/mocksArentStubs.html
Friday, 2 May 14
![Page 34: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/34.jpg)
Friday, 2 May 14
![Page 35: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/35.jpg)
Friday, 2 May 14
![Page 36: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/36.jpg)
What is a unit test anyway?
A test is not a unit test if:• It talks to the database• It communicates across the network• It touches the file system• It can’t run at the same time as other
unit tests• You have to do special things to your
environment (such as editing config files) to run it
http://www.artima.com/weblogs/viewpost.jsp?thread=126923
Friday, 2 May 14
![Page 37: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/37.jpg)
Friday, 2 May 14
![Page 38: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/38.jpg)
http://codebetter.com/iancooper/2011/10/06/avoid-testing-implementation-details-test-behaviours/
Test behaviours not implementation details
“When we refactor we don’t want to break tests. If our tests know too much about our
implementation, that will be difficult, because changes to our implementation will necessarily
result in us re-writing tests – at which point we are not refactoring. We would say that we have over-
specified through our tests.
Instead of assisting change, our tests have now begun to hamper it.”
http://vimeo.com/68375232
Friday, 2 May 14
![Page 39: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/39.jpg)
Properties of unit testing
UnderstandableMaintainableRepeatableNecessaryGranular
Fast
Friday, 2 May 14
![Page 40: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/40.jpg)
Design for testability
- Inversion of control- Dependency Injection
How can we test a component in isolation?
http://www.jamesshore.com/Blog/Dependency-Injection-Demystified.html
Friday, 2 May 14
![Page 41: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/41.jpg)
http://www.jamesshore.com/Blog/Continuous-Integration-on-a-Dollar-a-Day.html
Friday, 2 May 14
![Page 42: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/42.jpg)
Mocking in a nutshell
Friday, 2 May 14
![Page 43: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/43.jpg)
The Meszaros taxonomy
http://xunitpatterns.com
■Dummy objects are passed around but never actually used.■Fake objects have working implementations.■Stubs provide canned responses'.■Mocks are pre-programmed with expectations which form a specification of the calls they are expected to receive.
Friday, 2 May 14
![Page 44: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/44.jpg)
Mocking can give you a false sense of security
Friday, 2 May 14
![Page 45: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/45.jpg)
Mocking can make a terrible mess
Friday, 2 May 14
![Page 46: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/46.jpg)
Friday, 2 May 14
![Page 47: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/47.jpg)
- A stub in a collaboration test must correspond to an expected result in a contract test- An expectation in a collaboration test must correspond to an action in a contract test
This provides a /systematic/ way to check that [your code] remains in sync with the implementations of [the component you are mocking].
Contract and Collaboration tests
via JB Rainsberger, GOOS mailing list, “Unit-test mock/stub assumptions rots”, 15 March 2012
Friday, 2 May 14
![Page 48: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/48.jpg)
1. Change the implementation A1 of A, noticing a change in the contract of A.
2. For each change in the contract of A:
1. If an action in A has changed (parameter changed, method name changed), then look for expectations of that action in collaboration tests, and change them to match the new action.
2. If a response from A has changed (return type, value, what the value means), then look for stubs of that action in collaboration tests, and change them to match the new response.
via JB Rainsberger, GOOS mailing list, “Unit-test mock/stub assumptions rots”, 15 March 2012
Friday, 2 May 14
![Page 49: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/49.jpg)
Friday, 2 May 14
![Page 50: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/50.jpg)
http://blog.8thlight.com/uncle-bob/2013/09/23/Test-first.html
Are we really writing tests?
“If somehow all your production code got deleted, but you had a backup of your tests, then you'd be able to recreate the production system with a little work.
“If, however, it was your tests that got deleted, then you'd have no tests to keep the production code clean. The production code would inevitably rot, slowing you down.”
Friday, 2 May 14
![Page 51: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/51.jpg)
“So we can conclude that if it became a choice between the tests or the production code, we'd rather preserve the tests.
“And this means that the tests are a more important component of the system than the production code is.
“Because the tests are the specs.”
http://blog.8thlight.com/uncle-bob/2013/09/23/Test-first.html
Or are we writing specifications?
Friday, 2 May 14
![Page 52: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/52.jpg)
What use is coverage?
Friday, 2 May 14
![Page 54: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/54.jpg)
Friday, 2 May 14
![Page 55: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/55.jpg)
Friday, 2 May 14
![Page 56: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/56.jpg)
Friday, 2 May 14
![Page 57: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/57.jpg)
Who do developer tests help?
- NOT the application- NOT the customers- The development team
(sometimes)
The tests should make your life EASIER
Friday, 2 May 14
![Page 58: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/58.jpg)
Things that seem important to me:
- chase the VALUE- identify the RISKS- understand your CONTEXT
The tests should make your life EASIER
Friday, 2 May 14
![Page 62: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/62.jpg)
Backup
62
Friday, 2 May 14
![Page 63: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/63.jpg)
Step 1
Write exactly one new test. It should be the smallest test which seems to point in the direction of a solution
TDD as if you meant it
http://cumulative-hypotheses.org/2011/08/30/tdd-as-if-you-meant-it/
Friday, 2 May 14
![Page 64: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/64.jpg)
Step 2
Run the test to make sure it fails
TDD as if you meant it
http://cumulative-hypotheses.org/2011/08/30/tdd-as-if-you-meant-it/
Friday, 2 May 14
![Page 65: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/65.jpg)
Step 3
Make the test from (Step 1) pass by writing the least amount of implementation code you can IN THE TEST METHOD.
TDD as if you meant it
http://cumulative-hypotheses.org/2011/08/30/tdd-as-if-you-meant-it/
Friday, 2 May 14
![Page 66: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/66.jpg)
Step 4
Refactor to remove duplication or otherwise as required to improve the design. Be strict about the refactorings. Only introduce new abstractions (methods, classes, etc) when they will help to improve the design of the code. Specifically...
TDD as if you meant it
http://cumulative-hypotheses.org/2011/08/30/tdd-as-if-you-meant-it/
Friday, 2 May 14
![Page 67: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/67.jpg)
Step 4 (continued)
1.ONLY Extract a new method if there is sufficient code duplication in the test methods. When extracting a method, initially extract it to the test class (don't create a new class yet).
2.ONLY create a new class when a clear grouping of methods emerges and when the test class starts to feel crowded or too large.
TDD as if you meant it
http://cumulative-hypotheses.org/2011/08/30/tdd-as-if-you-meant-it/
Friday, 2 May 14
![Page 68: So long, and thanks for all the tests (Scottish Developers 2014)](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f77a3b4c905d25b8b45ac/html5/thumbnails/68.jpg)
Step 5
Repeat the process by writing another test (go back to Step 1).
TDD as if you meant it
http://cumulative-hypotheses.org/2011/08/30/tdd-as-if-you-meant-it/
Friday, 2 May 14