cards+
Struktur

cards+ hilft bei der Einführung und Durchsetzung einer Struktur für die Produkt­dokumentation im Wiki. Die Bau­steine von cards+ sind hierar­chisch struk­turiert. «Domain-Driven Design» war eine wichtige Inspiration. Bau­steine stellen Vor­gaben für viele Arten dokumen­­tier­­ter Infor­­mationen für Auto­ren dar, wie es sie auch in Form von Pro­gram­mier­­­richt­­­linien für Ent­wick­ler gibt.

cards+ für Ordnung mit System

Viele Teams starten mit der Absicht, ihre Software zu dokumentieren. Anfangs sind Entwickler motiviert, ihr Wissen auch schriftlich zu teilen. Ein Wiki macht es den Autoren auch sehr einfach. Ohne Regeln schreiben, formatieren und gliedern sie ihre Beiträge unterschiedlich. Die Folge ist, dass Leser Informationen nicht auf den ersten Blick finden.

Technische Redakteure kennen die Probleme. Und sie haben auch Lösungen. Technische Dokumentation entsteht in einem Team. Dokumentierte Informationen werden klassifiziert. Die Dokumentation ist hierarchisch aufgebaut. Dokumente sind miteinander verknüpft.

cards+ hilft bei der Einführung und Durchsetzung einer Struktur im Wiki. Die Lösungen der technischen Redakteure machen Inhalte in einem Wiki beherrschbar. Die Bau­steine von cards+ orien­tie­ren sich an Kon­zep­ten, die Eric Evans in sei­nem Buch  «Domain-Driven Design: Tack­ling Com­plexity in the Heart of Soft­ware» sehr aus­führ­lich beschreibt. Das gilt im Beson­de­ren für die gemein­same Sprache (engl. ubiqui­tous language) und der Fest­legung von Kon­text­gren­zen (engl. bounded con­text). Die gemein­same Sprache fin­det bei cards+ Aus­druck durch das Glossar und die konse­quente Ver­wen­dung der Sei­ten­titel der Bau­steine im Wiki ent­spre­chend dem Prin­zip COD.

In den Bausteinen der System­­beschrei­bung werden die Grenzen des IT-Systems definiert und alle Fähig­keiten der Software voll­ständig, wider­spruchs­frei und hierarchisch erfasst. Fähig­keit ist der Sammel­begriff für Anwendungs­­fälle, beson­deren Situa­tionen und bekannten und akzep­tierten Fehler eines IT-Systems.

Die Bausteine der System­­struk­tur haben das Ziel, die Struktur der Software korrekt zu erfassen und einen Überblick über das Zusammen­spiel der Dienste und Objekte zu geben. Ein nach­richten-orien­tierter Architektur­stil ergibt eine andere System­­struktur als die Reali­sierung eines IT-Systems mit einem monolithischen Appli­kations­­servers.

In den Bausteinen für den Architektur­entwurf werden die vom Auftraggeber geforderten Qualitäts­merkmale, fundamentale Entscheidungen und übergreifende Konzepte nachvollziehbar erfasst. Ein ganz wichtiges Ziel ist die Darstellung und Kommunikation des Architektur­stils.

Das Metamodell

Ein Überblick.

Bausteine der System­beschreibung

Unter dem Sammelbegriff Systembeschreibung bündelt cards+ Bausteine für Fähigkeiten einer Software. Die Bausteine sind streng hierarchisch aufgebaut, vom Groben ins Feine. An der Spitze steht der Gegenstand (engl. topic, theme) für die Entwicklung. Die sehr abstrakte Sicht auf den Aufgabenbereich, in dem sich das Produkt bewegt, wird vollständig und widerspruchsfrei in Funktionalitäten und Fähigkeiten zerlegt. Zur Systembeschreibung zählen auch «Verständnismodelle», die wichtige Zusammenhänge aus fachlicher Sicht erklären.

Die Systembeschreibung ist keine Anfor­derungs­doku­mentation.

Der Pro­dukt­ver­ant­wort­liche nutzt die Bausteine der Systembeschreibung, um so früh wie möglich seine Vision des Produktes zu konkreti­sieren. Er tut das am besten bereits beim Start des agilen Entwicklungsprojektes, unter Ein­beziehung des Auftrag­gebers. Er hat die Möglichkeit, produktspezifische Funktio­nalitäten und Fähigkeiten der Software früh­zeitig einen Namen zu geben. Ein guter Titel legt so den Grundstein für eine gemeinsame Sprache von Auftrag­geber, Produktverantwortlichen und dem Team. Interessierte Parteien können sich später jederzeit einen sehr kompakten Überblick über den Umfang des Produktes verschaffen.

