Softwarearchitektur kontinuierlich und effizient dokumentieren
Orientation in Objects GmbH
Weinheimer Str. 68 68309 Mannheim
www.oio.de 1 Version: 1.0 [email protected]
Ihre Sprecher
Falk Sippach (@sippsack)
Trainer, Berater, Entwickler
Architektur Co-Organisator Agile Softwareentwicklung Codequalität
Commiter DukeCon
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 2
1 Zusammenschluss Trivadis und OIO
Im Mai diesen Jahres haben sich Trivadis und Orientation in Objects (OIO) zusammen- geschlossen. Gemeinsam stärken und erweitern wir unser Angebot im Bereich Java und agiler Softwareentwicklung.
Gemeinsam bieten wir ein Neu finden Sie im Trivadis zwölfmonatiges Trainee- Trainingsangebot auch Kurse, Programm an, das Experten die von der OIO entwickelt und für Java- und Web- durchgeführt werden. technologien ausbildet.
Abstract
Man kann zwar an vielen Stellen nachlesen, wie man Architekturdokumentation strukturiert. Aber auf der Suche nach einer praktikablen Handhabung zur Erstellung und Pflege enden die meisten Versuche in der WYSIWYG-Hölle einer Textverarbeitung oder im tiefen Schlund eines Wikis.
In diesem Vortrag wollen wir uns anschauen, wie aufbauend auf bestehenden Tools und Textformaten eine möglichst redundanzfreie Dokumentation erstellt und für verschiedene Zielgruppen in ansprechenden Formaten ausgeliefert werden kann. Es wird dabei um Begriffe wie Continuous Documentation und Documentation as Code gehen.
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 4
2 Doku-Smells Die7 Sünden der Architekturdokumentationdokumentation
Foto von jesperbkskov: https://pixabay.com/en/fish-newspaper-food-russian-salted-224097/ (CC0 Public Domain Lizenz )
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 5
Anforderungen klären
Architektur Architektur bewerten entwerfen
Architektur kommunizieren
Warum dokumentieren? Warum aus: Effektive Softwarearchitekturen (G. Starke)
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 6
3 Gründe für eine Architektur-Dokumentation
Entwurfsunterstützung
Kommunikation
Bewertbarkeit
Frage nach Warum
Neue Mitarbeiter
Grafik von The Practical Dev: https://github.com/thepracticaldev/orly-full-res/blob/master/notwritingdocs-big.png (CC0 Public Domain Lizenz )
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 7
WYSIWYG ABLAGE REDUNDANZEN TEXTWÜSTE Smells
- HANDARBEIT TOTE DOKU
Doku ELFENBEINTURM
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 8
4 WYSIWYG ABLAGE REDUNDANZEN TEXTWÜSTE Smells
- HANDARBEIT TOTE DOKU
Doku ELFENBEINTURM
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 9
Hauptsache, du machst es nicht mit Word!
http://www.machsmit.de/kampagne/motive_der_kampagne/index.php
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 10
5 Textverarbeitung Visio Powerpoint UML-Tools
Foto von Antranias: https://pixabay.com/en/telescope-view-distant-binoculars-1201497/ (CC0 Public Domain Lizenz )
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 11
Alternative Datenformate zu Textverarbeitung
Plain-Text, leicht lesbar, einfach editierbar, automatisiert verarbeitbar Plain-Text
kollaborativ eingeschränkte Lesbarkeit
Wikis LaTex/DocBook visuell, kurz & knapp Austauschformat Mindmaps Richtext
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 12
6 Markdown
Normaler Text wird so dargestellt wie eingegeben.
*Kursiv*, **Fett** und ***Fett kursiv*** bzw. _Kursiv_, __Fett__ und ___Fett kursiv___
Markiert Text als `Inline-Quelltext`
Ein Code-Block durch Einrückung mit vier Leerzeichen
* Ein Punkt in einer ungeordneten Liste * Ein Unterpunkt, um vier Leerzeichen eingerückt
1. Ein Punkt in einer geordneten Liste 2. Ein weiterer Punkt 1. Noch ein Punkt bei mehrfacher Angabe derselben Ziffer
# Überschrift in Ebene 1 #### Überschrift in Ebene 4
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 13
AsciiDoc
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 14
7 Welcher Markup-Typ bin ich?
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 15
Templates für:
Microsoft Word Confluence Markdown, AsciiDoc Latex, DocBook HTML, EPUB Textile
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 16
8 WYSIWYG ABLAGE REDUNDANZEN TEXTWÜSTE Smells
- HANDARBEIT TOTE DOKU
Doku ELFENBEINTURM
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 17
Foto von UliSchu: https://pixabay.com/en/organization-register-folder-files-1205171/ (CC0 Public Domain Lizenz )
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 18
9 Unser täglich Entwickler-Brot:
• Plain-Text • Entwicklungs- umgebung • Kommandozeilen- werkzeuge • Versions- verwaltung
Foto von geralt: https://pixabay.com/de/unternehmer-start-start-up-karriere-696976/ (CC0 Public Domain Lizenz )
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 19
Code-Nähe Ablage im Repo Versionier-/diffbar Synchrone Auslieferung Offlinefähig Teil des Build-Prozess Generierung Automatisierung Flexible Ausgabeformate
Documentation as Code
Foto von ahobbit: https://pixabay.com/en/vault-business-bank-vault-bank-1144249/ (CC0 Public Domain Lizenz )
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 20
10 WYSIWYG ABLAGE REDUNDANZEN TEXTWÜSTE Smells
- HANDARBEIT TOTE DOKU
Doku ELFENBEINTURM
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 21
Single Source of Truth
Includes Quellcode verlinken Platzhalter einbetten
Foto von pcdazero: https://pixabay.com/en/umbrellas-sea-holiday-summer-beach-921501/ (CC0 Public Domain Lizenz )
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 22
11 Inhalte generieren
WSDL, Swagger DB-Schema Annotationen JavaDoc Markup generieren
Foto von ClassicallyPrinted: https://pixabay.com/en/wind-turbine-energy-electricity-937715/ (CC0 Public Domain Lizenz )
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 23
Schnittstellenbeschreibung generieren
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 24
12 WYSIWYG ABLAGE REDUNDANZEN TEXTWÜSTE Smells
- HANDARBEIT TOTE DOKU
Doku ELFENBEINTURM
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 25
Ein Bild sagt mehr als tausend Worte!
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 26
13 Quelle für Bilder/Grafiken im Binärformat
• Export aus UML-Modellen • Manuelle Erstellung (Bildverarbeitung/Visualisierungsprogramme)
• Einbetten/Verlinken in Markup-Sprachen:
![Alternativtext]( bild.png "Bildtitel hier") image:: bild.png [Alternativtext]
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 27
Tools
yEd ist ein kostenloses Visualisierungsprogramm
… und Visio, Enterprise Architect, Magic Draw, …
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 28
14 Diagramme als textuelle Beschreibung
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 29
"AsciiArt"
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 30
15 Online- Tools
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 31
Generation Plain-Text-Diagramme
Quellen:
Sourcecode DB-Schema XML-Modell
Foto von herbert2512: https://pixabay.com/en/steam-engine-toys-flywheel-drive-1592908/ ( CC0 Public Domain Lizenz )
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 32
16 Quellcode DB-Schema PlantUML + @startuml interface DemoService UML-Modell AsciiDoc DemoService <|-- DemoServiceImpl
Schnittstellen generieren enum State { NEW Konfiguration OPEN APPROVED # Werte von State IN_PROGRESS FIXED * NEW interface DemoService { } * OPEN String foobar(); * APPROVED } @enduml * IN_PROGRESS * FIXED class DemoServiceImpl implements DemoService { @Override public String foobar() { return "demo"; } } enum State { NEW , OPEN , APPROVED , IN_PROGRESS , FIXED }
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 33
WYSIWYG ABLAGE REDUNDANZEN TEXTWÜSTE Smells
- HANDARBEIT TOTE DOKU
Doku ELFENBEINTURM
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 34
17 Agile Projekte
iterativ kontinuierlich
Foto von Unsplash: https://pixabay.com/de/fluss-bachlauf-bach-l%C3%A4ndlich-768654/ (CC0 Public Domain Lizenz )
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 35
Automatisiert erstellen Regelmässig ausliefern Ständig ergänzen Reviewen Nachbessern
Continuous Documentation
Foto von Ted Van Pelt: https://www.flickr.com/photos/bantam10/5209157298 (CC BY 2.0 Lizenz )
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 36
18 HTML, PDF, …
Entwickler Dokumentation als Plain Text Leser
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 37
Ausrichtung auf Zielgruppen und Ausgabeformate
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 38
19 Single Source of Truth
Blog/Wiki
Präsentation Dokument
PDF Video, Podcast HTML E-Reader Papier
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren
WYSIWYG ABLAGE REDUNDANZEN TEXTWÜSTE Smells
- HANDARBEIT TOTE DOKU
Doku ELFENBEINTURM
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 40
20 https://twitter.com/ewolff/status/1024292485869326336
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 41
Wenn man die Architektur nicht erklären/dokumentieren kann, ist sie zu kompliziert!
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 42
21 nur so viel wie nötig geringe Änderungsrate Zielgruppenbedürfnisse Feedback einpflegen
Pragmatik/Effektivität
Foto von PublicDomainPictures: https://pixabay.com/de/ansager-audio-schwarz-kassette-316584/ (CC0 Public Domain Lizenz )
Foto von Devanath: https://pixabay.com/de/bleistift-b%C3%BCro-design-kreative-1209544/ (CC0 Public Domain Lizenz )
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 43
Validierung
SanityChecks Broken Links PDFUnit
Foto von skeeze: https://pixabay.com/en/military-honor-guard-inspection-642639/ (CC0 Public Domain Lizenz )
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 44
22 Ausführbare Dokumentation
Ausführbare Tests Einbettung in Dokument Reportgenerierung
Foto von Wikimedia: https://commons.wikimedia.org/wiki/File%3A2014_W6N_-_France_vs_Italy_-_Christelle_Le_Duff_5780.jpg ( Creative Commons Attribution 3.0 Unported )
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 45
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 46
23 Kontinuierliche Analyse der Architekturkonformität
Quellcode Report Artefakte
Regeln (Soll-Architektur) Veröffentlichung (SonarQube)
https://www.msg.group/news/open-source-einsatz-zur-qualitaetssicherung-in-der-software-entwicklung
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 47
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 48
24 Living Documentation
+
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 49
[[architecture:UndefinedDependencies]] [source,cypher,role=constraint,requiresConcepts=" architecture:DefinedDependencies PlantUML There must not be dependencies between Maven project which have not been defined. ---- AsciiDoc MATCH (p1:Maven:Project)-[:CREATES]->(:Artifact)-[:CONTAINS] (p2:Maven:Project)-[:CREATES]->(:Artifact)-[:CONTAINS] (t2)-[:DEPENDS_ON]->(t1) WHERE NOT (p1)-[:DEFINES_DEPENDENCY]->(p2) RETURN * ---- [[architecture:DefinedDependencies] [plantuml,role=concept] ---- [artifactId:xo.impl] as impl <<:Maven:Project>> [artifactId:xo.api] as api <<:Maven:Project>> [artifactId:xo.spi] as spi <<:Maven:Project>>
impl -> api : Defines Dependency impl -> spi : Defines Dependency spi -> api : Defines Dependency ----
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 50
25 Softwarearchitekturvisualisierung coden
https://structurizr.com/
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 51
WYSIWYG ABLAGE REDUNDANZEN TEXTWÜSTE Smells
- HANDARBEIT TOTE DOKU
Doku ELFENBEINTURM
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 52
26 Klassische Architekten Rolle
Foto von scottwebb: https://pixabay.com/en/toronto-architecture-skyscraper-1594940/ (CC0 Public Domain Lizenz )
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 53
Architekt/Senior Developer als Ratgeber/Mentor und Moderator
Foto von JESHOOTS: https://pixabay.com/de/warten-termin-zeitplan-zeit-eile-410328/ (CC0 Public Domain Lizenz )
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 54
27 Vorbereiten Planen Erinnern Delegieren Integrieren Prüfen
Dokumentation braucht einen Kümmerer
Foto von Berzin: https://pixabay.com/en/ambulance-doctor-students-game-2166079/ (CC0 Public Domain Lizenz )
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 55
WYSIWYG ABLAGE REDUNDANZEN TEXTWÜSTE Smells
- HANDARBEIT TOTE DOKU
Doku ELFENBEINTURM
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 56
28 WYSIWYG Plain Text ABLAGE Documentation as Code REDUNDANZEN Generierung TEXTWÜSTE Mehr Grafiken HANDARBEIT Automatisierung TOTE DOKU Lebendige Dokument.
Zusammenfassung ELFENBEINTURM Kümmerer
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 57
REPO
Continuous Documentation Documentation as Code
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 58
29 Vielen Dank für Ihre Aufmerksamkeit!
Orientation in Objects GmbH
Weinheimer Str. 68 68309 Mannheim
www.oio.de [email protected] 59
Verschiedene Szenarien
Foto von nikidinov: https://pixabay.com/en/ballet-swan-lake-ballerina-dance-2124652/ (CC0 Public Domain Lizenz )
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 60
30 Szenario 1: Markdown, Pandoc, PlantUML, yEd
• Schreiben in Markdown in IDE (IntelliJ IDEA) inkl. Preview
• PDF-Erzeugung mit PanDoc über LaTex-Zwischenschritt inkl. Corporate Design
• UML-Diagramme mit PlantUML, Live-Ansicht/Export aus IDE
• andere Diagramme mit yEd, Export als *.png
• Stash/Bitbucket Server als Repo – rendert Markdown direkt in Weboberfläche – readme.md Verlinkungen auf wichtige Dokumente
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 61
Szenario 2: AsciiDoctor, Maven, PlantUML
• Erstellen AsciiDoc und PlantUML in IDE mit Preview
• Maven-Plugin zum Erzeugen des HTML/PDF
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 62
31 Szenario 3: Generierung aus Quellcode
• Quellcode parsen – Reflection – Spring Kontext – …
• in Unit-Test aus Klassen-Strukturen Diagramm-Markup erzeugen – z. B. PlantUML – als Text-Datei ablegen und in Markup-Dokumentation verlinken
• im Build-Prozess als Input für Markup-Konvertierung einlesen
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 63
Szenario 4: Schnittstellenbeschreibung
• Generierung aus WSDL, WADL, Swagger
• Einbindung in Build-Prozess
• Swagger2Markup
• JAX-RS Analyzer
• Spring REST Docs
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 64
32 Szenario 5: Ausführbare Dokumentation
• Quellcode-Struktur in Graph-Datenbank importieren
• Architektur-Regeln als Graph-Abfragen in AsciiDoc einbetten
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 65
Szenario 6: docToolchain
https://github.com/docToolchain/docToolchain
docToolchain is an implementation of the docs-as-code approach for software architecture. The basis of docToolchain is the philosophy that software documentation should be treated in the same way as code together with the arc42 template for software architecture.
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 66
33 Szenario 7: Wiki
CC BY-SA 3.0, https://de.wikipedia.org/wiki/Ward_Cunningham#/media/File:Ward_Cunningham_-_Commons-1.jpg
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 67
Zusammenarbeit
Verlinkung Review-/Redaktions-Prozess Prozess-Unterstützung Abbildung Workflow Erweiterung über Plugins Alles in einer Box!
Foto von makamuki0: https://pixabay.com/de/castellers-castells-h%C3%A4nde-ananas-921018/ (CC0 Public Domain Lizenz )
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 68
34 Strukturiert? Plain-Text? Offlinefähigkeit? Versionierung? Code-Nähe? Automatisierung? Druckausgabe? Zielgruppen? Kontextwechsel
Schlund des Wiki
Foto von MartinStr: https://pixabay.com/de/krokodil-thailand-z%C3%A4hne-f%C3%BCtterung-225615/ (CC0 Public Domain Lizenz )
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 69
Tasks Mentions
Kommentare Jira
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 70
35 Gliffy (Diagramme, UML)
Balsamiq Mockups
© Orientation in Objects GmbH Softwarearchitektur kontinuierlich und effizient dokumentieren 71
36