Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Behaviour Driven Development mit SpecFlow

Behaviour Driven Development mit SpecFlow

Automatisierte Tests sind unser Sicherheitsnetz als Entwickler. Wie kann ich aber mit dem Fachbereich zusammenarbeiten und die Spezifikation festhalten, sodass diese ebenfalls automatisiert getestet werden kann?
Behaviour Driven Development gibt darauf eine Antwort. Und mit SpecFlow lässt sich das in .NET-Code automatisieren. So können wir Business-Anforderungen in eine lebendige Dokumentation überführen und gleichzeitig deren Erfüllung nachweisen.

Wir arbeiten uns durch die drei Praktiken von BDD: Discovery, Formulation, Automation. Dabei lernen wir insbesondere Example Mapping als Methode für die Entdeckung der Spezifikation kennen.

Dieses Deck dient auch als Einführung für die BDD Bowling Kata mit SpecFlow. https://github.com/skorzinetzki/bdd-bowling-dojo

Steve Korzinetzki

September 11, 2018
Tweet

More Decks by Steve Korzinetzki

Other Decks in Technology

Transcript

  1. Behaviour Driven Development mit SpecFlow 102. Treffen der .NET User

    Group Köln Steve Korzinetzki, lise GmbH @skorzinetzki
  2. Kurzprofil der lise GmbH • Als Full-Service-Dienstleister sind wir spezialisiert

    auf die Erstellung von individuellen Softwaresystemen und die Planung, Konzeption, Umsetzung und den Betrieb von Intranetlösungen • Technologieunabhängig: Wir beraten neutral und wählen für unsere Kunden die unter wirtschaftlichen Aspekten passende Lösung aus • Wir entwickeln alle Lösungen mit eigenen Ressourcen an unserem Standort in Köln • Gegründet 1999 • 48 Mitarbeiter (Stand: September 2018) • Geschäftsführer: Dr. Tobias Krautkremer und Daniel Schwarz • Über 300 erfolgreich abgeschlossene Projekte in den letzten 19 Jahren • Standort: Köln-Butzweilerhof • Zertifizierung zum Microsoft Gold Partner Daten und Zahlen Unsere Kunden (Auszug) 2
  3. Ankündigungen .NET User Group Köln DotNetConf - https://www.dotnetconf.net/ Startet MORGEN:

    12. September 2018 Die .NET UG Köln sucht freundliche Gastgeber! 103. Treffen: Dienstag, 2. Oktober 2018 Freiwillige melden unter [email protected] 3
  4. Agenda • Was ist Behaviour Driven Development? • Wann wende

    ich BDD an? • Wie wende ich BDD an? • Was ist SpecFlow? • Wie automatisiere ich die Verifizierung mittels SpecFlow? • Hands on anhand der Bowling Kata 5
  5. BDD is the missing link • Testmethoden-Namen sollen Sätze darstellen

    • Template für Sätze hält den Fokus • Aussagekräftiger Satz hilft bei fehlschlagendem Test • Behaviour / Verhalten ist ein nutzvolleres Wort als Test • „Bridging the communication gap“ (Gojko Adzic) • „BDD can save your agile.“ (Matt Wynne) 6
  6. BDD Definition „BDD practitioners explore, discover, define, then drive out

    the desired behaviour of software using conversation, concrete examples, and automated tests.“ 7 From Cucumber for Java Book by Seb Rose, Matt Wynne and Aslak Hellesøy 1. DISCOVERY 2. FORMULATION 3. AUTOMATION
  7. BDD Vorgehen • Wir binden die Fachabteilung regelmäßig ein •

    Wir arbeiten von außen nach innen • Wir nutzen Beispiele • Wir verwenden eine allgegenwärtig, also unmissverständliche und eindeutige Sprache (Ubiquitous Language) • Wir automatisieren die Verifizierung 10
  8. BDD Missverständnisse 1. Der Kunde schert sich nicht ums Testen

    • Tests sind zur Verifikation, aber es geht hauptsächlich um Spezifikation 2. Der Kunde möchte keine Spezifikationen schreiben • Der Kunde soll von kognitiver Vielfalt profitieren • Er soll Informationen und konkrete Beispiele liefern 3. Man kann das gleiche ohne eine vom Fachbereich lesbare Sprache erreichen • Es geht nicht um nur ums Testen, sondern um Kommunikation und gemeinsames Verständnis (Automatisierung ist sogar optional) • Konkreter Weg um Ideen auszudrücken 11 From 3 misconceptions about BDD by Juraci Vieira and Nicholas Pufal https://www.thoughtworks.com/insights/blog/3-misconceptions-about-bdd
  9. Agile Requirements Journey 14 From Impact Maps and Story Maps

    by Christian Hassa https://de.slideshare.net/chassa/2014-0618srdimpact-mapsstorymapsen Example Mapping Reminder to have a conversation
  10. Example Mapping 15 From Introducing Example Mapping by Matt Wynne

    https://cucumber.io/blog/2015/12/08/example-mapping-introduction
  11. Example Mapping • 3 Amigos • Erarbeitung von „Shared Understanding“

    • Beispiele sind präzise, entgegen abstrakter Regeln • Beispiele treiben Testszenarien für spätere Automatisierung • Anatomie: Kontext -> Aktion -> Ergebnis 17 1. DISCOVERY
  12. BDD verankert in … • … Scrum • Example Mapping

    als Workshop-Methode für Backlog Refinement • Akzeptanzkriterien und Beispiele aus Example Mapping Workshop ableiten • Als Teil der Definition of Ready aufnehmen • Story-Splitting anhand Rules möglich • … Kanban • Discovery als erste Spalte des Kanban-Boards • Example Mapping Workshop nach Bedarf pro Story • … verteilten Teams • Online-Tools zur gemeinsamen Bearbeitung während Example Mapping nutzen (Google Spreadsheet, Microsoft OneNote, Mindmap, …) 19
  13. SpecFlow Feature File Beispiel 22 Feature: Bowling Score for Strikes

    When scoring a strike the next two throws count into the score of the strike Scenario: Play two rounds with strike in first round Given I score a strike When I score a 7 And I score a 2 Then the score of the first round should be 19 And the score of the second round should be 9 And the total score should be 28 2. FORMULATION
  14. SpecFlow Live Coding Demo • Basis-Beispiel • Hooks • Context

    Injection • Frontend-Testing mit Selenium 23
  15. SpecFlow Bowling Kata • Wir prüfen nicht auf (in-) valide

    Würfe • Wir prüfen nicht auf korrekte Anzahl von Würfen und Frames • Wir prüfen nur bei Bedarf auf Punkte eines Frames • Aufgabe 1: Feature File  20 Minuten • Aufgabe 2: Step Definitions  40 Minuten • Ziel: mindestens ein Szenario formulieren und automatisieren 24
  16. SpecFlow Bowling Kata 25 ~/> git clone https://github.com/skorzinetzki/bdd-bowling-dojo.git ~/> cd

    bdd-bowling-dojo ~/bdd-bowling-dojo/> git checkout task1-start // do task1 ... // see sample solution via ... ~/bdd-bowling-dojo/> git checkout task1-solution // compare solutions ... ~/bdd-bowling-dojo/> git checkout task2-start // do task2 ... ~/bdd-bowling-dojo/> git checkout task2-solution // compare solutions ... 3. AUTOMATION