Der Baustein Topic beschreibt einen klar abgegrenzten Aufgabenbereich (engl. scope), in dem das IT-System Verwendung findet. Er vermittelt einen Überblick und nimmt Bezug auf die Unternehmensprozesse. Er bündelt eine mit den Anforderungen wachsende Menge von Funktionalitäten, die im Detail mit dem Baustein Epic dokumentiert werden.

Der Baustein Epic gibt einer produktspezifischen Funktionalität einen eindeutigen Namen und enthält eine fachliche Beschreibung. Er bündelt eine mit den Anforderungen wachsende Menge von fach­­lich ver­wand­ten Fähig­­kei­ten, beson­deren Situa­tionen und bekannten akzep­tierten Fehlern, die im Detail mit dem Baustein Case dokumentiert werden.

Der Baustein Case gibt einem Anwendungs­fall, einer besonderen Situation oder einem bekannten und akzeptierten Fehler einen eindeutigen Namen und enthält eine fachliche Beschreibung und — sobald die Fähigkeit realisiert wurde — die Essenzschritte der gewählten Lösung.

Der Baustein File realisiert das Konzept der Medien­biblio­thek. Mit dem Baustein werden Präsen­tatio­nen, Filme, Foto­gra­fien, Abbil­dun­gen oder Dia­gramme, die als Datei (engl. file) in ver­schie­denen For­matenvor­lie­gen, zen­tral und ver­link­bar im Wiki abge­legt.

Der Baustein Link realisiert das Konzept der Link­sammlung. Mit dem Baustein wird eine beliebige Verknüpfung (engl. link) außerhalb des Wikis als doku­men­tierte Infor­mation zen­tral und ver­link­bar erfasst.

Der Baustein Term realisiert das Konzept für ein Glossar. Mit dem Baustein wird ein wichtiger Begriff (engl. term) der Anwendungsdomäne, in der die Soft­ware zum Ein­satz kommt, zen­tral und ver­link­bar im Wiki erfasst.

Zurück zur Übersicht

Bausteine der System­struktur

Unter dem Sammelbegriff Systemstruktur bündelt cards+ Bausteine für Dienste und Objekte. Sie haben das Ziel, die Struktur der Software zu erfassen und einen Überblick über das Zusammenspiel von Diensten und Objekten zu geben.

Software architecture is loosely defined as the organizational structure of a software system including components, connections, constraints and rationale.

Paul Clement

Was Paul Clement hier beschreibt, ist ein wesentlicher Treiber für die Bausteine der Systemstruktur. Auch die Idee des “domain driven design” wird in cards+ berücksichtigt und spiegelt sich in den Namen der Bausteine wider. Das Ziel der Etablierung einer gemeinsamen Sprache verfolgen beide Ansätze.

Ein Punkt ist besonders wichtig: Entwickler brauchen keine Dokumentation, die im Detail erklärt, wie Code funktioniert. Nur im Code steckt die volle Wahrheit! Das ist eine Tatsache, die Autoren akzeptieren und zu ihrem Vorteil verwenden, indem sie lesbare Teile vom Code, Code-Kommentare und code-nahe Artefakte als dokumentierte Information in die Pro­dukt­doku­men­tation aufnehmen.

Daher gilt immer: Programmieren ist dokumentieren!

Alle Details zur Implementierung befinden sich einer Spezifikation. Das Wiki ist der Ort der Veröffentlichung dieser Spezifikation. Sie muss jedoch nicht im Wiki gepflegt werden.

Im Steckbrief der Bausteine der Systemstruktur gibt es immer eine Kurzbeschreibung. Ganz allgemein geht es in den Bausteinen um die Sicherung von Wissen, das gar nicht oder nur sehr schwer aus dem Code herausgelesen werden kann, als wertvolle Ergänzung zur Spezifikation, die immer aus der Code-Basis stammt.

Mit dem Baustein Domain geben Autoren einer Zusammenstellung von Diensten und Objekten mit einer starken Kohäsion einen eindeutigen Namen. Die untergeordneten Bausteine bilden einen «bounded context», ein Begriff aus dem Domain-Driven Design.

Mit dem Baustein Service beschreiben Autoren einen fachlichen Dienst. Ein Dienst ist ein Akteur in einem IT-System. Der Begriff ist abstrakt. Ein Microservice ist ein ein Dienst. Ein REST-API ist ein Dienst. Eine Komponente in einem Applikationsserver ist ein Dienst.

Mit dem Baustein Entity beschreiben Autoren ein fachlich relevantes Informationsobjekt. Ein Informationsobjekt ist ein Datenspeicher, also «etwas, das existiert». Es ist in der Regel mit einer Identität verbunden und repräsentiert einen Zustand in einem Dienst.

