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 @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 2

Slide 3

Slide 3 text

Was ist Spock? DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 3 Leonard Brüning

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

Was ist Spock? DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 5 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 6

Slide 6 text

Was ist Spock? DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 6 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 7

Slide 7 text

Was ist Spock? DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 7 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 8

Slide 8 text

Was ist Spock? DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 8 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 9

Slide 9 text

Was ist AsciiDoc? DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 9

Slide 10

Slide 10 text

Was ist AsciiDoc? DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 10 = 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 11

Slide 11 text

AsciiDoc – Special Features: Includes DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 11

Slide 12

Slide 12 text

AsciiDoc – Special Features: Tabellen DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 12

Slide 13

Slide 13 text

AsciiDoc – Special Features: Diagramme DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 13

Slide 14

Slide 14 text

? DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 14

Slide 15

Slide 15 text

Nochmal ein Blick auf Spock… DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 15 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 16

Slide 16 text

Was liefern die Tests als Ausgabe? DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 16

Slide 17

Slide 17 text

Was liefern die Tests als Ausgabe? DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 17

Slide 18

Slide 18 text

Was liefern die Tests als Ausgabe? DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 18

Slide 19

Slide 19 text

Was liefern die Tests als Ausgabe? DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 19

Slide 20

Slide 20 text

Was liefern die Tests als Ausgabe? DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 20 Tilman Ginzel

Slide 21

Slide 21 text

Was liefern die Tests als Ausgabe? DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 21

Slide 22

Slide 22 text

Was liefern die Tests als Ausgabe? DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 22

Slide 23

Slide 23 text

Was können wir jetzt damit machen? DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 23

Slide 24

Slide 24 text

Was können wir jetzt damit machen? DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 24 = 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 25

Slide 25 text

Was können wir jetzt damit machen? DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 25

Slide 26

Slide 26 text

Was haben wir erreicht? DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 26 Anwendung Tests Test- Report Spec

Slide 27

Slide 27 text

Was haben wir erreicht? Was wollen wir erreichen? DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 27 Anwendung Tests Test- Report Spec

Slide 28

Slide 28 text

Zusammenfassung DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 Feature-Spec (draft) implementierte Tests Acceptance-Test (Ziel) Test-Gerüst

Slide 29

Slide 29 text

Zusammenfassung DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 Acceptance-Test (Ziel) Test-Gerüst implementierte Tests Unvollständige Test-Liste Test schreiben Test begrünen refactor Tests ergänzen

Slide 30

Slide 30 text

Zusammenfassung DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 Feature-Spec (draft) implementierte Features getestete Spec (final) Acceptance Test(s) (final) implementierte Tests Acceptance-Test (Ziel) Test-Gerüst selektierte Tests

Slide 31

Slide 31 text

Also schreiben wir eine Spezifikation… DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 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 |===

Slide 32

Slide 32 text

…welche durch das einfache Format maschinenlesbar ist DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 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

Das Testgerüst wird extrahiert… DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 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 |=== @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 34

Slide 34 text

… und ausgeführt wird DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 34

Slide 35

Slide 35 text

…wodurch die Spezifikation den echten Test zeigt DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 35 = 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 36

Slide 36 text

… die Applikation wird entwickelt DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 36

Slide 37

Slide 37 text

Fazit DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 37

Slide 38

Slide 38 text

+ =

Slide 39

Slide 39 text

Tech Evening Event am 20.03.20 Du willst wissen, was die Bahn in Sachen IT sonst so macht? Komm vorbei und informiere Dich bei Snacks, Getränken und einem traumhaften Blick über die Dächer Frankfurts! Melde dich gleich an! deutschebahn.com/tech-evening DB Systel GmbH @DBSystel | Ralf D. Müller @RalfDMueller | Frankfurter Entwicklertag | 20.02.2020 39

Slide 40

Slide 40 text

Vielen Dank für Ihre Aufmerksamkeit! Ralf.D.Mueller@DeutscheBahn.com https://rdmueller.github.io/feedback Clipart: presentermedia.com, licenced to ralf.d.mueller@gmail.com www.dbsystel.de