Slide 1

Slide 1 text

ein perfektes Paar DB Systel GmbH | Ralf D. Müller, (Christian Fischer) Spock und AsciiDoc + =

Slide 2

Slide 2 text

Ralf D. Müller Software Architect @ DB Systel mit Schwerpunkt Web-Technologien Qualität (Security, Testautomation) Produktivität (Gradle, Groovy, Grails) Prozessoptimierung In der Freizeit Geek, arc42 Contributor & Maintainer von docToolchain DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 2

Slide 3

Slide 3 text

3 DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 Digital | bewegen | verstehen | anwenden | begleiten | vernetzen | denken und handeln DB Systel. Digital bewegen. Gemeinsam.

Slide 4

Slide 4 text

Was ist Spock? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 4 Leonard Brüning

Slide 5

Slide 5 text

Was ist Spock? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 5 void testeAdditionJUnit() { Calculator calculator = new Calculator() BigDecimal result = calculator.plus( 3, 4) assertEquals(7, result, 0.1) }

Slide 6

Slide 6 text

Was ist Spock? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 6 void "Rechner kann addieren Spock I"() { given: Calculator calculator = new Calculator() when: BigDecimal result = calculator.plus( 3, 4) then: assertEquals(7, result, 0.1) }

Slide 7

Slide 7 text

Was ist Spock? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 7 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) }

Slide 8

Slide 8 text

Was ist Spock? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 8 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 }

Slide 9

Slide 9 text

Was ist Spock? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 9 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 }

Slide 10

Slide 10 text

Was ist AsciiDoc? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 10

Slide 11

Slide 11 text

Was ist AsciiDoc? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 11 = 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

Slide 12

Slide 12 text

AsciiDoc – Special Features: Includes DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 12

Slide 13

Slide 13 text

AsciiDoc – Special Features: Tabellen DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 13

Slide 14

Slide 14 text

AsciiDoc – Special Features: Diagramme DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 14

Slide 15

Slide 15 text

? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 15

Slide 16

Slide 16 text

Nochmal ein Blick auf Spock… DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 16 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 }

Slide 17

Slide 17 text

Was liefern die Tests als Ausgabe? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 17

Slide 18

Slide 18 text

Was liefern die Tests als Ausgabe? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 18

Slide 19

Slide 19 text

Was liefern die Tests als Ausgabe? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 19

Slide 20

Slide 20 text

Was liefern die Tests als Ausgabe? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 20

Slide 21

Slide 21 text

Was liefern die Tests als Ausgabe? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 21 Tilman Ginzel

Slide 22

Slide 22 text

Was liefern die Tests als Ausgabe? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 22

Slide 23

Slide 23 text

Was liefern die Tests als Ausgabe? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 23

Slide 24

Slide 24 text

Was können wir jetzt damit machen? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 24

Slide 25

Slide 25 text

Was können wir jetzt damit machen? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 25 = 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]

Slide 26

Slide 26 text

Was können wir jetzt damit machen? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 26

Slide 27

Slide 27 text

Was haben wir erreicht? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 27 Anwendung Tests Test- Report Spec

Slide 28

Slide 28 text

Was haben wir erreicht? Was wollen wir erreichen? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 28 Anwendung Tests Test- Report Spec

Slide 29

Slide 29 text

Was wollen wir erreichen? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 Feature-Spec (draft) implementierte Tests Acceptance-Test (Ziel) Test-Gerüst

Slide 30

Slide 30 text

Was wollen wir erreichen? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 Acceptance-Test (Ziel) Test-Gerüst implementierte Tests Unvollständige Test-Liste Test schreiben Test begrünen refactor Tests ergänzen

Slide 31

Slide 31 text

Was wollen wir erreichen? DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 Feature-Spec (draft) implementierte Features getestete Spec (final) Acceptance Test(s) (final) implementierte Tests Acceptance-Test (Ziel) Test-Gerüst selektierte Tests

Slide 32

Slide 32 text

Also schreiben wir eine Spezifikation… DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 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 |===

Slide 33

Slide 33 text

…welche durch das einfache Format maschinenlesbar ist DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 33 = 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 |===

Slide 34

Slide 34 text

Das Testgerüst wird extrahiert… DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 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 |=== @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" }

Slide 35

Slide 35 text

… und ausgeführt wird DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 35

Slide 36

Slide 36 text

…wodurch die Spezifikation den echten Test zeigt DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 36 = 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]

Slide 37

Slide 37 text

… die Applikation wird entwickelt DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 37

Slide 38

Slide 38 text

Fazit DB Systel GmbH | @RalfDMueller | JUG Saxony Day | 13.09.2019 38

Slide 39

Slide 39 text

+ =

Slide 40

Slide 40 text

Vielen Dank für Ihre Aufmerksamkeit! [email protected] https://rdmueller.github.io/feedback Clipart: presentermedia.com, licenced to [email protected] www.dbsystel.de