test driven design by jonas auken

15
TEST DRIVEN DESIGN AGILE NCR - APRIL 25, 2011 Jonas Auken 1

Upload: agilencr

Post on 10-May-2015

717 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Test Driven Design by Jonas Auken

TEST DRIVEN DESIGN

AGILE NCR - APRIL 25, 2011Jonas Auken

1

Page 2: Test Driven Design by Jonas Auken

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

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

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

@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

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

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

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

“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

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

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

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

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

How do we get started?

• Inspiration?

• Discussion?

• Questions?

• Remarks?

• Personal experiences?

14

Page 15: Test Driven Design by Jonas Auken

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