Mit dem Baustein Event beschreiben Autoren ein fachlich relevantes Nachrichtenobjekt. Ein Nachrichtenobjekt ist ein wesentlicher Bestandteil einer event-basierten Schnittstelle eines Dienstes. Ein Nachrichtenobjekt kann eine zeitlich begrenzte Gültigkeit haben.

Der Baustein Layout enthält Entwürfe oder Skizzen eines Teils der Bedienoberfläche. Layout ist der Oberbegriff für eine ganze Reihe spezialisierter Ausprägungen, z.B. Ansicht und Dialog in einer Website oder Screen in einer Smartphone-App. Window, Panel, Prompt und Widget, u.s.w. sind wiederverwendbare Muster in einem Layout.

Mit dem Baustein Task erstellen Autoren eine Hand­lungs­anweisung zur Bedienung eines Dienstes. Die Betriebs­organi­sation braucht diese schrittweisen Anleitungen, um einen unter­bre­chungs­losen und stö­rungs­freien Betrieb des IT-Systems gewähr­leis­ten zu können.

Zurück zur Übersicht

Bausteine für den Architektur­entwurf

Der Architekturentwurf ist ein Sammelbegriff für Dokumentation, mit der Autoren geforderte Qualitätsmerkmale, wichtige Entscheidungen und übergreifende Konzepte beschreiben.

Software architecture is the set of design decisions which, if made incorrectly, may cause your project to be cancelled.

Eoin Woods

Eoin Woods sagt, dass die Architektur allein dadurch ausreichend genau dokumentiert ist, wenn alle Entscheidungen bekannt sind, die eine Gefahr für Produkt oder Projekt darstellen, wenn sie falsch waren. cards+ geht hier mit seinen Bausteinen des Architekturentwurfs einen Schritt weiter.

Auftraggeber und Produktverantwortliche machen Vorgaben, die häufig große Auswirkung auf die Entwicklung des Produktes haben. Solche Vorgaben werden dadurch charakterisiert, dass sie den Lösungsraum für die Entwicklung des Produktes einschränken. Gerade bei jene Entscheidungen eines Auftraggebers, die etwas ausschließen, ist ein Nachweis besonders wichtig. Qualitätsmerkmale, auch bekannt als nicht funktionale Aspekte, legen fest, unter welchen Rahmenbedingungen Funktionen eines Systems ausgeführt werden sollen. Qualitätsmerkmale werden nicht einfach programmiert. Sie sind Eigenschaften, die durch die Wahl des Architekturstils, durch den Einsatz bestimmter Infrastrukur oder Anwendung bestimmter Entwurfsmuster bestimmt werden.

Der Bau­stein Concept wird ver­wendet, um ein wieder­kehren­des Ent­wurfs­muster bei der Imple­men­tierung (engl. software pattern) oder ein über­greifen­des Kon­zept pro­dukt­spezi­fisch zu beschrei­ben. Beson­deres Augen­merk liegt dabei auf den Quali­täts­­merk­malen als Konse­quenz der gewähl­ten Lösung.

Mit dem Baustein Module lassen sich Eigenschaften, Einschränkungen und Besonderheiten von Software erfassen, die beim Auf­bau eines indivi­duellen Pro­duktes vom Team genutzt, aber nicht selbst realisiert wer­den. Modul ist der Sammelbegriff für «fremde» Bestandteile eines Produktes. Besonderes Augenmerk liegt dabei auf den Qualitäts­merkmalen des Moduls und die damit verbundenen nicht funktionalen Aspekte.

Der Baustein Decision wird verwendet, um konsequent alle fundamentalen technischen Entscheidungen oder vom Auftraggeber geforderten Qualitäts­merkmale, deren Rücknahme bzw. Veränderung große Auswirkung auf das Produkt haben, zu dokumentieren.

Der Baustein Policy wird verwendet, um konsequent alle Regeln für die Zusammenarbeit und den Einsatz von Anwendungen und Werkzeugen zu dokumentieren. Regeln sind Ausdruck der Qualitäts­politik in der Organisation.

Zurück zur Übersicht

Die Doku­men­tation ist prüfbar

Die Pro­dukt­­doku­men­tation umfasst das gesamte Wissen zu einem Pro­dukt­­inkre­ment. Sie beschreibt den Zustand eines Pro­duktes zu einem bestimmten Zeit­punkt.

Das Wiki ist das zen­trale Ver­zeich­nis für die Doku­men­tation.

Eine voll­­­stän­dige Pro­dukt­­doku­mentation muss als sol­che erkenn­bar sein. Autoren brau­chen prüf­bare Regeln für den Auf­bau und Inhalt im Wiki in einer klar kommuni­­zier­ten Struk­tur mit vor­definier­ten Bau­steinen. Jeder Bau­stein hat genau einen Zweck und bestimmte Ziel­gruppen. Autoren wissen, was in den Bau­stein gehört und was nicht. Diese Abgren­zung ist sehr wich­tig.

