Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm)...

107
20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws it all up! (Markus Harrer) Mit Mutationstesten die Tests testen (Johannes Dienst) Schall und Rauch (Michael Wiedeking) Pecha-Kucha- Session

Transcript of Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm)...

Page 1: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

20 Jahre JUGS, 20 x JFS (Oliver Böhm)

REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald)

Philosophy screws it all up! (Markus Harrer)

Mit Mutationstesten die Tests testen (Johannes Dienst)

Schall und Rauch (Michael Wiedeking)

Pecha-Kucha-Session

Page 2: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

20 Jahre JUGS, 20 x JFS

(Oliver Böhm)

Page 3: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

20 Jahre JUGSJUGS

Oliver Böhm

Page 4: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

WRITE ONCE RUN ANYWHERE

https://www.flickr.com/photos/oneeighteen/16048997759/

Page 5: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

https://www.flickr.com/photos/dskley/15558336487/

Page 6: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

λ

Page 7: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

• 3 Tracks parallel• ca. 200 TN

Page 8: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws
Page 9: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

https://www.flickr.com/photos/clio1789/2721396826/

7

Page 10: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws
Page 11: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

http://web.archive.org/web/20100124044749/http://blogs.sun.com:80/jag/entry/so_long_old_friend

Page 12: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

http://www.flickr.com/photos/jdhancock/6051805616/

javajavainside

inside

Page 13: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws
Page 14: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws
Page 15: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

AspectJAspectJWinter CampWinter Camp

Page 16: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

5

Page 17: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

spring

Page 18: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

mySAP

Websphere

Weblogic

Eclipse.NET

Page 19: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

Page 20: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

OSGi

Y2KTESTED

Page 21: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

EJB

Page 22: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

300%[email protected]

Page 23: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

REST API Dokumentaion mit

Swagger und AsciiDoc

(Jan-Paul Buchwald)

Page 24: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

REST API Dokumentation mit Swagger und AsciiDoc

Jan Paul BuchwaldYOPITER GmbH

Java Forum Stuttgart 2017, 06.07.2017

Page 25: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

25

REST API Dokumentation

</> Source Code

{;} Maschinenlesbar

PDF/HTML

Menschenlesbar

Page 26: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

26

Swagger und AsciiDocJAX-RS + Swagger Annotationen

Docker run

/swagger.json Zusätzliche AsciiDoc Dokumentation

</>

Page 27: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

27

swagger2markup und asciidoctor

JAX-RS + Swagger Annotationen

/swagger.json Zusätzliche AsciiDoc Dokumentation

swagger2markup Gradle Plugin

Asciidoc-Dateistruktur

asciidoctor Gradle Plugin

HTML-API-Dokumentation PDF/HTML

Page 28: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

28

JAX-RS@Path("/products")

public class ProductsResource {

@Inject

private DataHandler dataHandler;

@GET

public Response getAllProducts() {

final List<Product> allProducts = dataHandler.loadProducts();

return Response.ok(allProducts).build();

}

}

Page 29: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

29

JAX-RS Swagger Annotationendependencies { … compile 'io.swagger:swagger-jaxrs:1.5.14'}

build.gradle

@GET

@Produces(MediaType.APPLICATION_JSON)

@ApiOperation(value = "Get a list of all available products", response = Product.class, responseContainer = "List")

