Methode
Motivation für den Einsatz
Unabhängig vom Architekturstil besteht jedes IT-System aus Diensten. Ein Microservice mit einem REST-API ist ein ein Dienst. In einem reaktiven IT-System gibt es Dienste, die Nachrichtenobjekte produzieren oder konsumieren. Auch in monolithischen IT-Systemen mit klassischen Applikationsservern lassen sich Dienste identifizieren. Der Baustein Service ist ein Artefakt der Systemstruktur, mit dem wir solche Ergebnisse der Software-Entwicklung dokumentieren. Dabei steht der fachliche Nutzen des Dienstes im Vordergrund. Der Titel des Bausteins gibt einem Dienst einen eindeutigen Namen.
Agile Software-Entwicklung harmoniert sehr gut mit dem Konzept der Microservices.
Spricht man von einem Microservice, dann meint man damit einen bestimmten Architekturstil. Mit diesem Architekturstil ist es in der Regel möglich, in einer Iteration einen Wert für das Produktinkrement zu schaffen. Das bedeutet, es gibt mehr als einen Weg, ein Microservice zu programmieren. Der Architekturstil bestimmt auch, wie Microservices miteinander verbunden sind, um Daten auszutauschen. Um dem Team in der agilen Software-Entwicklung den maximalen Spielraum für Experimente und kontinuierliche Verbesserungen der Code-Basis (engl. refactoring) zu geben, verwendet cards+ den Begriff Dienst als Abstraktion. Ein Dienst kann daher in der einfachsten Form ein einzelnes Microservice sein. Es macht aber aus Sicht einer robusten Produktdokumentation sehr häufig Sinn, eine Gruppe von Microservices zusammenzufassen, die eine hohe Kohäsion haben.
Autoren wollen im Baustein Service nur das dokumentieren, was Entwickler nicht durch lesbare Teile vom Code oder code-nahe Artefakte bereits ausreichend gut dokumentiert haben. Mit Swagger kann beispielsweise ein auf REST basierender Dienst spezifiziert werden, mit WSDL ein auf SOAP basierender Dienst. Autoren beschreiben im Wiki nur, was sich gar nicht oder sehr schwer aus dem Code herauslesen lässt.
Wissensmanagement richtig organisieren.
Zielgerichtet.
Agil.
Iterativ.
Prozesse
Projektmanagement
Der Produktverantwortliche hat mit dem Baustein Service die Möglichkeit, frühzeitig einen wichtigen Dienst als Entwurf zu erfassen, wenn es für das Verständnis der Anwendungsdomäne hilfreich ist. Er macht das in Abstimmung mit dem Team.
Im Steckbrief des Bausteins befindet sich eine Liste der geplanten Technologien für die Implementierung des Dienstes. Das ist eine sehr wertvolle Information für das Architekturmanagement, um Themen wie Lizenzkosten, technische Unterstützung vom Hersteller oder unternehmensweite Vorgaben rechtzeitig zu behandeln.
Prozesse
Anforderungsanalyse
Der Produktverantwortliche hat mit dem Baustein Service die Möglichkeit, alle ein- und ausgehenden Daten und das Verhalten eines Dienstes zu beschreiben, die wichtig für das Verständnis der Fähigkeiten der Software sind.
Besonders bei Diensten, die Schnittstellen des IT-Systems zu anderen IT-Systemen realisieren, besteht oft die Notwendigkeit, frühzeitig Datenstrukturen, Protokolle und nicht funktionale Aspekte wie Sicherheit oder Robustheit zu fixieren. Er macht das in Abstimmung mit dem Team.
Prozesse
Produktentwicklung
Der Baustein Service ist für Leser (z.B. Entwickler oder Tester) der zentrale Einstieg, um sich über die Bedeutung eines Dienstes zu informieren. Der Überblick im Baustein muss jeden Leser in die Lage versetzen, den Dienst fachlich einzuordnen. Über die Verknüpfung der ein- und ausgehenden Daten mit den Bausteinen Entity oder Event bekommt ein Leser Informationen zu Objekten, die eine wichtige Rolle in der Datenverarbeitung und -speicherung spielen. In der im Baustein veröffentlichten Spezifikation finden Leser alle Details zur Implementierung des Dienstes.
Gemäß Prinzip COD gilt der Titel des Bausteins und die Namen der beschriebenen Eigenschaften als Vorgabe für den Namen der Implementierungsklasse eines Dienstes. Mit dieser einfach umzusetzenden Regel muss kein Autor mehr eine spezielle Dokumentation im Wiki schreiben, um einen Dienst mit der technischen Lösung zu verknüpfen. Der Titel des Bausteins reicht als Einstieg in die Implementierung.
Seitenvorlagen für alle Bausteine und hilfreiche Makros für die Verwendung in Confluence.
Qualität
Seitenvorlage des Bausteins
Confluence unterstützt mit Seitenvorlagen die Idee der Bausteine optimal. Das folgende Beispiel kann direkt als HTML im Editor der Seitenvorlagen eingefügt werden.
Bitte hier Klicken, um den Quelltext anzuzeigen
<ac:layout> <ac:layout-section ac:type="single"> <ac:layout-cell> <h1>Steckbrief</h1> <ac:structured-macro ac:macro-id="602764ad-f953-4c2a-9ee5-db2568da1960" ac:name="details" ac:schema-version="1"> <ac:rich-text-body> <table class="relative-table wrapped" style="width: 100.0%;"> <colgroup> <col style="width: 25.0%;"/> <col style="width: 75.0%;"/> </colgroup> <tbody> <tr> <th>Kurzbeschreibung</th> <td> <div class="content-wrapper"> <ac:structured-macro ac:macro-id="5ea10a2b-3496-49c5-85b3-e80e9a47c6d2" ac:name="excerpt" ac:schema-version="1"> <ac:parameter ac:name="atlassian-macro-output-type">BLOCK</ac:parameter> <ac:rich-text-body> <p> <ac:placeholder>Kurzbeschreibung der Komponente (management summary).</ac:placeholder> </p> </ac:rich-text-body> </ac:structured-macro> </div> </td> </tr> <tr> <th colspan="1">Technologie</th> <td colspan="1"> <ac:placeholder>Komma-separierte Liste der verwendeten Module.</ac:placeholder> </td> </tr> </tbody> </table> </ac:rich-text-body> </ac:structured-macro> <h1>Beschreibung</h1> <h2>Verhalten beim Neustart</h2> <p>Keine Angabe. <ac:placeholder>oder das Verhalten beim Neustart ist eine Erkenntnis aus dem Exceptiontest. Was ist zu beachten, wenn die Komponente neu gestartet wird? </ac:placeholder> </p> <h2>Datenhaltung</h2> <p>Keine Angabe. <ac:placeholder>oder einen Überblick über gespeicherte Daten der Komponente geben oder den Leervermerk Keine, wenn die Komponente zustandslos ist. </ac:placeholder> </p> <h2>Datenverarbeitung</h2> <p>Keine Angabe <ac:placeholder>oder einen Überblick über Verarbeitungsregeln, verwendeten Algorithmen und andere Besonderheiten der Komponente geben. </ac:placeholder> </p> <h2>Eingangsdaten</h2> <table class="relative-table wrapped" style="width: 100.0%;"> <colgroup> <col style="width: 25.0%;"/> <col style="width: 75.0%;"/> </colgroup> <tbody> <tr> <th>Datentyp</th> <th>Beschreibung</th> </tr> <tr> <td> <ac:placeholder>Bitte hier einen Link zum Nachrichtenmodell oder einer Event-Seite einfügen</ac:placeholder> </td> <td> <ac:placeholder>Bitte hier kurz die Bedeutung des Datentyps und die Herkunft der Daten erklären.</ac:placeholder> </td> </tr> </tbody> </table> <h2>Ausgangsdaten</h2> <table class="relative-table wrapped" style="width: 100.0%;"> <colgroup> <col style="width: 25.0%;"/> <col style="width: 75.0%;"/> </colgroup> <tbody> <tr> <th>Datentyp</th> <th>Beschreibung</th> </tr> <tr> <td> <ac:placeholder>Bitte hier einen Link zum Nachrichtenmodell oder einer Event-Seite einfügen</ac:placeholder> </td> <td> <ac:placeholder>Hier bitte die Bedeutung des Datentyps erklären.</ac:placeholder> </td> </tr> </tbody> </table> </ac:layout-cell> </ac:layout-section> <ac:layout-section ac:type="single"> <ac:layout-cell> <p> <br/> </p> </ac:layout-cell> </ac:layout-section> <ac:layout-section ac:type="single"> <ac:layout-cell> <h1>Spezifikation</h1> <ac:structured-macro ac:macro-id="d5b48f6f-d8c9-4dee-87c6-51b29ee116f9" ac:name="panel" ac:schema-version="1"> <ac:parameter ac:name="borderWidth">0</ac:parameter> <ac:parameter ac:name="borderStyle">none</ac:parameter> <ac:rich-text-body> <p> <ac:placeholder>Bitte hier das Markdown-Dokument aus dem Git-Repository mit dem Markdown-Editor einfügen.</ac:placeholder> </p> </ac:rich-text-body> </ac:structured-macro> </ac:layout-cell> </ac:layout-section> </ac:layout>
Struktur
Eigenschaften des Bausteins
Der Baustein Service repräsentiert einen Dienst (engl. service) des IT-Systems.
Er hat einen Steckbrief mit einer Kurzbeschreibung und einer Liste der eingesetzten
Technologien.
Er beschreibt das Verhalten des Dienstes.
Der Seitentitel beginnt immer mit Service
.
Durch die Seitenvorlage hat jede Seite das Stichwort service
.
Sie kann aber um weitere Schlagworte ergänzt werden.
Dadurch wird die Seite leichter auffindbar.
Der Baustein Service hat eine Unterseite für jede veröffentlichten Spezifikation. Erlaubt der Architekturstil mehr als eine Version des Dienstes, z.B. durch versionierte Schnittstellen, dann gibt es auch mehr als eine gültige Spezifikation mit entsprechender Kennzeichnung.
Der Baustein Service bündelt eine mit der Implementierung wachsende Menge von Handlungsanweisungen.
Der Baustein Service hat einen Zustand. Er ist in Arbeit, wenn keine Spezifikation vorhanden ist. Er ist fertig, wenn eine Spezifikation vorhanden ist und die Implementierung Teil eines Produktinkrementes ist.
Der Baustein Service hat durch die Spezifikation einen Bezug zu einem Produktinkrement.
Der Baustein Service wird in der Sprache der Entwickler geschrieben.