codecentric AG
David Völkel – SEACON 2014 – 09.05.2014
INTEGRATION TEST HELL
ODER WIE INTEGRATIV SOLL ICH TESTEN?
codecentric AG
DAVID VÖLKEL
2
IT-Consultant
Schwerpunkte
 Test-Driven Development
 Softwaredesign & Clean Code
 Software Craftsman
@softwerkskammer
Twitter: @davidvoelkel
codecentric AG
isoliert integriert
3
AUTOMATISIERTE TESTS
vs.
codecentric AG
$(isoliert) $(integriert)
4
TESTKOSTEN
codecentric AG
$(isolierter) $(integrierter) $(viele integrierte)
5
WELCOME TO INTEGRATION TEST HELL!
codecentric AG
Testpyramide
Orthogonale Dekomposition
- Akzeptanztests
- UI-Tests
Fazit
Diskussion
AGENDA
codecentric AG
TESTPYRAMIDE = EFFEKTIVE TESTSTRATEGIE
7
UI
Service
Unit
IntegrationsgradNach Mike Cohn
codecentric AG
$Wert(Tests) = Nutzen - Kosten
WELCHES QUALITÄTSLEVEL?
Ausrichtung an Risiken des Kontexts!
Integrative Tests für risikobehaftete Teile
Test-Aufwand
• Integrationsgrad
• 20% / 80%
Risiken senken
• Domäne: Prototyp,
sicherheitskritisch,
…
• Verteilung in App
8
codecentric AG
Isoliert Integriert
Erstellung & Wartung billig teuer
Feedback schnell langsam
Fehlerfindung einfach schwer
Fragilität gering hoch
Aussagekraft Nutzer mittel hoch
9
WARUM TEUER?
codecentric AG
Isoliert Integriert
Stärken Komplexe Logik
(„kombinatorische
Explosion“),
Conditionals, Breite
Integration,
Datenflüsse, Tiefe
10
WELCHER TESTLING?
codecentric AG
Vermischung Verantwortlichkeiten
 Integration
 Logik
ÜBERLADENE INTEGRATIONSTESTS
11
codecentric AG
„Single Responsibility Principle“ für Tests
ORTHOGONALE DEKOMPOSITION
12
codecentric AG
„BREIT“ & „TIEF“
.
IntegrativeTests
Isolierte Tests & orthogonal
13
codecentric AG
Inspiriert durch "the testing iceberg“ von Seb Rose / Matt Wynne
DIMENSION FACHLICHKEIT
Akzeptanztests
Entwicklertests
Fachlichkeit
Integrationsgrad
.
14
codecentric AG
AKZEPTANZTEST != GUI-TEST
15
UI
Service
Unit
HELL YEAH!
Naives Verständnis von
„ATDD treibt Features E2E“
„Testing Ice Cream Cone“ Inspiriert durch Alister Scott
codecentric AG
AKZEPTANZTESTS AUFSPLITTEN
UI Domain Rules
16
Akzeptanztests
codecentric AG
AKZEPTANZTESTS AUFSPLITTEN
17
codecentric AG
AKZEPTANZTESTS AUFSPLITTEN
UI Domain Rules
18
codecentric AG
 N integrative Webtests
BEISPIEL EMAIL-VALIDIERUNG
Eingabe Ausgabe
„gueltige@email.de“ „Email OK“
„mail.ohne@tld“ „Email ungültig“
„mail.ohne.at.de“ „Email ungültig“
„@ohne-user.de“ „Email ungültig“
…
19
codecentric AG
 1 integrativer Webtest
 N x Isolierte Tests
BEISPIEL EMAIL-VALIDIERUNG
Eingabe Ausgabe
„gueltige@email.de“ „Email OK“
„mail.ohne@tld“ „Email ungültig“
„mail.ohne.at.de“ „Email ungültig“
„@ohne-user.de“ „Email ungültig“
…
GUI.render(email)
Validator.validiationMessage(email)
20
codecentric AG
Analog zum Akzeptanztestbeispiel
 1 integrativer HTTP-Test
 N x Isolierte Tests
