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

Spock und AsciiDoc – Vom Test zur Spezifikation und zurück

Spock und AsciiDoc – Vom Test zur Spezifikation und zurück

online, zusammen mit Christian Fischer

https://www.germantestingday.info/german-testing-day-2020/programm/konferenzprogramm.html#item-1683

Spock ist ein BDD Testframework für Webanwendungen. Der Product-Owner beschreibt das Verhalten einer Applikation und der Entwickler überprüft es über einen automatischen Test.

Wäre es nicht cool, wenn daraus ein verständliches Dokument erzeugt würde?
Kein Problem! Wir generieren einen Testreport mit Screenshots in AsciiDoc und fügen weitere erklärende Texte hinzu um eine les- und ausführbare Spezifikation zu erhalten.

Aber sollte die Spezifikation nicht am Anfang stehen?
Also zurück auf Start und die Tools rückwärts angewandt!

Zielpublikum: Entwickler, Product-Owner, Tester
Vorraussetzungen: Grundwissen über BDD
Schwierigkeitsgrad: Advanced

Extended Abstract:

Spock ist ein Testframework für Webanwendungen, mit dem man unter anderem den Behavior Driven Development Ansatz, kurz BDD, verfolgen kann. Der Product-Owner beschreibt das Verhalten einer Applikation und der Entwickler überprüft es über einen automatischen Test.

Dem Entwickler reicht die Ausgabe 'PASSED' oder 'FAILED', denn er kennt ja den Code seiner Tests. Wäre es nicht cool, wenn auch der Product-Owner ein verständliches Dokument bekäme?

Kein Problem! Wir generieren über ein Template einfach einen Test-Report in AsciiDoc und fügen weitere erklärende Texte hinzu um eine les- und ausführbare Spezifikation zu erhalten. Screenshots aller wichtigen Schritte bereichern die Spezifikation weiter.

Sollte aber die Spezifikation nicht am Anfang stehen? Und warum Spezifikation, wenn wir agil sein wollen?

Richtig! Stellen wir also eine iterative Feature-Beschreibung an den Anfang und verfeinern diese mit automatischen Tests um am Ende eine gut lesbare und verifizierbare Spezifikation des Verhaltens unseres Systems zu erhalten!

Die Vorteile liegen auf der Hand - die Vorgehensweise verbessert die Kommunikation zwischen Product-Owner und Entwicklern und am Ende bekommen wir ein Dokument, welches Ihre wertvolle Software korrekt und überprüfbar beschreibt.

Ralf D. Müller

September 02, 2020
Tweet

More Decks by Ralf D. Müller

Other Decks in Programming