public Response getAllProducts(@ApiParam(value = "Cookie holding the JWT authentication token", required = true) @CookieParam("ACCESSTOKEN") final String accessToken) {

...

Page 30: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

30

API Model Annotationen@ApiModel(description = "Attributes of a particular product.")

public class Product {

...

@ApiModelProperty(value = "The unique product number", required = true)

public int getNumber() {

return number;

}

@ApiModelProperty(value = "The product code", required = true)

public String getCode() {

return name;

}

}

Page 31: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

31

Swagger Annotations Bean Config@ApplicationPath("/")

public class ProductManagementApplication extends Application {

...

public ProductManagementApplication() {

final BeanConfig beanConfig = new BeanConfig();

beanConfig.setVersion("1.0");

beanConfig.setTitle("Product Management API");

beanConfig.setHost("yopiter.com");

beanConfig.setSchemes(new String[] {"https"});

beanConfig.setBasePath("/pms");

beanConfig.setResourcePackage("com.yopiter.sample.resources");

beanConfig.setPrettyPrint(true);

beanConfig.setScan();

}

}

Page 32: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

32

Gradle

● Build System für die JVM● Groovy DSL● Vorteile gegenüber Maven

● Performance● Dependency Management● ...

apply plugin: 'war'

repositories { mavenCentral()}

dependencies { providedCompile 'javax:javaee-api:7.0'}

build.gradle

Page 33: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

33

Docker BuildFROM jboss/wildfly

EXPOSE 8080

ADD build/libs/pms.war /opt/jboss/wildfly/standalone/deployments

Dockerfile

$ gradle build

$ docker build --tag=pms-wildfly .

$ docker run --name pms -p 8100:8080 -d pms-wildfly

Page 34: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

34

Swagger JSON

Page 35: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

35

AsciiDoc

== Products REST APIThis document describes the *JSF2017* sample products API:

.Content* Data Model* Resources* Error Handling

.Code Sample----GET /products----

Atom Editor AsciiDoc Preview

Page 36: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

36

Gradle Plugin Setupbuildscript {

repositories {

mavenCentral()

jcenter()

}

dependencies {

classpath 'io.github.swagger2markup:swagger2markup-gradle-plugin:1.3.1'

classpath 'io.github.swagger2markup:swagger2markup-import-files-ext:1.3.1'

classpath 'org.asciidoctor:asciidoctor-gradle-plugin:1.5.3'

}

}

apply plugin: 'io.github.swagger2markup'

apply plugin: 'org.asciidoctor.convert'

build.gradle

Page 37: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

37

AsciiDoc-Ordnerstruktur

Später aus Swagger generiert

Zusätzliche, freie Dokumentation

Beschreibung pro Pfad

Basis-Dokument

Page 38: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

38

AsciiDoc: pathsLoads all available products from the product management system's database.

*Note:* This is a very expensive operation that should only be called for administrative purposes.

getAllProducts.adoc Dateiname = Swagger Operation Id (default: Java-Methodenname)

paths/getAllProducts/operation-begin-description.adoc

paths/getAllProducts/operation-end-example1.adoc

paths/getAllProducts/operation-end-example2.adoc

Alternativ: feingranulare Dokumente in Unterverzeichnis

Page 39: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

39

AsciiDoc: Basis-Dokument

include::generated/overview.adoc[]

include::model/model.adoc[]

include::generated/paths.adoc[]

include::generated/definitions.adoc[]

pms-api.adoc

Reihenfolge und Includes frei gestaltbar, Namen unter generated fest vorgegeben

Page 40: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

40

Gradle TasksconvertSwagger2markup {

swaggerInput 'http://localhost:8100/pms/swagger.json'

outputDir file('src/asciidoc/generated')

config = ['swagger2markup.markupLanguage' : 'ASCIIDOC',

'swagger2markup.extensions.dynamicPaths.contentPath' : 'src/asciidoc/paths' ]

}

asciidoctor {

sourceDir 'src/asciidoc'

Sources { include 'pms-api.adoc' }

backends = ['html5']

attributes = [ doctype: 'book',

toc: 'left',

generated: 'src/asciidoc/generated' ]

}

build.gradle

Page 41: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

41

Generierter AsciiDoc Output[[_paths]]

== Paths

[[_getallproducts]]

=== Get a list of all available products

....

GET /products

....

==== Responses

[options="header", cols=".^2,.^14,.^4"]

|===

|HTTP Code|Description|Schema

|**200**|successful operation|< <<_product,Product>> > array

|**500**|An unexpected internal error occurred|No Content

|===

==== Produces

* `application/json`

$ gradle convertSwagger2Markup

Page 42: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

42

Ergebnis$ gradle asciidoctor

Page 43: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

43

Vielen Dank!

http://swagger2markup.github.io/swagger2markup/1.3.1/

http://asciidoctor.org/docs/asciidoctor-gradle-plugin/

Page 44: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

Philosophy screws it all up!

(Markus Harrer)

Page 45: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

https://en.wikipedia.org/wiki/File:Einstein_tongue.jpg

Page 46: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

https://www.flickr.com/photos/mararie/5380156369/

Page 47: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

https://www.flickr.com/photos/tesschamakkala/2956927902

Page 48: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

https://www.flickr.com/photos/sklathill/259520299/

Page 49: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

https://www.flickr.com/photos/ncindc/10488778795

Page 50: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

https://www.flickr.com/photos/pinkmarina/3030137927

Page 51: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

https://www.flickr.com/photos/purple-lover/13583362554/

Page 52: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

https://meditacionesdeldia.com/2014/09/25/vemos-lo-que-vemos-no-lo-que-es/

Page 53: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

https://www.flickr.com/photos/masaisrael/6812637403/

Page 54: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

https://www.flickr.com/photos/vlastimil_koutecky/9490584567https://www.flickr.com/photos/janitors/14996638702/

Page 55: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

https://www.flickr.com/photos/gogg/5143232897/

Page 56: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

https://www.flickr.com/photos/51686021@N07/33230171512

Page 57: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

https://www.flickr.com/photos/149368236@N06/33882279845/

Page 58: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

https://de.wikipedia.org/wiki/Datei:Vassily_Kandinsky,_1923_-_Composition_8,_huile_sur_toile,_140_cm_x_201_cm,_Mus%C3%A9e_Guggenheim,_New_York.jpg

Page 59: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

https://www.flickr.com/photos/83863691@N00/4133793660

Page 60: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

https://www.flickr.com/photos/stuartpilbrow/3565808509/

Page 61: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

https://www.flickr.com/photos/xavier-albaladejo/7400020870/

Page 62: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws
Page 63: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws
Page 64: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

https://www.flickr.com/photos/17094005@N00/33943802385

Page 65: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

Mit Mutationstesten die Tests testen

(Johannes Dienst)

Page 66: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

MIT MUTATIONSTESTENDIE TESTS TESTEN

@JohannesDienst

Page 67: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

67

TESTSUITE! QUALITÄT?

Page 68: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

68

CODE-REVIEWS…

TEUER

FEHLERANFÄLLIG

Page 69: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

69

SEHR

EFFEKTIV

Page 70: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

70

AUTOMATISIERUNG?

Page 71: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

71

MUTATIONS TESTEN

Page 72: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

72

Page 73: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

73

i++ i--== !=

Page 74: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

74

GETÖTET? ÜBERLEBT?

Page 75: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

75

GETÖTET!

Page 76: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

76

ÜBERLEBT!

Page 77: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

77

VIELE...

SEHR VIELE...

MUTANTEN

Page 78: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

78

ANALYSE

Page 79: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

79

Wer will fleißigeUnit-Tests sehen,der muss ihnen

Mutanten geben...

Page 80: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

80

RIP

CODE

Page 81: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

81

UNGETESTETE SEITENEFFEKTE

Page 82: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

82

ECHTE TESTLÜCKEN

Page 83: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

83

TESTSUITE

Page 84: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

84

TESTSUITE-REVIEWS

Page 85: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

85

Major

Mutant

HeckleHumbug MuCheck

Pitest

Stryker

Page 86: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

Schall und Rauch

(Michael Wiedeking)

Page 87: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

Schall und RauchÜber die Unmöglichkeit, den richtigen Namen zu finden

Page 88: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

88

static int abs(int x) {

int y = x >> 31;

return (x ^ y) - y;

}

Page 89: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

89

Eine Bibliothek soll […] unabhängig von der Breite der zur Ver-fügung stehenden Maschinenwörter den Zugriff auf einzelne Bits oder Bit-Sequenzen ermöglichen.

Welche Funktionsnamen passen am besten, wenn man auf die Bits von Wörtern zugreifen will?

Page 90: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

90

Mit Hilfe einer Funktion möchte man Zugriff auf das Vorzei-chen – also das höchstwertigste Bit – eines ganzzahligen (vor-zeichenbehafteten) Werts erhalten

byte extractSignBit(byte x)

Welches Bit-Muster wird diese Funktion vermutlich für das Byte mit dem Bit-Muster (1101 0110)2, bei dem ja das Vorzeichen gesetzt ist, liefern?

● (1000 0000)2

● (0000 0001)2

● Weder noch; das liefert …

Page 91: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

91

Mit Hilfe einer Funktion möchte man Zugriff auf das Vorzei-chen – also das höchstwertigste Bit – eines ganzzahligen (vor-zeichenbehafteten) Werts erhalten

byte extractSignBit(byte x)

Welches Bit-Muster wird diese Funktion vermutlich für das Byte mit dem Bit-Muster (1101 0110)2, bei dem ja das Vorzeichen gesetzt ist, liefern?

● (1000 0000)2

● (0000 0001)2

● Weder noch; das liefert …

Page 92: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

92

Page 93: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

93

Page 94: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

94

Aus dem Byte mit dem Bit-Muster (1010 1100)2 soll die aus den drei zusammenhängenden Bits bestehende Sequenz von der Position 2 bis Position 4 gelesen werden. Hat das nieder-wertigste Bit die Position 0 und das höchstwertigste die Position 7, so soll das Ergebnis (0000 0011)2, also dezimal 3, ergeben.

Welche Funktion wird man vermutlich dazu benutzen müssen?● extractBitField(…)● isolateBitField(…)● getBitField(…)● Noch besser wäre aber …

Page 95: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

95

Aus dem Byte mit dem Bit-Muster (1010 1100)2 soll die aus den drei zusammenhängenden Bits bestehende Sequenz von der Position 2 bis Position 4 gelesen werden. Hat das nieder-wertigste Bit die Position 0 und das höchstwertigste die Position 7, so soll das Ergebnis (0000 0011)2, also dezimal 3, ergeben.

Welche Funktion wird man vermutlich dazu benutzen müssen?● extractBitField(…)● isolateBitField(…)● getBitField(…)● Noch besser wäre aber …

Page 96: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

96

Page 97: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

97

Page 98: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

98

Mit Hilfe der Funktion

byte xxxLowestOneBit(byte x)

sollen alle bis auf das niederwertigste, gesetzte Bit „gelöscht“ werden. So soll etwa die Funktion bei Eingabe des Bytes mit dem Bit-Muster (0110 1110)2 das Byte mit dem Bit-Muster (0000 0010)2 liefern.

Wie sollte diese Funktion korrekt heißen?● extractLowestOneBit● isolateLowestOneBit● getLowestOneBit● Am besten wäre aber …

Page 99: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

99

Mit Hilfe der Funktion

byte xxxLowestOneBit(byte x)

sollen alle bis auf das niederwertigste, gesetzte Bit „gelöscht“ werden. So soll etwa die Funktion bei Eingabe des Bytes mit dem Bit-Muster (0110 1110)2 das Byte mit dem Bit-Muster (0000 0010)2 liefern.

Wie sollte diese Funktion korrekt heißen?● extractLowestOneBit● isolateLowestOneBit● getLowestOneBit● Am besten wäre aber …

Page 100: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

100

Page 101: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

101

Page 102: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

102

Page 103: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

103

Sue runs around the track twice, and John runs around the track four times more than Sue.

How many times does John run around the track?

Page 104: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

104

Sue runs around the track twice, and John runs around the track four times more than Sue.

How many times does John run around the track?

● 2 × 4 = 8

● 2 + 4 = 6

● 2 + (2 × 4) = 10

Page 105: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

105

im Grunde kann man doch alles benennen wie man will(allerdings sollte man dabei konsistent bleiben)

Page 106: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

106

Leider: Keine Zeit für Fragen!

Vielen Dank!Aber so viel Zeit muss sein:

Das … Bit

niedrigwertige niederwertige höherwertigeniedrigwertigere niederwertigere höherwertigere

niedrigstwertige niederwertigste höherwertigste höchstwertige niedrigstwertigste höchstwertigste

einzigste alleinste bestbezahlteste aktuellste

Page 107: Pecha-Kucha- Session - Java Forum Stuttgart · 6/7/2017 · 20 Jahre JUGS, 20 x JFS (Oliver Böhm) REST API Dokumentation mit Swagger und AsciiDoc (Jan-Paul Buchwald) Philosophy screws

20 Jahre JUGS, 20 x JFS(Oliver Böhm)

REST API Dokumentation mit Swagger und AsciiDoc(Jan-Paul Buchwald)

Philosophy screws it all up!(Markus Harrer)

Mit Mutationstesten die Tests testen(Johannes Dienst)

Schall und Rauch(Michael Wiedeking)

???