BEISPIEL WEB-SERVICE
Eingabe Ausgabe
„gueltige@email.de“ „Email OK“
„mail.ohne@tld“ „Email ungültig“
„mail.ohne.at.de“ „Email ungültig“
…
REST-Endpoint
ValidatorFacade.validate(email)
21
codecentric AG
E2E
Compo
nent
Unit
UI-TEST-PYRAMIDE
Integrationsgrad
 UI-Tests != E2E-Tests
22
codecentric AG
vollintegriert bis Backend
für
 Zusammenspiel mit Backend
 Kaum Logik: z.B. CRUD
 einfache Workflows
 Schwer testbares Legacy
UI
E2E
Compo
nent
Unit
(UI-)E2E-TESTS
23
Back-
end
codecentric AG
BEISPIEL MAIL-CLIENT
E2E
Compo
nent
Unit
Minimal-Workflow
24
codecentric AG
UI-LAYER
Komponententest
 Testbarkeit nötig
 Fat Client
 SPA + REST
 server-side rendering?
E2E
Compo
nent
Unit
25
UI
Mock
Back
end
codecentric AG
UI-LAYER
E2E
Compo
nent
Unit
für
 UI-Workflows mit wenig
Backend-Interaktion
 Session-Status
26
UI
Mock
Back
end
codecentric AG
BEISPIEL MAIL-CLIENT
E2E
Compo
nent
Unit
Mail-Bearbeitung
27
codecentric AG
UI-UNIT-TEST
für komplexe Logik
 Werte rendern
 MVP: Presenter-Logik
E2E
Compo
nent
Unit
28
UI
codecentric AG
BEISPIEL
E2E
Compo
nent
Unit
Komplexe Adressformatierung
„D-80687, München, Elsenheimerstraße 55a“
„-, München, Elsenheimerstraße 55a“?
29
UI
codecentric AG
FAZIT
UI
Service
Unit
Test Pyramide
• Orthogonal
• Integrative Tests: Integration & Tiefe
• Isolierte Tests: Conditionals & Breite
• Spitz
• Ausrichtung an Kontext-Risiken
Orthogonale Dekomposition
• Akzeptanztests splitten
• Geschäftsregeln
• UI
• E2E-, UI-Layer- und UI-Unit-Tests
30
codecentric AG
QUELLEN
• Bücher
• "Specification by Example" - Gojko Adzic
• "Growing Object-Oriented Software, Guided by Tests" - Steve
Freeman, Nat Pryce
• GOOS Mailingliste
• https://groups.google.com/forum/#!forum/growing-object-
oriented-software
• "Integrated Tests are a scam" - J.B. Rainsberger
• http://www.jbrains.ca/permalink/using-integration-tests-
mindfully-a-case-study
• http://www.jbrains.ca/permalink/integrated-tests-are-a-scam-
part-1
• "The Testing Iceberg" - Matt Whyne und Seb Rose
• http://claysnow.co.uk/the-testing-iceberg/
31
codecentric AG
QUELLEN
• End-to-end Tests?
• http://www.higherorderlogic.com/2010/01/responding-to-brian-
marick
• Testing-Pyramide
• http://martinfowler.com/bliki/TestPyramid.html
• http://jamescrisp.org/2011/05/30/automated-testing-and-the-
test-pyramid/
• Testing-Ice-Cream-Cone
• http://watirmelon.com/2012/01/31/introducing-the-software-
testing-ice-cream-cone/
• Wartbare Akzeptanztests, Jez Humble
• http://de.slideshare.net/jezhumble/creating-maintainable-
automated-acceptance-tests
• http://skillsmatter.com/podcast/agile-testing/the-long-term-value-
of-acceptance-tests
32
codecentric AG
FRAGEN UND DISKUSSION
33
Omerzu, http://commons.wikimedia.org/wiki/File:Orange_question_mark.svg?uselang=de
codecentric AG
 Attribution-ShareAlike 3.0 Germany
 http://creativecommons.org/licenses/by-sa/3.0/de/
LIZENZ
34

Integration Test Hell