better code through tdd

55
Better Code through TDD Wolfram Kriesing CTO, uxebu @wolframkriesing Freitag, 12. April 13

Upload: wolframkriesing

Post on 30-Nov-2014

504 views

Category:

Technology


1 download

DESCRIPTION

The talk I gave about be

TRANSCRIPT

Page 1: Better Code through TDD

Better Code through TDD

Wolfram KriesingCTO, uxebu

@wolframkriesing

Freitag, 12. April 13

Page 2: Better Code through TDD

http://140byt.es

Warming up: shorten please!

Freitag, 12. April 13

Page 3: Better Code through TDD

Try it out!

Browser

node.jsFreitag, 12. April 13

Page 4: Better Code through TDD

uxebu

100%Technology

Company- since 2008- remote team

Freitag, 12. April 13

Page 5: Better Code through TDD

TDD using Jasmine

Freitag, 12. April 13

Page 6: Better Code through TDD

Why TDD?

• Better tool than Debugging

• Verifies Refactoring

• Sustainable

Freitag, 12. April 13

Page 7: Better Code through TDD

Jasmine

• JavaScript quasi standard

• For nodejs+browser (server+client)

• Built-in Spies

• Custom Matchers make awesome errors!!!

http://pivotal.github.com/jasmine/

Freitag, 12. April 13

Page 8: Better Code through TDD

Jasmine - Matchers

Freitag, 12. April 13

Page 9: Better Code through TDD

Jasmine - Matchers, watch out!

Freitag, 12. April 13

Page 10: Better Code through TDD

Matchers - toContain, not

Freitag, 12. April 13

Page 11: Better Code through TDD

Custom Matchers - toBeInstanceOf

Freitag, 12. April 13

Page 12: Better Code through TDD

Custom Matchers - toBeInstanceOf

Freitag, 12. April 13

Page 13: Better Code through TDD

Custom Matchers

Freitag, 12. April 13

Page 14: Better Code through TDD

Spies

• Decoupled Testing

• Fast Tests (Removes waits, Removes timings)

• Better Architecture

• Async Testing

Freitag, 12. April 13

Page 15: Better Code through TDD

Spies

Freitag, 12. April 13

Page 16: Better Code through TDD

Spies

Freitag, 12. April 13

Page 17: Better Code through TDD

Spies

Freitag, 12. April 13

Page 18: Better Code through TDD

TDD is just the start...

Freitag, 12. April 13

Page 19: Better Code through TDD

Our Process

Repo

Dev CI

Flowdock

All Devs

Freitag, 12. April 13

Page 20: Better Code through TDD

CI - Continuous Integration

• All projects

• Automated Test runs (multiple browsers/devices)

• Build

• Code coverage

• On Linux!

Freitag, 12. April 13

Page 21: Better Code through TDD

CI - Continuous Integration

http://siliconforks.com/jscoverage/

Freitag, 12. April 13

Page 22: Better Code through TDD

CI - Continuous Integration

Freitag, 12. April 13

Page 23: Better Code through TDD

Embedded Jasmine Test Runner

Test

ResultTest Platforms

Freitag, 12. April 13

Page 24: Better Code through TDD

Better code?

Freitag, 12. April 13

Page 25: Better Code through TDD

The problem

Freitag, 12. April 13

Page 26: Better Code through TDD

S3

UploadHTML5 files to Amazon S3 (bucket)

Freitag, 12. April 13

Page 27: Better Code through TDD

Assets

index.html

movie.js

Freitag, 12. April 13

Page 28: Better Code through TDD

• it‘s a prototype ....... +1

• is actually async (ignored) ......... -1

• runs all uploads in parallel ........ +1

• no error handling ........ -1

• NEEDS WORK

Freitag, 12. April 13

Page 29: Better Code through TDD

• still a prototype ....... +1

• is actually async ......... +1

• does NOT run uploads in parallel ........ -1

• partly error handling ........ 0

• NEEDS WORK

Freitag, 12. April 13

Page 30: Better Code through TDD

Freitag, 12. April 13

Page 31: Better Code through TDD

HTTP PUT

hard codedhidden

S3Uploader!!!!!

Freitag, 12. April 13

Page 32: Better Code through TDD

• S3Uploader.js

• uploads from a buffer

• needs to take S3 config

Freitag, 12. April 13

Page 33: Better Code through TDD

TDD please....

Freitag, 12. April 13

Page 34: Better Code through TDD

Freitag, 12. April 13

Page 35: Better Code through TDD

Freitag, 12. April 13

Page 36: Better Code through TDD

S3Put.js

upload from filename

upload from buffer

S3Uploader.js HTTP PUT

Freitag, 12. April 13

Page 37: Better Code through TDD

Freitag, 12. April 13

Page 38: Better Code through TDD

S3Uploader

Freitag, 12. April 13

Page 39: Better Code through TDD

S3Put.js

upload from filename

upload from buffer

S3Uploader.js HTTP PUT

:-(

Freitag, 12. April 13

Page 40: Better Code through TDD

Uploader.js

S3Put.js

from filename

upload from buffer

S3Uploader.js

HTTP PUT

from buffer

Freitag, 12. April 13

Page 41: Better Code through TDD

ClassMethods

Freitag, 12. April 13

Page 42: Better Code through TDD

All tests green? Refactor!

Freitag, 12. April 13

Page 43: Better Code through TDD

Freitag, 12. April 13

Page 44: Better Code through TDD

S3Put.js

upload from buffer

S3Uploader.js

HTTP PUT

Uploader.js

from filename

from buffer

Freitag, 12. April 13

Page 45: Better Code through TDD

S3Put.js

upload from buffer

S3Uploader.js

HTTP PUT

Uploader.js

from filename

from buffer

FileUploader.js

from filename

from buffer

Freitag, 12. April 13

Page 46: Better Code through TDD

Looking at the big picture again ...

Freitag, 12. April 13

Page 47: Better Code through TDD

• is actually async ......... +1

• runs all uploads in parallel ........ -1

• error handling ........ 0

• NEEDS WORK

Freitag, 12. April 13

Page 48: Better Code through TDD

FileUploader.uploadFromFilesNames

Freitag, 12. April 13

Page 49: Better Code through TDD

Freitag, 12. April 13

Page 50: Better Code through TDD

• is actually async ......... +1

• runs all uploads in parallel ........ +1

• error handling ........ +1

• upload multiple files :)

New requirement

Freitag, 12. April 13

Page 51: Better Code through TDD

Freitag, 12. April 13

Page 52: Better Code through TDD

FileUploader.js

S3Put.js

from filename

upload from buffer

S3Uploader.js

HTTP PUT

from buffer

from filenames

Freitag, 12. April 13

Page 53: Better Code through TDD

• Get to know what you really need

• Just as much as necessary

• It‘s a proof of concept

• Reveals the API

Prototyping

Freitag, 12. April 13

Page 54: Better Code through TDD

• Let the architecture come by itself

• Don‘t turn off the brain

• Have clear interfaces - so you can mock them

• Use explicit names and the API modules evolve

TDD

Freitag, 12. April 13

Page 55: Better Code through TDD

Thank you

@wolframkriesing

Wolfram Kriesing, CTOuxebu

Freitag, 12. April 13