first overview
text prev next

Behavior Driven Development


Vom Use-Case zum Test-Case

http://porscheinformatik.github.io/presentation-bdd/

Behavior Driven Development


Theorie & Praxis

Manfred Hantschel


Software Entwickler, Porsche Informatik GmbH

Methode der agilen Softwareentwicklung

Bessere Zusammenarbeit

Entwickler
QS
Kunde

Domain-Driven Design

Test-Driven Development


Vereinigung zweier Prinzipien

BDD für's Domain-Driven Design ...

standardisierte Sprache für fachlichen Ablauf

Beschreibt:

User-Stories

Akzeptanzkriterien


Story:

As a <ROLE>
I want <FEATURE>
in order to <BENEFIT>
                                

Feature:

Given <PRECONDITION>
When <ACTION>
Then <POSTCONDITION>
                                

→ findet frühzeitig fachliche Fehler

BDD für's Test-Driven Development ...


Feature: Sales list

As a manager
I want to list all employees
in order to select and edit one.

Scenario:

Given the list of employees is displayed
When I click on the name of an employee
Then the detail page should be opened.
                                

→ Schlüsselwörter

Akzeptanz-Tests

Konzentration auf das Problem

Umsetzung kann ignoriert werden

Eingehen auf fachliche Details


Test-Quadranten


Test-Quadranten

1. Fallbeispiele


Leitfaden für die Umsetzung

Fallbeispiel = User-Story


genau ein Anwendungsfall

ideal aus Benutzersicht


User-Story: Add article to cart

As a customer
I want to select an article
in order to put it into my shopping cart.
                    

→ vermeidet Redundanz in Lasten- und Pflichenheft, Use-Cases und Konzepten

User-Stories als Sprintziele

2. Akzeptanzkriterien


Leitfaden für die Umsetzung

Akzeptanzkriterien = Scenarios


mehrere Szenarien je User-Story

Aktionen eines Benutzers

Sonder- und Problemfälle

Einfachheit ist Trumpf


Scenario: Add article to cart

[...]

Given the detail page of article "ART000042" is displayed
When the user clicks the "Add to Cart" button
Then the added to cart message should appear
And the cart should contain the article "ART000042"
                    

Abstimmung mit Kunden


Dadurch Einbindung in Entwicklungsprozess

Stories → Werkzeug

fachliche Fehler früh erkennen

Abstimmung mit QA


Frühzeitig eingebunden

Szenarios als automatisierte Testfälle

Ergänzen Testkatalog (aber kein Ersatz!)

Bessere Kommunikation

Umsetzung der Tests


Implementation: Given, When, Then

Test-First

Eingebunden in Spezifikations- und Testprozess



3. Umsetzung


Leitfaden für die Umsetzung

Umsetzung und Abnahme


Umsetzung nach User-Stories und Akzeptanz-Tests

QA testet zunächst manuell, dann automatisiert

Automatische Spezifikation für Kunden

In der Praxis


Behavior Driven Development

Porsche Informatik GmbH


http://porscheinformatik.at

Typischer Entwicklungsprozess


1.) Product-Owner formuliert die Idee

2.) Anforderung wird in Datenbank erfasst

3.) Epic aus Anforderungen formulieren

4.) User-Stories für Epics

Vor Umsetzung: Konkretisierung


Alle Beteiligten arbeiten mit

Einfache Fragen stellen

Es Entstehen:
Behaviors, Story-Files, UI-Mockups, Aufwände, Schnittstellen, ...

Vor Sprint: Formalisierung


Bewertung für Automatisierung: Wichtigkeit, Aufwand, Sinn

Formulierung der Szenarien


User-Story: Add Article to Cart

As a customer
I want to select an article
in order to put it into my shopping cart.

[...]

Scenario: Duplicate Article

Given the shopping cart already contains an article.
When the user selects the same article
And clicks the "Add to Cart" button
Then the cart should contain the article only once
But with a count of 2.

[...]
                    

Stationen eines Feature-Files


Umsetzung


@Given("the user $name is logged in")
public void ensureUserLoggedIn(String name)
{
    User user = userService.getCurrentUser();

    if (!name.equals(user.getName()))
    {
        userService.logout();
        userService.login(name);
        user = userService.getCurrentUser();
    }

    assert name.equals(user.getName());
}
                        

