integration test hell€¦ · inspiriert durch "the testing iceberg“ von seb rose / matt...

Post on 24-Aug-2020

0 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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ültige@email.de“ „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

david.voelkel@codecentric.de

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

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