BDD - Die Lösung aller Probleme?

Post on 15-Apr-2017

607 views 6 download

Transcript of BDD - Die Lösung aller Probleme?

BehaviorDrivenDevelopment

Die Lösung aller Probleme?

Ina Einemann

Typische Probleme

Anforderungs-management

Umsetzung Test Auslieferung

T

Was ist BDD? Behavior Driven Development

Was ist BDD? Behavior Driven Development

RED

GREEN REFACTOR

1. Einen Test schreiben und

prüfen, ob er fehlschlägt

2. Code ergänzen, damit der

Test erfolgreich durchläuft

3. Den Code verbessern

z.B. Wiederholungen

löschen

Die Basis ist TDD:

Was ist BDD? Behavior Driven Development

T

Was ist BDD? Behavior Driven Development

Story: Taschenrechner

Feature: Zwei Zahlen

Szenario: Zwei Zahlen addieren

Gegeben eine Zahl 50

Und eine Zahl 80

Wenn ich Addieren wähle

Dann ist das Ergebnis 130

Szenario: Zwei Zahlen multiplizieren

Gegeben eine Zahl 5

Und eine Zahl 6

Wenn ich Multiplizieren wähle

Dann ist das Ergebnis 30

Was ist BDD? Behavior Driven Development

GlueCode

T

Glue Code

@Given("eine Zahl $zahl1")

public void givenEineZahl(int value1){

this.value1 = value1;

}

Was ist BDD? Behavior Driven Development

GlueCode

T

Was ist BDD? Behavior Driven Development

GlueCode

T

Was ist BDD? Behavior Driven Development

CarShare

• Bislang nur telefonische

Buchungen

• Buchungswebseite

• Spezielle Features

T

T

Stakeholder: Simone

PO: Sven

Team: Maja

Karl Paul

Christian

T

T

T

T

Gemeinsames Verständis

Das ist

ein

Berg

Das ist

eine

Schlange

Das ist

ein

Baum

Das ist

eine

Höhle

Vision

Business Goals

Capabilities

Features

Stories

Akzeptanzkriterien

Szenarien

Code

Impact Map

Buchungs- webseite

Mehr PKWs vermieten

Marketingteam Mehr Kunden

erreichen Mehrsprachig-

keit

Kunden

Öfters PKWs mieten

Aboservice

Treueprogramm

Freunde überzeugen

Facebook Integration

Business Goal

Warum? Wer? Wie? Was?

Stakeholder Capabilities Feature

Vision

Als Premium-Kunde

möchte ich für bestimmte Tage Fahrzeuge

abonnieren können,

damit ich nicht mehrmals buchen muss.

User Story

Aboservice

T

T

Sachliche

Gründe

Bedenken

Lustlosigkeit Widerspruch

Kritik & Beschwerden

Ignoranz

Aufregung Zustimmung

Ausweichen Anpassung

Schuldzuweisung

Bequemlichkeit Angst Hoffnung

Machtorientierung am Arbeitsplatz

Pessimismus

ANGESTREBTE

VERÄNDERUNG

DEMONSTRIERTES

VERHALTEN

GRUNDHALTUNG

Ein erfolgreicher

Veränderungsprozess

bewegt wesentlich

mehr als nur die

angestrebte

Veränderung auf der

Sachebene

Widerstand

Bevorzugung des

jetzigen Zustands

Gründe für den Widerstand

Ablehnung von Neuem

Form

en d

es

Wid

ers

tan

ds

Aktiv

Passiv

Betonköpfe

Mitläufer

Saboteure

Skeptiker

T

Widerstand

Bevorzugung des

jetzigen Zustands

Gründe für den Widerstand

Ablehnung von Neuem

Form

en d

es

Wid

ers

tan

ds

Aktiv

Passiv

Mitläufer Skeptike

Ich will nicht

testen

Widerstand

Bevorzugung des

jetzigen Zustands

Gründe für den Widerstand

Ablehnung von Neuem

Form

en d

es

Wid

ers

tan

ds

Aktiv

Passiv

Skeptiker In dem Projekt

PlaneShare läuft es viel

besser.

Es läuft

doch!

Widerstand

Bevorzugung des

jetzigen Zustands

Gründe für den Widerstand

Ablehnung von Neuem

Form

en d

es

Wid

ers

tan

ds

Aktiv

Passiv

Betonköpfe

Wir sind doch

zufrieden! T

Widerstand

Bevorzugung des

jetzigen Zustands

Gründe für den Widerstand

Ablehnung von Neuem

Form

en d

es

Wid

ers

tan

ds

Aktiv

Passiv

Saboteure

!!!

Das wollen

wir nicht!

T

T

Als Premium-Kunde

möchte ich für bestimmte Tage Fahrzeuge