Transcript

  1. Vom Test zur Spezifikation und zurück DB Systel GmbH |

    Christian Fischer, Ralf D. Müller Spock und AsciiDoc + =
  2. Was ist Spock? DB Systel GmbH | Christian Fischer |

    Ralf D. Müller 2 Leonard Brüning
  3. Was ist Spock? DB Systel GmbH | Christian Fischer |

    Ralf D. Müller 3 void testeAdditionJUnit() { Calculator calculator = new Calculator() BigDecimal result = calculator.plus( 3, 4) assertEquals(7, result, 0.1) }
  4. Was ist Spock? DB Systel GmbH | Christian Fischer |

    Ralf D. Müller 4 void "Rechner kann addieren Spock I"() { given: Calculator calculator = new Calculator() when: BigDecimal result = calculator.plus( 3, 4) then: assertEquals(7, result, 0.1) }
  5. Was ist Spock? DB Systel GmbH | Christian Fischer |

    Ralf D. Müller 5 void "Rechner kann addieren Spock II"() { given: "ein Caclulator Objekt" Calculator calculator = new Calculator() when: "zwei Zahlen addiert werden" BigDecimal result = calculator.plus( 3, 4) then: "erhalte ich das richtige Ergebnis" assertEquals(7, result, 0.1) }
  6. Was ist Spock? DB Systel GmbH | Christian Fischer |

    Ralf D. Müller 6 void "Rechner kann addieren Spock III"() { given: "ein Caclulator Objekt" Calculator calculator = new Calculator() when: "#a und #b addiert werden" BigDecimal result = calculator.plus( a, b) then: "erhalte ich #expected" assertEquals(expected, result, 0.1) where: "Beispieldaten" a | b || expected 3 | 4 || 7 4 | 3 || 7 -5 | 7 || 2 -7 | 5 || -2 }
  7. Was ist Spock? DB Systel GmbH | Christian Fischer |

    Ralf D. Müller 7 void "Rechner kann addieren Spock IV"() { given: "ein Caclulator Objekt" def calculator = new Calculator() when: "#a und #b addiert werden" def result = calculator.plus( a, b) then: "erhalte ich #expected" result == expected where: "Beispieldaten" a | b || expected 3 | 4 || 7 4 | 3 || 7 -5 | 7 || 2 -7 | 5 || -2 }
  8. Was ist AsciiDoc? DB Systel GmbH | Christian Fischer |

    Ralf D. Müller 9 = AsciiDoc *AsciiDoc* ist ein Dokumentationsformat, welches mit Hilfe des Tools *Asciidoctor* in verschiedene andere Formate wie z.B. HTML gewandelt werden kann. AsciiDoc hat den Vorteil, dass man es einfach wie eine eMail schreiben kann und sich wie Sourceode versionieren lässt. Sie auch https://asciidoctor.org[asciidoctor.org] AsciiDoc AsciiDoc ist ein Dokumentationsformat, welches mit Hilfe des Tools Asciidoctor in verschiedene andere Formate wie z.B. HTML gewandelt werden kann. AsciiDoc hat den Vorteil, dass man es einfach wie eine eMail schreiben kann und sich wie Sourceode versionieren lässt. Sie auch asciidoctor.org
  9. Nochmal ein Blick auf Spock… DB Systel GmbH | Christian

    Fischer | Ralf D. Müller 14 void "Rechner kann addieren Spock IV"() { given: "ein Caclulator Objekt" def calculator = new Calculator() when: "#a und #b addiert werden" def result = calculator.plus( a, b) then: "erhalte ich #expected" result == expected where: "Beispieldaten" a | b || expected 3 | 4 || 7 4 | 3 || 7 -5 | 7 || 2 -7 | 5 || -2 }
  10. Was liefern die Tests als Ausgabe? DB Systel GmbH |

    Christian Fischer | Ralf D. Müller 15
  11. Was liefern die Tests als Ausgabe? DB Systel GmbH |

    Christian Fischer | Ralf D. Müller 16
  12. Was liefern die Tests als Ausgabe? DB Systel GmbH |

    Christian Fischer | Ralf D. Müller 17
  13. Was liefern die Tests als Ausgabe? DB Systel GmbH |

    Christian Fischer | Ralf D. Müller 18
  14. Was liefern die Tests als Ausgabe? DB Systel GmbH |

    Christian Fischer | Ralf D. Müller 19 Tilman Ginzel
  15. Was liefern die Tests als Ausgabe? DB Systel GmbH |

    Christian Fischer | Ralf D. Müller 20
  16. Was liefern die Tests als Ausgabe? DB Systel GmbH |

    Christian Fischer | Ralf D. Müller 21
  17. Was können wir jetzt damit machen? DB Systel GmbH |

    Christian Fischer | Ralf D. Müller 22
  18. Was können wir jetzt damit machen? DB Systel GmbH |

    Christian Fischer | Ralf D. Müller 23 = Spezifikation :pathToSpec: ../../build/spock-reports/ :numbered: Dieses Projekt soll den Benutzer durch zusätzliche Features länger auf der Suchseite halten um höhere Werbeinnahmen zu generieren. == Story: Taschenrechner Als Benutzer möchte ich bei Eingabe des Suchbegriffs "Rechner" oder bei der Eingabe einer Mathematischen Rechnung einen Taschenrechner als Web-Anwendung angezeigt bekommen, so daß ich nicht die Suche Verlassen muss === Akzeptanztest include::{pathToSpec}demo.WebCalcSpec.adoc[tag=Bing- Rechner_aufrufen]
  19. Was können wir jetzt damit machen? DB Systel GmbH |

    Christian Fischer | Ralf D. Müller 24
  20. Was haben wir erreicht? DB Systel GmbH | Christian Fischer

    | Ralf D. Müller 25 Anwendung Tests Test- Report Spec
  21. Was haben wir erreicht? Was wollen wir erreichen? DB Systel

    GmbH | Christian Fischer | Ralf D. Müller 26 Anwendung Tests Test- Report Spec
  22. Zusammenfassung DB Systel GmbH | Christian Fischer | Ralf D.

    Müller Feature-Spec (draft) implementierte Tests Acceptance- Test (Ziel) Test-Gerüst
  23. Zusammenfassung DB Systel GmbH | Christian Fischer | Ralf D.

    Müller Acceptance- Test (Ziel) Test-Gerüst implementierte Tests Unvollständige Test-Liste Test schreiben Test begrünen refactor Tests ergänzen
  24. Zusammenfassung DB Systel GmbH | Christian Fischer | Ralf D.

    Müller Feature-Spec (draft) implementierte Features getestete Spec (final) Acceptance Test(s) (final) implementierte Tests Acceptance- Test (Ziel) Test-Gerüst selektierte Tests
  25. Also schreiben wir eine Spezifikation… DB Systel GmbH | Christian

    Fischer | Ralf D. Müller 30 = Spezifikation include::config.adoc[] Dieses Projekt soll den Benutzer durch zusätzliche Features länger auf der Suchseite halten um höhere Werbeinnahmen zu generieren. == Story: Taschenrechner Als Benutzer möchte ich bei Eingabe des Suchbegriffs "Rechner" oder bei der Eingabe einer Mathematischen Rechnung einen Taschenrechner als Web-Anwendung angezeigt bekommen, so daß ich nicht die Suche Verlassen muss === Acceptancetests ==== User calls Calculator [cols="1,10"] |=== | Given | User is on the main page | When | User enters 'calc' as search-term and submits the form | Then | the search result displays a calculator |===
  26. …welche durch das einfache Format maschinenlesbar ist DB Systel GmbH

    | Christian Fischer | Ralf D. Müller 31 = Spezifikation include::config.adoc[] Dieses Projekt soll den Benutzer durch zusätzliche Features länger auf der Suchseite halten um höhere Werbeinnahmen zu generieren. == Story: Taschenrechner Als Benutzer möchte ich bei Eingabe des Suchbegriffs "Rechner" oder bei der Eingabe einer Mathematischen Rechnung einen Taschenrechner als Web-Anwendung angezeigt bekommen, so daß ich nicht die Suche Verlassen muss === Acceptancetests ==== User calls Calculator [cols="1,10"] |=== | Given | User is on the main page | When | User enters 'calc' as search-term and submits the form | Then | the search result displays a calculator |===
  27. Das Testgerüst wird extrahiert… DB Systel GmbH | Christian Fischer

    | Ralf D. Müller 32 = Spezifikation include::config.adoc[] Dieses Projekt soll den Benutzer durch zusätzliche Features länger auf der Suchseite halten um höhere Werbeinnahmen zu generieren. == Story: Taschenrechner Als Benutzer möchte ich bei Eingabe des Suchbegriffs "Rechner" oder bei der Eingabe einer Mathematischen Rechnung einen Taschenrechner als Web-Anwendung angezeigt bekommen, so daß ich nicht die Suche Verlassen muss === Acceptancetests ==== User calls Calculator [cols="1,10"] |=== | Given | User is on the main page | When | User enters 'calc' as search-term and submits the form | Then | the search result displays a calculator |=== @Ignore("not implemented") def "User calls Calculator"() { given: "User is on the main page" when: "User enters 'calc' as search-term and submits the form" then: "the search result displays a calculator" }
  28. …wodurch die Spezifikation den echten Test zeigt DB Systel GmbH

    | Christian Fischer | Ralf D. Müller 34 = Spezifikation include::config.adoc[] Dieses Projekt soll den Benutzer durch zusätzliche Features länger auf der Suchseite halten um höhere Werbeinnahmen zu generieren. == Story: Taschenrechner Als Benutzer möchte ich bei Eingabe des Suchbegriffs "Rechner" oder bei der Eingabe einer Mathematischen Rechnung einen Taschenrechner als Web-Anwendung angezeigt bekommen, so daß ich nicht die Suche Verlassen muss === Acceptancetests ==== User calls Calculator [cols="1,10"] |=== | Given | User is on the main page | When | User enters 'calc' as search-term and submits the form | Then | the search result displays a calculator |=== = Spezifikation include::config.adoc[] Dieses Projekt soll den Benutzer durch zusätzliche Features länger auf der Suchseite halten um höhere Werbeinnahmen zu generieren. == Story: Taschenrechner Als Benutzer möchte ich bei Eingabe des Suchbegriffs "Rechner" oder bei der Eingabe einer Mathematischen Rechnung einen Taschenrechner als Web-Anwendung angezeigt bekommen, so daß ich nicht die Suche Verlassen muss === Acceptancetests include::{pathToSpec}acceptance.Specification2bSpec.adoc[ tag=User_calls_Calculator]
  29. + =