codecentric AG
David Völkel – XPDays Germany – 14.11.2013
INTEGRATION TEST HELL ODER WIE INTEGRATIV SOLL ICH TESTEN?
codecentric AG
ÜBER MICH…
2
David Völkel
IT-Consultant für codecentric
Twitter: @davidvoelkel
Schwerpunkte:
Test-Driven Development
Softwaredesign & Clean Code
Software Craftsman @softwerkskammer
codecentric AG
Fehler trotz Unit-Tests
zu viele integrative Tests
Kosten $$$
PROBLEM INTEGRATION TEST HELL?
3
codecentric AG
.
LÖSUNG: TESTPYRAMIDE
4
UI
Service
Unit Inte
gra
tio
nsg
rad
Inte
gra
tive
Te
sts
effektive Teststrategie
Unit-Tests &
Pyramide nach Martin Fowler
codecentric AG
so what
5
codecentric AG
DOCH KOMPLEXER …
6
codecentric AG 7
?
?
Unit
codecentric AG
- Kosten vs. Nutzen
- Isolation vs. Integration
- Akzeptanztests
- GUI?
- Resume
AGENDA
codecentric AG
• (A)TDD unterstützt Entwicklung
• Risikominimierung
• Risiko = Schaden * Wahrscheinlichkeit
unangemessene Testauswahl
• 20% der Tests 80% Nutzen
• Menge, Art, Integrationsgrad Tests
• Risikobewertung
• unterschiedlich je Domäne
• Prototyp bis sicherheitkritisch
$(Tests) = Nutzen - Kosten
WELCHES QUALITÄTSLEVEL BRAUCHE ICH?
Tests an an Kosten und Nutzen ausrichten!
codecentric AG
Isolierende
Tests
Integrierende
Tests
Feedback schnell langsam
Fehlerfindung einfach schwer
Fragilität gering hoch
Kosten Entwicklung &
Wartung
billig teuer
Aussagekraft für
Nutzer
gering hoch
Stärken Breite, Logik,
Komplexität
Tiefe, Datenflüsse,
Integration
EIGENSCHAFTEN DER TESTARTEN
10
codecentric AG 11
„wörtliche Interpretation“
WAS SAGEN DIE EXPERTEN?
UI
Service
Unit Unit
"Integrated Tests Are a Scam"
• J.B. Rainsberger
ATDD
• z.B. GOOS, Continuous Delivery
codecentric AG
Akzeptanztest E2E treibt
jedes Feature
Systemdesign
Auslegungssache
Extrem Jez Humble
Abschwächung mit Testpyramide
Tests ggf. „runterdrücken“
Nat Pryce
James Crisp (70%, 20%, 10%)
N x Unittests
ATDD
12
1 x Akzeptanztest
codecentric AG 13
Splitting integrated test
Decomposition Fallacy?
#Testfälle: n x m => n + m!
"INTEGRATED TESTS ARE A SCAM"
integrated test n x m
collaboration test
n + m
test double
contract test
codecentric AG
Deduplizierung von Testfalllogik
Integrativer Test
enthält Teile der Unittests auf dem
Weg
Fokus: Integration
Orthogonalisierung
SRP FÜR TESTS?
http://commons.wikimedia.org/wiki/File:Divide-and-conquer.jpg?uselang=de
codecentric AG
Beispiel: Email-Validierung
Funktionaler Test
schmal und tief
Service oder UI
Fokus: Integration
Unittests
breit, jedes Detail testen
ORTHOGONALISIERUNG
Eingabe Ausgabe
„ungueltige@email“ „Mail ungültig“
„gü[email protected]“ „Mail OK“
GUI
Validator
Test Double
codecentric AG
AKZEPTANZTESTS
codecentric AG
AKZEPTANZTESTS
Fokus Kundennutzen
• Funktionale- statt Entwicklertests
• Sprache der Fachlichkeit
• Orthogonal zum Integrationsgrad
codecentric AG
UI
Service
Unit
PYRAMIDE FÜR AKZEPTANZTESTS
codecentric AG
PROZESS FÜR AKZEPTANZTESTS
User Stories
Scenarios Implementierung Step Definitions
Unittests
Richtige Ebene?
BDD ATDD
Akzeptanztests
codecentric AG
INTEGRATIONSGRAD VS. FACHLICHKEIT
business readable
technical
Inte
gra
tio
nsg
rad
Inspiriert durch "the testing iceberg“ von Seb Rose / Matt Wynne
2 Dimensionen („etwas abhängig“)
E2E
Service
Unit
codecentric AG
GUI TESTS
codecentric AG
Rule
Workflow
Technisches
Scripting
3 EBENEN VON GUI-TESTS S
tabili
tät &
Kla
rheit
Oberen Ebenen
eigentlich Akzeptanztests
Tests hoch drücken
Page Objects
wrappen scripting
„Smell Wiederverwendung“?
Beispiele
Gojko Adzics "UI testing without shooting yourself in the foot"
codecentric AG
GUI-TESTS
• Subcutanous Testing (z.B. MVP)
• Kompletter Presentation Layer + Service Doubles
Isolation?
• wenige
• Grober Pfad über alle Seiten und Elemente
• ohne Logik!
• viele
• extrahierte User Journeys
• vollständig alle Stories
Menge
codecentric AG
FAZIT
Fokus auf Wert der Tests
• Risiken sind extrem kontextabhängig
• => Spitzheit der Pyramide
Test Pyramide
• Hohe Unittest-Abdeckung
• Wenige integrative Tests, da teuer
• Orthogonal zueinander, SRP für Tests
Viele Dimensionen
• Integrationsgrad
• funktional vs. technisch
• GUI
codecentric AG
QUELLEN
• Bücher
• "Continuous Delivery" - Jez Humble, Dave Farley
• "Growing Object-Oriented Software, Guided by Tests" - Steve
Freeman, Nat Pryce
• "Specification by Example" - Gojko Adzic
• 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/
codecentric AG
QUELLEN
• End-to-end Tests?
• http://www.higherorderlogic.com/2010/01/responding-to-brian-
marick
• http://www.exampler.com/blog/2010/01/08/some-preliminary-
thoughts-on-end-to-end-testing-in-growing-object-oriented-
software/
• Testing-Pyramide im Kontext Continuous Delivery, James Crisp
• http://jamescrisp.org/2011/05/30/automated-testing-and-the-
test-pyramid/
• Wartbare Acceptance Tests, 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
codecentric AG
David Völkel
codecentric AG
Landsberger Str. 302
80687 München
Twitter: @davidvoelkel
www.codecentric.de
blog.codecentric.de
www.meettheexperts.de
FRAGEN UND DISKUSSION
27
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
28
codecentric AG
ERGÄNZUNGEN
codecentric AG
Adapters
Ports-and-Adapters Architecture
Domain System
ports = system interfaces
adapters = übersetzen zwischen
bounded contexts
domain
dependency inversion
=> testbare domain
codecentric AG
Adapters
Hexagonal Architecture
Domain System
3rd Party
Systems Klassifizierung der Ports
input vs output
"us vs. them"
User
codecentric AG
Adapters
UNIT TESTS
Domain System
3rd Party
Systems test doubles zur Isolation
ausgehender Adapter
Trennung Mapping von Transport
möglich?
Proprietäres Format?
z.B. HTTP vs. JDBC
=> nur dann isoliert testbar
Unit Tests
Unit Tests
codecentric AG
Adapters
INTEGRATION TESTS
Domain
Vorsicht: 3 Bedeutungen!!!
Komponententest
Integrationstest zu Drittsystemen
allgemein integrativer Test
z.B. auch Systemtest
Komponententest
Integrationtest
codecentric AG
Adapters
Systemtest
Domain System
Systemtest im Backdoor Fall
- test als test double
- alternativ Simplicator Pattern
codecentric AG
Adapters
END-TO-END-TESTS
Domain
Besonders teuer
System & Drittsystem unter Test
Reicht "Front Door"?
Drittsystem
Herschafft des Drittsystems?
Kopplung?
End-to-End-test
End-to-End-test “Front Door”
codecentric AG
Adapters
ABKOPPLUNG DRITTSYSTEME
Domain
Impersonator Pattern
evtl. als Self initializing Fakes
Simplicator, falls proprietär
Integration Contract Tests
End-to-End-test
Impersonator
Integration Contract Test
Top Related