Umsetzung


@Autowired
private UserWorkflow userWorkflow;

@Given("the user $name is logged in")
public void ensureUserLoggedIn(String name)
{
    User user = userWorkflow.login(name);

    assert name.equals(user.getName());
}
                        

Umsetzung

Was haben wir erriecht?


Anpassungen nur an einer Stelle

Wiederverwendung der Workflows, Components und Pages

Mapping unterstützt Test-Driven-Development

Automatisierungstool ist austauschbar

Do's & Don't's


Nicht alles automatisieren

KISS

Robustheit, Robustheit, Robustheit

BDD ist mehr als automatisierte GUI-Tests

Integration


Behavior Driven Development

Builds


Automatisierte Builds

Build → Test → Deployment → Akzeptanz-Tests → Documentation

Lokale Tests

Gegen Entwicklungsumgebung

Gegen Ad-Hoc Server

Laufzeit


Parallelisierung

Mehrere Testumgebungen

@VIP Tag

Testdaten


Test bereiten Daten selbst vor

Vorbereiten der Datenbank

DDL durch Liquibase

Vorbereiteter Mandant

Migrationsmechanismus

Frameworks & Tools


Behavior Driven Development


https://cucumber.io/

Verwaltet Feature-Files

Test-Framework Anbindung

Java, Ruby, .Net, Flex, ...

Andere BDD Frameworks


JBehave: Ähnlich zu Cucumber-JVM

JDave: Java-Files als Feature-File

easyb: Groovy-basiert

Gherkin: Sprachdefinition/-parser für Feature-Files

Selenium


http://www.seleniumhq.org/

Automatisiert Browser Tests

Mehr-Browser fähig

Konkurrenzlos

Liquibase


http://www.liquibase.org/

Automatisiert DDL Änderungen

Versionsverwaltung

XML-basiert und DB-unabhängig

Cucumber Report DB


https://github.com/porscheinformatik/cucumber-report-db

Verwaltet Testergebnisse

Historische Vergleiche

Highscore

Behavior Driven Development


http://porscheinformatik.github.io/presentation-bdd/

Anhang

Referenzen


Behavior Driven Development

"Introduction BDD" von Dan North: ein Einführung ins Behavior Driven Development

http://behaviourdriven.org/: Webpräsenz speziell zum Thema Behavior Driven Development

BDD in Action: Behavior-driven development for the whole software lifecycle by Smart, John Ferguson (2014) Paperback (ASIN: B00RKQDB4E)

Referenzen


Cucumber

https://cucumber.io/: Das Cucumber Framework

The Cucumber Book: Behaviour-Driven Development for Testers and Developers (Pragmatic Programmers) (ISBN-13: 978-1934356807)

Behavior-Driven Development with Cucumber (ISBN-13: 978-0321772633)

Referenzen


Domain-Driven Design

http://domaindrivendesign.org/: Domain Driven Design Comunity

Domain-Driven Design: Tackling Complexity in the Heart of Software (ISBN-13: 978-0321125217)

Referenzen


Continuous Delivery

Continuous Delivery: Web-Präsenz

Continuous Delivery: Reliable Software Releases Through Build, Test, and Deployment Automation (Addison-Wesley Signature) (ISBN-13: 978-0321601919)

Referenzen


Selenium HQ: Browser Automation

Liquibase: Source Control for your database

Test Quadranten: Homepage von Brian Marick

Media

"The Project Cartoon" is licensed under CC BY 3.0.
"Die Weltmaschine" by Gery Wolf (Ars Electronica) is licensed under CC BY-NC-ND 2.0.
"Faded Glory" by Bryan Furnace is licensed under CC BY 2.0.
"Exam" by Alberto G. is licensed under CC BY 2.0 (slightly modified: desaturated, darkened).
"disassembled_keyboard_keys_MG_8586_sm" by Will Culpepper is licensed under CC BY-SA 2.0 (slightly modified: darkened).
"stopwatch" by Julian Lim is licensed under CC BY 2.0.

Präsentiert mit

http://lab.hakim.se/reveal-js

Behavior Driven Development: Vom Use-Case zum Test-Case

http://thred.github.io/presentation-bdd/


Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License by Manfred Hantschel.

Behavior Driven Development