Die exakte Defini­tion der Bau­steine ist Autoren und Lesern gleicher­maßen bekannt. Bau­steine stellen Vor­gaben für Autoren dar, wie es sie auch in Form von Pro­gram­mier­­­richt­­­linien für Ent­wick­ler gibt. cards+ unter­­­stützt so Autoren bei dem Vor­haben, die Seiten im Wiki aktu­ell und fehler­frei zu hal­ten. Leser aus der Pro­jekt­­­organi­sation können durch die ein­­­heit­liche Gestal­tung der Bau­steine den Inhalt besser ein­ordnen. So können sie ziel­­­gerich­tet Feed­back geben.

Das »missing link« der Doku­menta­tion

In der System­beschrei­bung zeigt sich der Problem­raum des Pro­duktes. Dieser Teil der Doku­mentation ist das Abbild der Reali­tät, die Wirk­lich­keit aus Sicht der Nutzer des IT-Systems. Je mehr ein Team über die Welt weiß, in dem die Soft­ware einge­setzt wird, desto besser wird die Lösung.

Die tat­säch­lich reali­sierte Soft­ware beschrei­bt der Pro­dukt­verant­wort­liche in Abstim­mung mit dem Team und unter­stützt durch Ver­tre­ter des Teams mit den Bau­steinen der System­struk­tur und des Archi­tektur­entw­urfs. Bei agiler Ent­wick­lung schrei­tet die Pro­dukt­doku­men­tation im Gleich­schritt mit dem Pro­dukt voran. Das Ende einer Itera­tion ist der Zeit­punkt, an dem Pro­dukt­doku­men­tation, Code und Test­pläne eine Ein­heit bilden: Das Pro­dukt­inkre­ment.

Das «missing link» der Pro­dukt­doku­men­tation ist der Bau­stein Case. Er bildet den Über­gang der System­beschrei­bung in die System­struk­tur und umge­kehrt.

  • Ein Pro­dukt­ver­antwort­licher kann aus seiner fach­lichen Sicht ablei­ten, welche Dienste (Bau­stein Service) und Objekte (Bau­steine Event bzw. Entity) an der Lösung einer Fähig­keit der Soft­ware (Bau­stein Case) betei­ligt sind.
  • Ein Tester kann ein­schätzen, welche Fähig­keit der Soft­ware (Bau­stein Case) sich auf einen Dienst (Bau­stein Service) aus­wirkt, für die er Test­fälle schreibt.
  • Ein Ent­wick­ler kann den fach­lichen Kon­text (Bau­steine Topic, Epic und Case) eines Dienstes (Bau­stein Service) für sein Ver­ständ­nis heraus­finden.

Der Baustein Case hat den Abschnitt Aus­gangs­lage, in dem der Pro­dukt­ver­antwort­liche eine ein­zelne, nicht weiter teil­bare Fähig­keit der Soft­ware beschreibt. Nach Abschluss der Reali­sierung einer Fähig­keit ergän­zen er oder ein Ver­tre­ter des Teams die gewählte Lösung in Form von Essenz­schrit­ten. Diese kom­pakte Liste beschreibt die Lösung als eine Art «Pfad» durch die Soft­ware, eine Art «Navi­gation» durch die Kompo­nenten und Daten­flüsse des IT-Systems.

Was zählt zur Leistungs­­beschrei­bung eines Pro­duk­tes?

Der Bau­stein Topic gibt den Um­fang (engl. scope) des Pro­duk­tes vor. Hier wird Be­zug auf die Unter­neh­mens­pro­zes­se ge­nom­men.

Der Bau­stein Epic grup­piert ver­wandte Fähig­kei­ten zu Funk­tio­nali­tä­ten. Hier be­fin­den sich auch Aus­schlüs­se und Ab­gren­zun­gen.

Der Bau­stein Case be­schrei­bt eine ein­zelne ge­for­der­te Fähig­keit der Soft­ware und nach dem Ab­schluss der Reali­sie­rung mit den Es­senz­schrit­ten die Lö­sung.

Mit dem Bau­stein Decision werden vom Auf­trag­ge­ber ge­for­derte Quali­täts­merk­male der Soft­ware mit Be­grün­dung fest­ge­hal­ten.

Der Bau­stein Layout wird für die Siche­rung der Ent­würfe ei­ner Be­dien­ober­flä­che ver­wen­det, die mit dem Auf­trag­ge­ber ab­ge­stimmt wur­den.

Den Bau­stein Service dient der Fest­le­gung von Schnitt­stel­len des IT-Sys­tems nach au­ßen. Er be­schreibt das API und die End­pun­kte auf bei­den Sei­ten.