75
1 Herzlich willkommen DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test Driven Development David Tanzer

DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

1

Herzlich willkommen – DevDay Zürich 2016Evolutionäres Softwaredesign mit Test Driven Development

David Tanzer

Page 2: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

#@!*§&~#%Ich wollte doch nur eine Zeile Programmcode ändern…

Jetzt sind 50 Tests rot!

Page 3: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

I have lost count of the times where I have seen a developer mock out more than they need to because of excessive class coupling in their code.https://stephenhaunts.com/2013/03/07/all-your-mocks-are-evil/

Page 4: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Sometimes the design is not clear at the start and evolves as you go along -this will force you to redo your test which will generate a big time lose.http://stackoverflow.com/questions/64333/disadvantages-of-test-driven-development

Page 5: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Evil tests create a lock on how the code is implemented.http://www.makinggoodsoftware.com/2012/01/27/the-evil-unit-test/

Page 6: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

I think TDD is more like Othello: "A minute to learn. A lifetime to master."Jon Reid https://twitter.com/qcodinghttps://twitter.com/qcoding/status/433676850007506945https://de.wikipedia.org/wiki/Othello_(Spiel)

Page 7: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

#@!*§&~#%Ich wollte doch nur eine Zeile Programmcode ändern…

Jetzt sind 50 Tests rot!

Page 8: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Heute:

Page 9: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

David Tanzer (@dtanzer)[email protected]

Ich helfe meinen Kunden:• Als Teams effektiver zusammenzuarbeiten• Technische Praktiken zu verbessern• Qualität und Design ihrer Software zu

verbessern• Kontrolle über ihren Legacy-Code

zurückzugewinnenhttp://davidtanzer.net

Page 10: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Architektur / Design

Page 11: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 12: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 13: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Could possibly work!

Do the simplest thing that…

Page 14: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 15: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

https://de.wikipedia.org/wiki/Basilika_Sonntagberg#/media/File:Wallfahrtsbasilika_zur_Hl._Dreifaltigkeit,_Luftbild.JPG

Arcomonte26 CC BY-SA 3.0 at

Page 16: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Komponenten und Modularität

Page 17: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 18: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 19: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 20: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Microservices

Page 21: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 22: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 23: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 24: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

If you can't build a monolith, what makes you think microservices are the answer?Simon Brownhttp://www.codingthearchitecture.com/2014/07/06/distributed_big_balls_of_mud.html

Page 25: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Some Design Upfront

Page 26: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Evil Unit Tests

Page 27: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Tests die…

• Eine bestimmte Implementierung voraussetzen• Duplikation verursachen• “Zufällig” rot warden• Schwer lesbar sind• Sich überschneiden• Zu viel gleichzeitig testen

Page 28: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

The First RuleOf Simple Design

Page 29: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Passes its Tests!Design that is simple…

Page 30: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Test Driven Development

Page 31: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 32: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Wo sind Design / Architektur?

Page 33: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 34: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Testbare Designs

Page 35: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Designprinzipien

• The Four Rules of Simple Design• S.O.L.I.D• Coupling / Cohesion• IoC / Dependency Injection• DDD

Page 36: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Single Responsibility Principle

“Every module or class should have responsibility over a single part of the functionality provided by the software, and that responsibility should be entirely encapsulated by the class.“

“A class should have only one reason to change.”

Page 37: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 38: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 39: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Dependency Inversion Principle

“High-level modules should not depend on low-level modules. Both should depend on abstractions. Abstractions should not depend on details. Details should depend on abstractions.“

“Your business logic should not depend on your infrastructure code.“

Page 40: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 41: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 42: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Interface Segregation Principle

“No client should be forced to depend on methods it does not use.“

“The consumer defines what it needs from an interface. Every consumer gets their own interface.“

Page 43: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 44: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 45: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

2 Seiten einerSchnittstelle

Page 46: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 47: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Test Doubles

Page 48: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Test Doubles

• Dummy Objekte werden weitergegeben, aber nie verwendet.• Fake haben eine einfachere Implementierung als das echte Objekt.• Stubs liefern vorgefertigte Rückgabewerte.• Mocks geben uns die Möglichkeit, zu überprüfen, ob sie im Test

richtig verwendet wurden.http://martinfowler.com/articles/mocksArentStubs.html

Page 49: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Test Doubles

• Mischformen möglich• Mit oder ohne Mocking Framework

Page 50: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Mock Objekte

Page 51: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Inside-Outvs.

Outside-In

Page 52: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 53: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 54: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 55: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 56: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 57: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 58: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 59: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 60: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Unit Testvs.

Integrated Test

Page 61: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 62: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 63: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 64: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 65: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

UnabhängigeTests

Page 66: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

@Testpublic void returnsAddressWithValidStreetWhenUserIsValid() {

User validUser = stubValidUser(…);Address address = addressService.addressFor(validUser);assertNotNull(address.getStreet());

}

Page 67: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

@Testpublic void returnsAddressWithValidStreetWhenUserIsValid() {

User validUser = stubValidUser(…);Address address = addressService.addressFor(validUser);assumeNotNull(address);assertNotNull(address.getStreet());

}

Page 68: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Architektur-Themen

Page 69: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Architekturthemen

• Security• Memory / Storage Performance• Throughput• Latency• Resilience

Automatisiert Testen!

Page 70: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Und Jetzt?

Page 71: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 72: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency
Page 73: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Agile Acceptance Testing

Page 74: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

Agile Acceptance Testing

• Features durch ihre Akzeptanzkriterien spezifizieren• Akzeptanzkriterien so schreiben, dass sie automatisch

Akzteptanztests ergeben• Akzeptanztests automatisieren

Page 75: DevDay Zürich 2016 Evolutionäres Softwaredesign mit Test ... · I think TDD is more like Othello: "A minute to learn. A lifetime to master." Jon Reid . ... • IoC / Dependency

[email protected] helfe meinen Kunden:• Als Teams effektiver zusammenzuarbeiten• Technische Praktiken zu verbessern• Qualität und Design ihrer Software zu

verbessern• Kontrolle über ihren Legacy-Code

zurückzugewinnenhttp://davidtanzer.net