unit testing on android: why and how? devfest romania, bucharest 2016

66
Unit testing on Android: why and how? DevFest Bucharest Danny Preussler @PreusslerBerlin

Upload: danny-preussler

Post on 14-Feb-2017

361 views

Category:

Technology


0 download

TRANSCRIPT

Unittesting onAndroid:why and how?DevFest Bucharest

DannyPreussler@PreusslerBerlin

UntestedCode istheDarkMatterofSoftware

'ElGordo'GalaxyClusterEvenBiggerThanThought(NASA,Chandra,04/03/14)byNASA'sMarshallSpaceFlightCenter,CCby2.0;flickr.com/photos/nasamarshall/13901530984

itmakesupto 90%ofthesoftwareuniverse

UntestedCode istheDarkMatterofSoftware

'ElGordo'GalaxyClusterEvenBiggerThanThought(NASA,Chandra,04/03/14)byNASA'sMarshallSpaceFlightCenter,CCby2.0;flickr.com/photos/nasamarshall/13901530984

Howdowetestourappstoday?

http://martinfowler.com/bliki/TestPyramid.html

Manual

UI

Service

Unit

Champ!®MiniSwirlsBirthdayPartyIceCreamConesbyBlueBunny®,CCby2.0;www.flickr.com/photos/bluebunnyicecream/5449137794

http://martinfowler.com/bliki/TestPyramid.html

Theproblem offunctionaltests

Something isbroken!

@PreusslerBerlin

Whatisbroken?

@PreusslerBerlin

Whereit’sbroken?

@PreusslerBerlin

It’sendtoend bydefinition!

@PreusslerBerlin

Productionfailureshttps://www.usenix.org/system/files/conference/osdi14/osdi14-paper-yuan.pdf

77%ofthefailurescouldbe reproduced

byaunittest

@PreusslerBerlin

74%ofthefailuresaredeterministic

@PreusslerBerlin

58%ofthecatastrophicfailureswhereerrorhandling

@PreusslerBerlin

TrustbyPROTerry Johnston, CCby2.0;flickr.com/photos/powerbooktrance/466709245

FearbyPRObrx0;CCby2.0;flickr.com/photos/atul666/5429073525

Documentation!

mutuallybyBruceDenis;CCby2.0;flickr.com/photos/f2point8/5896153192

Unittestsslow medown!?

Unittestsslow medown!?

Featuredevelopmentwillslowdown

longterm

@PreusslerBerlin

Customerswillloosetrust

@PreusslerBerlin

Codewritteninrushwillbethrownaway

@PreusslerBerlin

Thenextdeveloperwillthrowit away

@PreusslerBerlin

Thevaluethatseparatesamateursfromprofessionalsisthatvelocityisadirectfunction

ofquality.

Thevaluethatseparatesamateursfromprofessionalsisthatvelocityisadirectfunctionofquality.Novicesbelieve..thathackingisfast.

Thevaluethatseparatesamateursfromprofessionalsisthatvelocityisadirectfunctionofquality.Novicesbelieve..thathackingisfast.

Thehigherthequality,thefasteryougo.

Thevaluethatseparatesamateursfromprofessionalsisthatvelocityisadirectfunctionofquality.Novicesbelieve..thathackingisfast.

Thehigherthequality,thefasteryougo.Everytimeyoutradequalityforspeed,youslow

down.Everytime.

- UncleBob

YOU aretheexpert!

@PreusslerBerlin

Don’tletsomeonetellYOU howtocode!

@PreusslerBerlin

Theonly waytogofastistogowell

@PreusslerBerlin

@PreusslerBerlin

Beprofessional!

@PreusslerBerlin

YOU arenotpaidtowrite legacycode

@PreusslerBerlin

Don’tshipcrap!

@PreusslerBerlin

Yourtest codeismoreimportant

thanproductioncode

@PreusslerBerlin

Buthowdowestart?

Writetestablecode

@PreusslerBerlin

InversionofControl

@PreusslerBerlin

void doSomething() {

new Something().doWhatISay();}

Nottestable!

void doSomething(Something something) {

something.doWhatISay();}

class MyClass {@Inject Something something;

void doSomething() {something.doWhatISay();

}} Dependency

Injection

Single responsibilities

Clean Code

@PreusslerBerlin

RespectLawofDemeter

http://enterprisecraftsmanship.com/2016/09/29/law-of-demeter-and-immutability/ @PreusslerBerlin

Avoidstatic

@PreusslerBerlin

Avoid singletons

@PreusslerBerlin

Wrapallthethings

@PreusslerBerlin

ButwhataboutLegacyCode?

New featuresmusthavetests!

@PreusslerBerlin

Investigatebugswithexploratorytests

@PreusslerBerlin

Explorecodewithcharacterizationtests

@PreusslerBerlinhttps://michaelfeathers.silvrback.com/characterization-testing

Testswillchangeyourarchitecture

stepbystep

@PreusslerBerlin

Untestablecodeisbadcode!

@PreusslerBerlin

Ifyouseecrap,replace it!

@PreusslerBerlin

Addtestinginfeatureplanning

@PreusslerBerlin

StrictDefinitionofDone

@PreusslerBerlin

YOU shouldsignthemanifesto!

@PreusslerBerlin

manifesto.softwarecraftsmanship.org

TestDrivenDevelopment

@PreusslerBerlin

TDD isfun

@PreusslerBerlin

Pairprogrammingisfun

@PreusslerBerlin

Evertriedthe“evilcoder”?

Testingisfun

@PreusslerBerlin

Playgroundforlanguagesandlibraries

Don‘t ship crap!@PreusslerBerlin

Thank you!@PreusslerBerlin

We are [email protected]