Download - Test Driven Design by Jonas Auken
![Page 1: Test Driven Design by Jonas Auken](https://reader033.vdocuments.net/reader033/viewer/2022052505/554f6322b4c905c8088b4b99/html5/thumbnails/1.jpg)
TEST DRIVEN DESIGN
AGILE NCR - APRIL 25, 2011Jonas Auken
1
![Page 2: Test Driven Design by Jonas Auken](https://reader033.vdocuments.net/reader033/viewer/2022052505/554f6322b4c905c8088b4b99/html5/thumbnails/2.jpg)
Introduction
• Name: Jonas Auken
• Role: Agile Evangelist
• Primary goal: Excellent quality software
• Secondary goal: Happy developers
• Means: Agile practices everywhere
2
![Page 3: Test Driven Design by Jonas Auken](https://reader033.vdocuments.net/reader033/viewer/2022052505/554f6322b4c905c8088b4b99/html5/thumbnails/3.jpg)
Important questions• How do you know if you're code is
working? When you have tested it!
• When do you want feedback from your code? Now!
• When would you like to refactor? Anytime!
3
![Page 4: Test Driven Design by Jonas Auken](https://reader033.vdocuments.net/reader033/viewer/2022052505/554f6322b4c905c8088b4b99/html5/thumbnails/4.jpg)
Agenda• Test driven development
• The “Find my Ride” example
• Immediate feedback
• Comfortable refactoring
• Towards a better design
• Discussion: How do we get started?
4
![Page 5: Test Driven Design by Jonas Auken](https://reader033.vdocuments.net/reader033/viewer/2022052505/554f6322b4c905c8088b4b99/html5/thumbnails/5.jpg)
@Test public void canInspirePeopleToDoTDD() { agileNCR.arrangeConference(2011); People people = agileNCR.invitePeople(); Presenter presenter = new Presenter(“Jonas Auken”); presenter.prepareSlides(); presenter.createExampleCode(); while (!done) { try { done = presenter.performPresentation(people); } catch (QuestionRaisedException e) { presenter.answerQuestion(); } } assertEquals(0.75, people.getRateInspiredToDoTDD);}
5
![Page 6: Test Driven Design by Jonas Auken](https://reader033.vdocuments.net/reader033/viewer/2022052505/554f6322b4c905c8088b4b99/html5/thumbnails/6.jpg)
Test driven development• Why?
• Feedback loop
• Change alarm
• Help in bug finding
• A better design
• Adding functionality by the slice
• How and when?
• Write the test first
• Mock all external objects
• Only test worker objects, not value objects
6
![Page 7: Test Driven Design by Jonas Auken](https://reader033.vdocuments.net/reader033/viewer/2022052505/554f6322b4c905c8088b4b99/html5/thumbnails/7.jpg)
Good design• “Pretty much what you’d have expected”
• No superfluous code
• Easy to understand - easy to maintain
• Small classes, small methods
• Separation of concern - do one thing only
• Single layer of abstraction
7
![Page 8: Test Driven Design by Jonas Auken](https://reader033.vdocuments.net/reader033/viewer/2022052505/554f6322b4c905c8088b4b99/html5/thumbnails/8.jpg)
Test driven design• The natural next step
• Avoid big design up front (BDUF)
• Design by refactoring
• Design what you need
• Mock the rest
• Small steps or large steps
8
![Page 9: Test Driven Design by Jonas Auken](https://reader033.vdocuments.net/reader033/viewer/2022052505/554f6322b4c905c8088b4b99/html5/thumbnails/9.jpg)
“Find my Ride”
• A larger example
• Web application
• A few complex issues
• Java6, JSF 2, Tomcat server, mock database
9
![Page 10: Test Driven Design by Jonas Auken](https://reader033.vdocuments.net/reader033/viewer/2022052505/554f6322b4c905c8088b4b99/html5/thumbnails/10.jpg)
This is not real
• No users telling us what they want
• No component and backend design
• No planning
• So, this is not really agile - it’s just an example of TDD
10
![Page 11: Test Driven Design by Jonas Auken](https://reader033.vdocuments.net/reader033/viewer/2022052505/554f6322b4c905c8088b4b99/html5/thumbnails/11.jpg)
Immediate feedback
• The red-green cycle
• Test, code and refactor
• Feedback in every cycle
• Short cycle or long cycle
11
![Page 12: Test Driven Design by Jonas Auken](https://reader033.vdocuments.net/reader033/viewer/2022052505/554f6322b4c905c8088b4b99/html5/thumbnails/12.jpg)
Comfortable refactoring
• Refactoring in every cycle
• Avoid the “big refactoring in the sky”
• Refactor when the test is green
12
![Page 13: Test Driven Design by Jonas Auken](https://reader033.vdocuments.net/reader033/viewer/2022052505/554f6322b4c905c8088b4b99/html5/thumbnails/13.jpg)
Towards a better design• Walking skeleton
• One slice of functionality
• Hardest thing first
• Knowledge is gathered
• Choices can be deferred
• Better estimates and better design
13
![Page 14: Test Driven Design by Jonas Auken](https://reader033.vdocuments.net/reader033/viewer/2022052505/554f6322b4c905c8088b4b99/html5/thumbnails/14.jpg)
How do we get started?
• Inspiration?
• Discussion?
• Questions?
• Remarks?
• Personal experiences?
14
![Page 15: Test Driven Design by Jonas Auken](https://reader033.vdocuments.net/reader033/viewer/2022052505/554f6322b4c905c8088b4b99/html5/thumbnails/15.jpg)
Books & Links• Growing Object-Oriented Software Guided by Tests - Steve Freeman & Nat Pryce
• Test Driven Development: By Example - Kent Beck
• Extreme Programming Explained: Embrace Change - Kent Beck
• Clean Code - Robert C Martin
• Refactoring: Improving the Design of Existing Code - Martin Fowler
• 10 Ways to Improve Your Code - http://www.slideshare.net/guestebde/10-ways-to-improve-your-code-neal-ford - Neal Ford
• SLAP - http://www.markhneedham.com/blog/2009/06/12/coding-single-level-of-abstraction-principle - Mark Needham
• Do One Thing - http://blog.objectmentor.com/articles/2009/09/11/one-thing-extract-till-you-drop - Robert C Martin
• Test Driven Development - http://en.wikipedia.org/wiki/Test-driven_development - Wikipedia
• Tech & Talk - www.auken.net - Jonas Auken
15