Software Entwickler, Porsche Informatik GmbH
standardisierte Sprache für fachlichen Ablauf
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
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
Konzentration auf das Problem
Umsetzung kann ignoriert werden
Eingehen auf fachliche Details
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
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"
Dadurch Einbindung in Entwicklungsprozess
Stories → Werkzeug
fachliche Fehler früh erkennen
Frühzeitig eingebunden
Szenarios als automatisierte Testfälle
Ergänzen Testkatalog (aber kein Ersatz!)
Bessere Kommunikation
Implementation: Given, When, Then
Test-First
Eingebunden in Spezifikations- und Testprozess
Umsetzung nach User-Stories und Akzeptanz-Tests
QA testet zunächst manuell, dann automatisiert
Automatische Spezifikation für Kunden
1.) Product-Owner formuliert die Idee
2.) Anforderung wird in Datenbank erfasst
3.) Epic aus Anforderungen formulieren
4.) User-Stories für Epics
Alle Beteiligten arbeiten mit
Einfache Fragen stellen
Es Entstehen:
Behaviors, Story-Files, UI-Mockups, Aufwände, Schnittstellen, ...
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.
[...]
@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());
}
@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());
}
Anpassungen nur an einer Stelle
Wiederverwendung der Workflows, Components und Pages
Mapping unterstützt Test-Driven-Development
Automatisierungstool ist austauschbar
Nicht alles automatisieren
KISS
Robustheit, Robustheit, Robustheit
BDD ist mehr als automatisierte GUI-Tests
Build → Test → Deployment → Akzeptanz-Tests → Documentation
Gegen Entwicklungsumgebung
Gegen Ad-Hoc Server
Parallelisierung
Mehrere Testumgebungen
@VIP Tag
Test bereiten Daten selbst vor
Vorbereiten der Datenbank
DDL durch Liquibase
Vorbereiteter Mandant
Migrationsmechanismus
Verwaltet Feature-Files
Test-Framework Anbindung
Java, Ruby, .Net, Flex, ...
JBehave: Ähnlich zu Cucumber-JVM
JDave: Java-Files als Feature-File
easyb: Groovy-basiert
Gherkin: Sprachdefinition/-parser für Feature-Files
Automatisiert DDL Änderungen
Versionsverwaltung
XML-basiert und DB-unabhängig
https://github.com/porscheinformatik/cucumber-report-db
Verwaltet Testergebnisse
Historische Vergleiche
Highscore
"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)
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)
http://domaindrivendesign.org/: Domain Driven Design Comunity
Domain-Driven Design: Tackling Complexity in the Heart of Software (ISBN-13: 978-0321125217)
Continuous Delivery: Web-Präsenz
Continuous Delivery: Reliable Software Releases Through Build, Test, and Deployment Automation (Addison-Wesley Signature) (ISBN-13: 978-0321601919)
Selenium HQ: Browser Automation
Liquibase: Source Control for your database
Test Quadranten: Homepage von Brian Marick
Präsentiert mit
Behavior Driven Development: Vom Use-Case zum Test-Case
http://thred.github.io/presentation-bdd/
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License by Manfred Hantschel.