abonnieren können,

damit ich nicht mehrmals buchen muss.

User Story

Aboservice

Akzeptanzkriterien • Der Premium-Kunde soll bei einer Buchung auswählen können, ob die Buchung als Abo laufen soll

• Der ausgewählte Termin ist der Starttermin

• Er kann verschiedene Intervalle für sein Abo auswählen – Täglich

• Er kann zwischen bestimmten Wochentagen oder allen Arbeitstagen auswählen

– Wöchtlich • Rhythmus von jeder, zweiter, dritter…Woche

– Monatlich • Bestimmter Wochentag (letzter Freitag im Monat)

• Bestimmter Tag, wie der 1. eines Monats

• Er kann einen Endtermin für sein Abo bestimmen – Bestimmtes Datum

– Nach einer bestimmten Anzahl an Wochen

• Er kann in seinem Kundenkonto die ausgewählten Abos einsehen, ändern und löschen

• Er kann in seinem Kundenkonto die Kosten anzeigen

• Er kann einen Zahlungsrhythmus für das Abo auswählen – Im Voraus

– Je Termin

– monatlich

Workflow • Der Premium-Kunde soll bei einer Buchung auswählen können, ob die Buchung als Abo laufen soll

• Der ausgewählte Termin ist der Starttermin

• Er kann verschiedene Intervalle für sein Abo auswählen – Täglich

• Er kann zwischen bestimmten Wochentagen oder allen Arbeitstagen auswählen

– Wöchtlich • Rhythmus von jeder, zweiter, dritter…Woche

– Monatlich • Bestimmter Wochentag (letzter Freitag im Monat)

• Bestimmter Tag, wie der 1. eines Monats

• Er kann einen Endtermin für sein Abo bestimmen – Bestimmtes Datum

– Nach einer bestimmten Anzahl an Wochen

• Er kann in seinem Kundenkonto die ausgewählten Abos einsehen, ändern und löschen

• Er kann in seinem Kundenkonto die Kosten anzeigen

• Er kann einen Zahlungsrhythmus für das Abo auswählen – Im Voraus

– Je Termin

– monatlich

Starttermin auswählen

Kundenkonto einsehen

Zahlungsrhythmus festlegen

Intervalle auswählen

Endtermin auswählen

Operationen • Der Premium-Kunde soll bei einer Buchung auswählen können, ob die Buchung als Abo laufen soll

• Der ausgewählte Termin ist der Starttermin

• Er kann verschiedene Intervalle für sein Abo auswählen – Täglich

• Er kann zwischen bestimmten Wochentagen oder allen Arbeitstagen auswählen

– Wöchtlich • Rhythmus von jeder, zweiter, dritter…Woche

– Monatlich • Bestimmter Wochentag (letzter Freitag im Monat)

• Bestimmter Tag, wie der 1. eines Monats

• Er kann einen Endtermin für sein Abo bestimmen – Bestimmtes Datum

– Nach einer bestimmten Anzahl an Wochen

• Er kann in seinem Kundenkonto die ausgewählten Abos einsehen, löschen und ändern

• Er kann in seinem Kundenkonto die Kosten anzeigen

• Er kann einen Zahlungsrhythmus für das Abo auswählen – Im Voraus

– Je Termin

– monatlich

Abo anlegen

ändern löschen

Simpel/Komplex • Der Premium-Kunde soll bei einer Buchung auswählen können, ob die Buchung als Abo laufen soll

• Der ausgewählte Termin ist der Starttermin

• Er kann verschiedene Intervalle für sein Abo auswählen – Täglich

• Er kann zwischen bestimmten Wochentagen oder allen Arbeitstagen auswählen

– Wöchtlich • Rhythmus von jeder, zweiter, dritter…Woche

– Monatlich • Bestimmter Wochentag (letzter Freitag im Monat)

• Bestimmter Tag, wie der 1. eines Monats

• Er kann einen Endtermin für sein Abo bestimmen – Bestimmtes Datum

– Nach einer bestimmten Anzahl an Wochen

• Er kann in seinem Kundenkonto die ausgewählten Abos einsehen, löschen und ändern

• Er kann in seinem Kundenkonto die Kosten anzeigen

• Er kann einen Zahlungsrhythmus für das Abo auswählen – Im Voraus

– Je Termin

– monatlich

Simpel

Komplex

Als Premium-Kunde

möchte ich ein Intervall auswählen,

damit mir ein PKW an wiederkehrenden Tagen zur

Verfügung steht.

User Story

Aboservice

T

T

Termine

• Für jede Anforderung Workshops mit dem

gesamten Team

Three Amigos

… beim Refinement

T

T

T

Als Premium-Kunde

möchte ich ein Intervall auswählen,

damit mir ein PKW an wiederkehrenden Tagen zur

Verfügung steht.

User Story

Aboservice

Szenario Gegeben ein Kunde mit dem Namen <Max>

Und <Max> hat den Nachnamen <Müller>

Und <Max> hat die Adresse <Bremen>

Und <Max> hat das Geburtsdatum <12.05.1987>

Und <Max> hat den Status <Premium>

Szenario Gegeben ein Kunde mit den folgenden Daten:

kd_name kd_nachname kd_adresse kd_gebdatum kd_status

Max Müller Bremen 12.05.1987 Premium

Gegeben ein Kunde Max

Und Max ist Premium Kunde

Szenario Und bucht einen PKW für den 01.08.15 und aktiviert

den Aboservice

Gegeben ein Kunde Max

Und Max ist Premium Kunde

Und Max bucht einen PKW für den 01.08.2015

Und Max aktiviert den Aboservice

Szenario

Gegeben ein Kunde Max

Und Max ist Premium Kunde

Und Max einen PKW für den 01.08.2015 bucht

Und Max den Aboservice aktiviert

Wenn Max ein wöchentliches Intervall auswählt

Dann ist der PKW auch für den 08.08.2015 gebucht

Gegeben ein Kunde Max

Und Max ist Premium Kunde

Wenn Max einen PKW für den 01.08.2015 bucht

Und Max den Aboservice aktiviert

Und Max ein wöchentliches Intervall auswählt

Dann ist der PKW auch für den 08.08.2015 gebucht

Szenarien Gegeben ein Kunde Max

Und Max ist Premium Kunde

Und Max bucht einen PKW für den 01.08.2015

Und Max aktiviert den Aboservice

Wenn Max hat ein wöchentliches Intervall auswählt

Dann ist der PKW auch für den 08.08.2015 gebucht

Gegeben ein Kunde Max

Und Max ist Premium Kunde

Und Max bucht einen PKW für den 01.08.2015

Und Max aktiviert den Aboservice

Wenn Max hat ein monatliches Intervall auswählt

Dann ist der PKW auch für den 01.09.2015 gebucht

Gegeben ein Kunde Max

Und Max ist Premium Kunde

Und Max bucht einen PKW für den 31.08.2015

Und Max aktiviert den Aboservice

Wenn Max hat ein monatliches Intervall auswählt

Dann ist der PKW auch für den 30.09.2015 gebucht

Szenario Outline Szenario Outline: Intervall

Gegeben ein Kunde Max

Und Max ist Premium Kunde

Und Max bucht einen PKW für den <startdatum>

Und Max aktiviert den Aboservice

Wenn Max hat ein <intervall> Intervall auswählt

Dann ist der PKW auch für den <zweites_datum> gebucht

Beispiele:

startdatum intervall zweites_datum bemerkung

01.08.2015 wöchentlich 08.08.2015

01.08.2015 monatlich 01.09.2015

31.08.2015 monatlich 30.09.2015 Letzer Monatstag

Alles in Gherkin? Given – When - Then

Nein!

T

T

Alles automatisieren?

TestDB2

Nein!

TestDB1

T

T

Tools

Concordion

T

T

Layer Gegeben ein Kunde Max

Und Max ist Premium Kunde

Und Max bucht einen PKW für den 01.08.15

Und Max aktiviert den Aboservice

Wenn Max hat ein wöchentlichen Intervall auswählt

Dann ist der PKW auch für den 08.08.15 gebucht

Max meldet sich an

Max wählt ein Fahrzeug aus

Max wählt den 01.08.2015

Public void entersNameAndAddress (Persona user) {

customer.enterFirstName (user.getFirstName() );

customer.enterLastName (user.getLastName() );

customer.enterAdress (user.getAddress() );

}

Business

Rule

Business Flow

Technical

T

T

T

Muss ich TDD nutzen?

RED

GREEN REFACTOR

1. Einen Test schreiben und

prüfen, ob er fehlschlägt

2. Code ergänzen, damit der

Test erfolgreich durchläuft

3. Den Code verbessern

z.B. Wiederholungen

löschen

T

T

T

Vorher:

Vorher:

T

T

T

T

T

T

Szenarien

- Nach und nach erstellen

- Dem Kunden zur Verfügung stellen

- Fachliche Ebene

T

T

Automatisierung

- Passende Tools

- Kritischer Pfad

- Refactoring

T

T Entwicklung

- TDD/BDD gleichzeitig

- Beides kostet viel Zeit

- Mitarbeiter

BDD – Die Lösung aller Probleme?

BDD – Die Lösung aller Probleme?

Quelle: https://hakanforss.files.wordpress.com/2014/03/are-you-too-busy-to-improve2.png

Fragen?

Gerne auch an unserem Stand

ina.einemann@hec.de