cards+
Qualität

cards+ ist Qualitätspolitik. Das wesentliche Ziel ist keine umfassende, sondern eine angemessene Produktdokumentation. cards+ übernimmt Werte aus der agilen Soft­ware-Ent­wick­lung und adaptiert Praktiken und Prinzipien der Entwickler. Es entsteht ein Rahmen, innerhalb dessen Menschen es schaffen, eine komplexe Dokumentation inkrementell zu pflegen.

cards+ ist Qualitätspolitik

Qualitätspolitik kennen wir aus dem Sprachgebrauch der Qualitätsmanagementnorm  ISO 9001. Die Erfüllung dieser Anforderungen soll dazu führen, dass es in einer Organisation geeignete Prozesse gibt, um qualitative Produkte herstellen zu können. Mit dem Begriff «Politik» tun sich viele schwer. Im Englischen spricht man von «policy», übersetzt also Strategie oder Leitlinie. Und so ist der Ansatz mit cards+ auch zu verstehen.

Agile Entwicklungsproszesse haben sich aus der Erkenntnis entwickelt, dass sich Anforderungen für ein IT-System nie so exakt spezifizieren lassen, dass kein Spielraum für Interpretationen bleibt. Die Welt dreht sich während der Realisierung weiter. Was heute eine gute Idee ist, kann morgen schon ein alter Hut sein.

cards+ hilft bei der Umsetzung der Werte und Prinzipien aus dem Manifest für agile Software-Entwicklung. Beim Thema Dokumentation ist natürlich der zweite Punkt im Manifest besonders interessant.

Wir schätzen funktionierende Software mehr als umfassende Dokumentation.

Manifest für agile Software-Entwicklung.

Mit «Wir» ist dabei die gesamte Pro­jekt­organi­sation gemeint.

Ein wichtiges Ziel beim Einsatz von cards+ ist keine umfassende, sondern eine angemessene Produktdokumentation. Autoren im Wiki dürfen bei der Beurteilung der Angemessenheit nie vergessen, dass Wissen vor allem im Produkt selbst steckt. Wissen wird in Software transformiert. Der größte Teil des Wissens befindet sich im Code und in den Testplänen, die den Code prüfen.

Eine Produktdokumentation muss Qualitätsmerkmale wie Vollständigkeit und Richtigkeit aufweisen. Die  ISO 9001 lehrt uns, dass Qualitätsmerkmale messbar sein müssen. Vollständigkeit wird messbar durch die Struktur im Wiki, mit Bausteinen, die einen festen Aufbau haben. Moderierte Kommentare geben Autoren ein Maß für die Richtigkeit der Bausteine.

cards+ schafft ein Rahmen, innerhalb dessen Menschen es schaffen, eine komplexe Dokumentation inkrementell zu erstellen. Sie werden in die Lage versetzt, produktiv und kreativ Fähigkeiten der Software in möglichst hoher Qualität zu beschreiben. Bausteine, Prinzipien und Praktiken der Methode machen Autoren ihre Arbeit im Wiki so einfach wie möglich. Trotzdem kann cards+ keine Fehler verhindern. Sie werden aber sichtbar.

cards+ schafft Ord­nung

Das Wiki ist das zen­trale Werk­zeug für den Pro­dukt­verant­wort­lichen. Dort gibt es eine ordent­liche Struk­tur, die er gut kennt, mit Bau­steinen, die er prü­fen kann. Jeder Bau­stein hat seine Ziel­gruppen. Bei jedem Bau­stein ist klar, welche Fähig­keiten ein Autor haben muss.

Das Glossar bringt Ord­nung in Begriffe. Es ist das Wörter­buch des Pro­duktes, ein Mini-Lexi­kon, zuge­schnit­ten auf das Pro­dukt. Die Begriffe sind das Voka­bular der gemein­samen Sprache. Seine konse­quente Nutzung bedeu­tet, dass Autoren Begriffe in den Tex­ten der Bau­steine mit Ein­trä­gen aus dem Glossar ver­knüpfen. Autoren können ihre Texte dadurch sehr kom­pakt gestal­ten, weil sie Begriffe nicht immer wieder erklä­ren müssen.

Die Medien­­biblio­thek schafft Ord­nung in Bil­der. Sie bil­det einen Kata­log für die Wie­der­­ver­wen­dung von Abbil­dungen und Dia­grammen. Es ent­steht eine gemein­same Bild­sprache. Ver­ände­rungen an einem Bild werden sofort an allen Stellen sicht­bar, es gibt keine zwei Ver­sionen eines Bil­des.

Die zentrale Ver­waltung von exter­nen Links in einer Link­samm­lung folgt der Idee der Medien­biblio­thek. Sie bil­det einen Kata­log für doku­men­tierte Infor­matio­nen außer­halb des Wiki.

Für andere Doku­menten­arten ist das Wiki ein zen­trales Ver­zeich­nis. Spezifi­kationen der Ent­wick­ler werden im Wiki zum Lesen ver­öffentl­icht. Durch das Prin­zip COD gibt es Brücken zu den Arte­fakten der Ent­wick­ler, Tester und Nutzer der Soft­ware. Mit dem Wiki gibt es einen “Ort”, an dem alle doku­men­tier­ten Infor­mationen zen­tral für alle Leser erreich­bar sind.

Leitlinien von cards+

Die Leitlinien sind der Versuch, die Methode cards+ auf vier Begriffe zu reduzieren. Es sind Qualitätsziele, die zum Entwurf der Struktur und der Bausteine geführt haben.

Prüfbar­keit

Alle interessierten Parteien sind motiviert, jede dokumentierte Information im Wiki zu prüfen und kontinuierlich zu verbessern. Sie orientieren sich an der festen Struktur. Sie prüfen den Aufbau und Inhalt der Bausteine anhand abgestimmter und an alle Leser kommunizierter Regeln.

Vollständig­keit

Eine vollständige Produktdokumentation stellt ein Produkt in allen Facetten dar. Sie enthält eine fachliche und technische Sicht auf das IT-System, ohne sie aber strikt zu trennen. Im Gegenteil. Die Verknüpfung der Bausteine der Systembeschreibung und -struktur ist eine Stärke dieses Ansatzes.

Nachhaltig­keit

Nachhaltigkeit steht für das Bestreben, Wissen über ein Produkt permanent zu sammeln und qualitätsgesichert für alle Ziel­gruppen verfügbar zu machen. Es geht um das Versprechen des Produktverantowrtlichen, jede Änderung am Produkt in der Produktdokumentation zu veröffentlichen.

Ganzheit­lichkeit

Eine ganzheitliche Produktdokumentation beschränkt sich nicht auf das Wiki. Nicht nur die Bausteine für Systembeschreibung, Systemstruktur und Architekturentwurf im Wiki zählen, sondern auch Spezifi­kationen oder Konfi­gurationen im Code-Repository oder Testpläne einer Testpyramide.

Gemein­same Sprache

Jede Soft­ware hat das Ziel, Prob­leme inner­halb einer Domäne für ihre Nutzer zu lösen. Im Domain-Driven Design geht es nicht nur um die tech­nische Umsetzung, sondern auch um eine bestimmte Denk­weise beim Ent­wurf eines IT-Systems. Der Ansatz stellt die Model­lierung der Fach­lich­keit und die Schaf­fung einer domänen­spezi­fischen Sprache in den Vorder­grund. Die gemein­same Sprache von Domä­nen­exper­ten und Ent­wick­lern ist ein wich­tiges Ziel von cards+ und dem Domain-Driven Design.

Das Glossar enthält u.a. eine Samm­lung von Fach­begriffen aus dem Geschäfts­feld im Unter­neh­men, in dem das IT-System zum Ein­satz kommt. Es enthält Begriffe, die sehr häu­fig ver­wendet werden oder den Domänen­exper­ten beson­ders wich­tig sind. Es ist ein pro­dukt­spezi­fisches Wör­ter­buch, ein Mini-Lexi­kon, zuge­schnit­ten auf das Pro­dukt. Darum ist es ein sehr wert­voller Teil der Pro­dukt­doku­men­tation über den gesamten Lebens­zyklus der Soft­ware. Ein Ein­trag im Glossar ist in der natür­lichen Sprache der inter­essierten Par­teien (z.B. Nutzer) geschrie­ben. Er enthält Erklärun­gen zum Begriff in der pri­mären Sprache des Ent­wicklungs­projektes. In einem inter­natio­nalen Pro­jekt nutzen Autoren das Glossar auch für die Über­setzung von Begriffen in andere Sprachen.

Wichtig ist, dass Autoren konse­quent Quer­ver­weise als Ver­knüpfung zu Ein­trägen im Glossar ver­wenden. Auf diese Weise ver­schafft der Autor dem Leser einen sehr schnellen Zugriff auf weiter­führende Infor­mationen. Der Autor muss wich­tige Begriffe nicht mehr im Text erläu­tern. Die Texte im Wiki werden sehr kom­pakt. Der Autor ver­meidet mehr­fache Beschrei­bungen eines Begriffes im Text. Damit redu­ziert er auto­matisch die Gefahr wider­sprüch­licher Beschrei­bungen.

Die Bau­steine der System­struktur bilden eine wich­tige Grund­lage für die gemein­same Sprache. Dienste und Objekte bekommen im Wiki durch den Seiten­titel einen ein­deuti­gen Namen. Der Name im Seitentitel schlägt eine Brücke zum Code und zu den Test­plänen. Voraus­setzung dafür ist, dass Ent­wick­ler konse­quent die Namen in der Imple­mentierung ver­wenden, wie fol­gende Bei­spiele zeigen:

  • Der Bau­stein Domain repräsen­tiert ein Git-Repository.
  • Der Bau­stein Service beschreibt eine Spring-Boot-Anwen­dung.
  • Der Bau­stein Entity wird durch ein POJO reali­siert.
  • Der Bau­stein Event wird durch ein Avro-Schema spezifi­ziert.
  • Der Bau­stein Case gruppiert Test­fälle eines Fähigkeit des IT-Systems.
  • Der Bau­stein Layout repräsen­tiert ein Ansicht in der Anwendung.

Autoren brauchen nur den Namen eines Diens­tes oder ein Objek­tes des IT-Systems, um sowohl die Beschrei­bung im Wiki als auch die Imple­men­tie­rung im Code-Reposi­tory zu fin­den. Dieses Praxis stärkt die gemein­same Sprache, weil Domä­nen­exper­ten auch Begriffe der Ent­wickler kennen — und umge­kehrt.

Korrekte Sprache

Eine immer wiederkehrende spannende Frage ist, ob Entwickler im Code die Begriffe der Anwendungsdomäne ins Englische (ihrer lingua franca) übersetzen sollen — oder eben nicht.

Eine gute Übersetzung erfordert ein gewisses Maß an Kenntnissen der Fremdsprache. In den folgenden Beispielen wird deutlich, dass selbst dann eine Übersetzung nicht immer eindeutig ist. Für die Übersetzung des deutschen Wortes «Zugfahrt» gibt es zwei Möglichkeiten. Die erste, «train ride», ist die Zugfahrt eines Reisenden. Die zweite, «train run», ist die betriebliche Sicht auf eine Zugfahrt. Das Englische kennt keine Unterscheidung zwischen dem Halt (d.h. der Tatsache, dass ein Fahrzeug an einem Ort geplant stehenbleibt) und der Haltestelle (d.h. einem Ort, an dem solche Halte stattfinden können). Beides heißt «stop». Es gibt sogar Begriffe im Deutschen, für die es keine Übersetzung gibt. «Verkehrstageschlüssel» kann nicht übersetzt werden. Diese numerische Kodierung kennt außerhalb Deutschlands kaum jemand.

Entscheidet sich der Produktverantwortliche und das Team gegen eine pauschale Übersetzung, dann kann das Glossar als Sperrliste für nicht übersetzbare Begriffe verwendet werden. Die Regel ist einfach: Kein Begriff aus dem Glossar wird im Code übersetzt. Die Folge dieser Entscheidung ist natürlich Code in einem Sprachenmix aus deutschen Begriffen ohne Plural mit englischen Verben (z.B. find) und Stereotypen (z.B. Repository).

Sehr vorteilhaft in diesem Zusammenhang ist die Vermeidung der Pluralbildung. Ein praktische Lösung basiert auf der Verwendung des Präfix all in allen Fällen, wo Entwickler im Code einen Bezeichner für eine Menge brauchen.

Ein weiterer Vorteil dieser Praxis entsteht bei Worten, deren Plural sich nicht vom Singular unterscheidet (z.B. das englische Wort «information» oder das deutsche Wort «Wasser») oder bei denen der Plural eine andere Bedeutung hat (z.B. die deutschen Worte «Geld» bzw. «Gelder»). Dieser Vorteil ist sogar unabhängig von der Sprache im Code.

Es gibt aber Entwickler, die sich Code nur in Englisch vorstellen können. Sie finden deutsche Klassennamen unzumutbar, grausam, inkorrekt. Andere Entwickler schätzen jedoch die Sicherheit bei der Verwendung der Begriffe in ihrer Muttersprache, eingebettet in Code. Das ist lesbarer Code, den sie ohne Nachdenken oder Wörterbuch sofort verstehen.

Dieser Konflikt kann nur im Team geklärt werden. Ein Produktverantwortlicher muss sich jedoch immer klar machen, dass eine Übersetzung der Begriffe einer nicht englischen Domänensprache in englische Begriffe im Code entgegen dem Wunsch einer gemeinsamen Sprache von Domänenexprten und Entwickler ist.

Qualität braucht Kompetenz und Disziplin.

Quali­tät ist Kopf­sache

Eine Pro­dukt­doku­men­tation wird gebraucht, solange das Pro­dukt einge­setzt wird. Ist ein Pro­dukt erfolg­reich, dann sind das mög­licher­weise Jahr­zehnte. In langen Zeit­räumen ändert sich alles. Die Pro­jekt­organi­sation. Die Auf­trag­geber. Die Nutzer. Je reifer ein Pro­dukt ist, desto wich­tiger wird eine ein­fach zu pfle­gende, voll­stän­dige und vor allem rich­tige Pro­dukt­doku­men­tation.

Pro­dukt­wissen wächst oder ändert sich laufend in einem agilen Umfeld. Es geht um die Frage der Quali­tät von Doku­menten, die schon länger exis­tieren. Sie sind von vielen kleinen Änderungen betrof­fen. Pro­dukt­doku­men­tation und Pro­dukt dürfen sich aber nicht wider­sprechen. Können Autoren das nicht sicher­stellen, dann ver­dirbt ein Teil der Doku­mente. Das Schlimme an «ver­dor­benen» Doku­menten ist, dass Leser die «faulen Stellen» selten sofort erken­nen. Ver­dor­bene Doku­mente füh­ren ein Team, das an der Ent­wicklung des Pro­duktes arbei­tet, in die Irre. In der Regel gibt es kein Werk­zeug, mit dem Autoren die Quali­tät von Doku­menten bewer­ten können, so wie Ent­wick­ler bei­spiels­weise mit Sonar­Qube die Quali­tät von Soft­ware in mehreren Dimen­sionen messen und bewerten können. In einem Wiki gibt es jedoch einfache Möglichkeiten, die hier Abhilfe schaffen.

  • Moderier­te Kommen­tare sind eine ein­fache Metrik für eine Seite im Wiki. Jede Seite ohne Kommen­tare ist daher eine «gute» Seite.
  • Seiten­vor­lagen als Proto­typ für eine Seite im Wiki sorgt für einen ein­heit­lichen, formal prüf­baren Inhalt. Jede gemäß Seiten­vor­lage des Bau­steins voll­ständige Seite ohne Kommen­tare ist daher eine «gute» Seite.

Am Ende ist Quali­tät immer das Ergeb­nis der gemein­samen Anstren­gun­gen aller Autoren und Leser. Es ist Kopf­sache.

Quali­tät durch Beschrän­kung

Jede Per­son in der IT-Branche hat seine eigene Vor­stel­lung von guter Doku­men­tation. Diese Vor­stellung ist ganz maß­geblich von persön­lichen Schwer­punkten oder seiner Rolle bestimmt. Auch bei der Wahl des »richtigen« Werk­zeugs zum Schrei­ben der Doku­mentation gibt es unter­schied­liche Vor­lieben.

  • Ein Pro­dukt­verant­wort­licher nutzt Office-Pro­dukte oder ein Wiki (z.B. Confluence).
  • Ent­wick­ler nutzen gerne Markup-Dateien, weil die sich wie Code ver­halten.
  • Tester denken in Tabellen oder Listen und nutzen Office-Pro­dukte (z.B. Excel) oder spezielle Werk­zeuge (z.B. Fitnesse).
  • Administra­toren schätzen Betriebs­anwei­sungen und Hand­bücher online in einer Wissens­daten­bank.

«Viele Köche verderben den Brei» ist ein Sprich­wort, das wahr wird, wenn jede an der Pro­dukt­ent­wick­lung beteiligte Per­son «seinen» Teil der Pro­dukt­doku­mentation so schreibt, wie sie nach persön­lichen Gesichts­punk­ten für rich­tig hält. Der Eins­atz von cards+ und die Ein­führung eines Wiki als zen­tralen Ort für die Pro­dukt­doku­men­tation ändert die Situa­tion. Der Pro­dukt­verant­wort­liche und das Team arbei­ten mit Werk­zeugen, die opti­mal auf­einander abge­stimmt sind. Eine Grund­regel bei cards+ lautet daher:

Ein Autor erfasst nur jene In­halte, für die er eine passen­de Seitenvorlage im Wiki findet.

Ent­wick­ler schrei­ben Spezifi­kationen für Dienste und Objekte mit den gleichen Werk­zeugen, mit den sie auch pro­gram­mie­ren. Tester erarbei­ten ihre Test­pläne in ihrem gewohn­ten Werk­zeugen. Die Spezifi­kationen und Test­pläne werden nach ihrer Frei­gabe für das Pro­dukt­inkre­ment vom Team zum Lesen im Wiki ver­öffent­licht. Es liegt in der Verant­wortung des Teams, ein geeig­netes Format zu wählen, das im Wiki direkt nutz­bar ist oder leicht für die Ver­wendung im Wiki konver­tiert werden kann.

Quali­tät ent­steht durch Beschrän­kung der Viel­falt durch klare Regeln. Regeln, auf deren Ein­hal­tung der Gärtner ach­tet.

Quali­tät durch Simpli­zität

Das Prin­zip PLA ist eine gol­dene Regel in der Soft­ware-Ergo­nomie, Mensch-Com­puter-Inter­aktion und dem UX-Design. Das Prin­zip lässt sich gut auf Doku­men­tation über­tragen. Jeder Leser wünscht sich Infor­mationen so aufbe­reitet, dass er sie gut auf­nehmen kann. Im Wiki findet er eine Doku­menta­tion mit einer nach­voll­zieh­baren Struk­tur. In den Bau­stei­nen der Pro­dukt­doku­men­tation findet er genau die Infor­matio­nen, die er dort erwar­tet. Er kann gezielt den Ver­knüpfun­gen zwischen den Bau­steinen fol­gen oder ein­fach suchen. Er kann jeder­zeit Feed­back als Kommen­tar in der Seite abge­ben.

Ein ein­fach zu bedienen­des Wiki bringt mehr Quali­tät durch Zusam­men­arbeit. Nur ein Wiki mit ein­facher Struk­tur und ver­ständ­lichen Inhal­ten erreicht auf Dauer alle Leser.

Welche Quali­täts­­merk­male hat ein Baustein?
Richtig­keit

Ein Bau­stein der Pro­dukt­doku­men­tation ist rich­tig, wenn er ei­nen Teil des Pro­dukt­wis­sens kor­rekt er­fasst. Das Glossar bil­det die Grund­lage für das Voka­bular. Ein Text mit Begrif­fen aus dem Glos­sar, vom Autor rich­tig ver­wen­det, ist da­her kor­rekt, wenn wir da­von aus­gehen, dass die Ein­träge Im Glos­sar kor­rekt sind. Le­ser kön­nen die Tex­te mit den Er­klä­run­gen im Glos­sar sehr leicht über­prü­fen. Sprach­liche Rich­tig­keit (Ortho­gra­phie, Gram­matik, Aus­druck) der Texte wird grund­sätz­lich vor­aus­ge­setzt.

Vollständig­keit

Ein Bau­stein der Pro­dukt­doku­men­tation ist voll­stän­dig, wenn der Autor die rich­tige Sei­ten­vor­lage ver­wen­det und alle Ab­schnit­te mit In­halt füllt. Tritt der Fall ein, dass ein Au­tor einen Ab­schnitt in ei­nem Bau­stein nicht sinn­voll aus­fül­len kann, dann wird ge­nau die­ser Um­stand mit einem Leer­ver­merk wie «Keine An­gabe» oder «Nicht zu­tref­fend» und ge­ge­be­nen­falls mit einer Be­grün­dung doku­men­tiert. Leer­ver­mer­ke ma­chen ei­nen Bau­stein voll­stän­dig, und in der Kon­se­quenz auf Voll­stän­dig­keit prüf­bar.

Übersicht­lichkeit

Eine klare, über­sicht­liche Dar­stel­lung der In­halte trägt wesent­lich zur Akzep­tanz der Pro­dukt­doku­men­tation bei den Le­sern bei. Der ein­heit­liche Auf­bau der Bau­stei­ne unter­stüt­zt Au­to­ren in die­sem Vor­ha­ben. Die Bau­stei­ne der Sy­stem­be­schrei­bung sind streng hierar­chisch auf­ge­baut und auf maxi­mal zwei Über­schrif­ten­ebe­nen be­schränkt. In den Bau­stei­nen der Sy­stem­struk­tur gibt es immer einen Steck­brief als Ein­stieg und den Ab­schnitt Spezi­fi­kation für Im­ple­men­tie­rungs­de­tails als Ab­schluss.

Verständ­lichkeit

Ein Bau­stein der Pro­dukt­doku­men­tation ist ver­ständ­lich, wenn er in der Sprache der Ziel­gruppen geschrie­ben ist. Der Text in einem Bau­stein muss nicht durch Wort­reich­tum glän­zen. In kurzen Sät­zen vermit­telt der Au­tor sein Pro­dukt­wis­sen. Die Ver­knüp­fung von Be­grif­fen im Text mit Ein­trä­gen im Glossar för­dert das Ver­ständ­nis für den Le­sern. Gleich­zeitig ist es eine Maß­nahme für den Au­tor, den Text kom­pakt zu hal­ten. Ein gut ge­pfleg­tes Glossar dient hier als Mini-Lexi­kon des Pro­duk­tes.

Feed­back durch Provo­kation

In der Soft­ware-Ent­wicklung arbei­ten Menschen sehr inten­siv zusam­men. Über kurz oder lang ent­stehen in jedem Team Kon­flikte. Provo­zierte Kon­flikte soll­ten aller­dings die Aus­nahme sein. Provo­kation ist sehr häufig nega­tiv belegt. Eine Provo­kation ist dann erfolg­reich, wenn der Provo­zierte zu einer Reak­tion genö­tigt wurde.

Wird ein Le­ser im Wiki durch den Autor mit dem Wissen anderer kon­fron­tiert, dann kann der Leser auf­grund seines eigenen Wissens Fehler oder Lücken identi­fizieren. Im Wiki gibt er Feed­back dazu. Ganz ent­spannt als Kommen­tar, aber trotz­dem für alle anderen sicht­bar. Die not­wen­digen Voraus­setzun­gen für so eine posi­tiv wir­kende Provo­kation sind schnell aufge­zählt:

  • Jeder kennt die Doku­mentation und ihre Stru­ktur.
  • Die Doku­mentation wird von allen ver­wendet.
  • Die Doku­mentation wird von allen ver­bessert.

Mit dem Ein­satz von cards+ erfül­len Autoren die Voraus­setzung für Punkt 1 der Liste. Die Bau­steine und die fixe Seiten­struk­tur stellen sicher, dass jeder weiß, wo wich­tige Infor­mationen zu fin­den sind. Mit Ver­knüpfungen in den Seiten führt der Autor seine Le­ser durch die Doku­mentation. Die Such­funk­tion erlaubt flexi­ble Recher­chen. Die konse­quente Nutzung von Schlagw­orten in den Seiten macht Zusammen­hänge mit einem Klick sicht­bar. Punkt 2 der Liste ist Teil der Kul­tur der Pro­jekt­organi­sation. Das Wiki ist ein akzep­tiertes Werk­zeug für Kommuni­kation im Team. Ganz wichtig ist, dass die Pro­dukt­doku­men­tation als Wahr­heit gilt. Eine klare Abgren­zung zur Pro­jekt­doku­mentation ist wichtig. Mit Punkt 3 der Liste ist der Pro­zess für konti­nuier­liche Ver­besserung gemeint.

Voll­ständig­keit ist keine Voraus­setzung, die wollen Autoren neben Korrekt­heit durch das provo­zierte Feed­back bei den Lesern erreichen. Die Idee von «collective code ownership», wie sie bei­spiels­weise Martin Fowler in seinem Bliki beschreibt, lässt sich leicht auf eine Pro­dukt­doku­men­tation erwei­tern. Jeder ist Autor und ver­öffent­licht sein Wissen im Wiki. Jeder ist Le­ser und profi­tiert vom Wissen Anderer.

Die Quali­tät der Inhalte ist das Ergeb­nis der Gemein­schaft, getrie­ben durch Feed­back. Keinen Le­ser lässt es kalt, wenn in «seiner» Pro­dukt­doku­men­tation ein offen­sicht­licher Fehler steckt.

Feed­back ein­fach so

Eine rich­tige Doku­mentation ist immer eine große Heraus­forderung. Autoren im Wiki stellen sich dieser Heraus­forderung als Gemein­schaft und nutzen das Feed­back aller Le­ser. Feed­back einfach so zu geben, ohne extra aufge­for­dert zu werden, muss darum Teil der Kul­tur in einer Projekt­organi­sation sein.

Richtig­keit ist ein Ergeb­nis konti­nuier­licher Verbes­serung, getrie­ben vom Feed­back aller Beteilig­ten, moti­viert durch den sehr gerne zitier­ten Grund­satz für Retro­spek­tiven, der soge­nann­ten obersten Direktive (engl. prime directive).

Unab­hängig davon was wir ent­decken werden, ver­stehen und glau­ben wir auf­richtig, dass in der gege­benen Situation, mit dem verfüg­baren Wissen und Ressourcen und unseren indivi­duellen Fähig­keiten, jeder sein bestes getan hat.

Norman L. Kerth

Mit ande­ren Wor­ten: Auch Autoren machen Fehler. Und das dürfen sie auch. Es muss aber ein natür­licher Reflex jedes Le­sers sein, einen Kommen­tar im Wiki zu hinter­lassen, wenn er einen Fehler ent­deckt. Jeder Ent­wick­ler kennt einen Teil des IT-Systems sehr gut. Hat er Kennt­nis von einer Fähig­keit in der Soft­ware, die im Wiki nicht zu finden ist, dann gibt er den Autoren mit seinem Kommen­tar einen wich­tigen Hin­weis. Ent­wick­ler ver­setzen mit ihrem Feed­back Autoren in die Lage, Lücken schnell schlie­ßen.

Konti­nuier­licher Verbes­serung ist Verbes­serung in kleinen Schrit­ten. Die Initia­tive der  «clean code developer» formu­liert dieses stete Bemühen als Pfad­finder­regel.

Jede Beschäf­tigung mit einem Gegen­stand macht ihn zumin­dest ein klein wenig besser. Ganz ohne büro­kra­tische Pla­nung.

clean code developer

Diese im Grunde genom­men sehr ein­fache Regel ver­hindert, dass das Wiki an Akzep­tanz ver­liert, weil in den Seiten Lücken und kleine Fehler ent­halten sind. Wir kennen das Phäno­men auch als Theorie der zer­brochenen Fenster.

Wird eine zer­brochene Fenster­scheibe nicht schnell repa­riert, sind im Haus bald alle Scheiben zer­brochen.

James Q. Wilson und George L. Kelling

Nach ihr beginnt der Verfall von Quali­tät im allge­meinen Sinn mit Kleinig­keiten, die nur lange genug unbe­achtet blei­ben. Darum ist es essen­tiell, dass jeder Le­ser weiß, dass seine Mit­arbeit wich­tig ist. Autoren sind aufge­fordert, wert­schätzend mit diesem so wert­vollen Feed­back umzu­gehen.

Feed­back für den Pro­dukt­­verant­­wort­­lichen

Soft­ware-Ent­wick­lung ist ganz abstrakt formu­liert die Trans­for­mation von Wissen in Code. Die Bau­steine Topic, Epic und die Ausgangs­lage im Bau­stein Case kann der Pro­dukt­verant­wort­liche bereits im Back­log-Manage­ment nut­zen, um Wissen nach­hal­tig zu erfassen. Ein Team braucht sehr detail­rei­ches Wissen, um eine gefor­derte Fähig­keit der Soft­ware kor­rekt und voll­stän­dig zu ver­ste­hen. Dieser Bedarf geht darü­ber hinaus, was nach dem Prin­zip KISS sinn­voll in den Bau­steinen erfasst werden kann. Der Pro­dukt­verant­wort­liche nutzt darum eine Story, um diese Wissens­lücke am Beginn der Itera­tion zu schlie­ßen.

Eine Story im Back­log ist — ganz banal gespro­chen — das Ver­spre­chen, mit­einan­der zu reden.

Die Story verknüpft er mit dem Bau­stein Case. Mit dem Akzep­tanz­krite­rien in der Story formu­liert er seine Erwar­tung an die Lösung. Er beant­wor­tet die Fra­gen der Ent­wick­ler. Gleich­zei­tig sind diese Fra­gen auch Hin­weise, wo ggfs. die Texte in den Bau­steinen ver­bessert werden soll­ten.

Im nächsten Schritt prüft das Team die Story hin­sicht­lich Voll­ständig­keit und schätzt die Kom­plexi­tät. In der Ana­lyse der Story (engl. refinement) redu­ziert das Team jede kom­plexe Auf­gabe in eine Reihe kompli­zier­ter, manch­mal sogar offen­sicht­licher Teil­auf­gaben. Eine offen­sicht­liche Teil­auf­gabe hat eine wieder­kehrende Lösung. Für eine kompli­zierte Teil­auf­gabe muss das Team wenigs­tens eine schätz­bare Lösungs­idee ent­wer­fen. Damit wird jede komp­lexe Auf­gabe beherrsch­bar.

Cynefin offers five decision-making contexts: simple, complicated, complex, chaotic, and disorder. The domains offer a sense of place from which to analyse behaviour and make decisions. Cynefin is a Welsh word for habitat.

David John Snowden

Jetzt liegt es am Team, für die gefor­derte Fähig­keit, wie sie im Bau­stein Case in der Aus­gangs­lage beschrie­ben wird, eine passende Lösung in der Soft­ware zu finden. Die Ergeb­nisse des agilen Ent­wick­lungs­pro­zesses kata­logi­sieren sie mit den Bau­steinen der System­struk­tur und aktuali­sie­ren die Spezifi­kationen in den Bau­steinen Service und Event bzw. Entity. Auf dem Weg der Lösungs­fin­dung für eine kom­plexe Auf­gabe treffen sie ggfs. noch tech­nische Ent­schei­dungen, die sie mit dem Bau­stein Decision begrün­den und erar­bei­ten Reali­sierungs­kon­zepte, die sie mit dem Bau­stein Concept beschrei­ben. Als Abschluss ergänzen sie die Essenz­schritte im Bau­stein Case mit Bezug auf die Bau­steine der System­struk­tur. Die Tester erwei­tern ihre Test­fälle in der Test­pyra­mide zum Nach­weis für die Erfül­lung der Akzep­tanz­krite­rien in der Story.

An diesem Punkt — in der Regel am Ende der Ite­ration — schließt sich der Kreis. Das Pro­dukt­inkre­ment ist fer­tig. Der Pro­dukt­verant­wort­liche kann nun selbst prüfen, ob seine Erwar­tun­gen, die er in der Story formu­liert hat, durch die Lösung vom Team erfüllt wur­den. Das bedeu­tet bezo­gen auf die Pro­dukt­doku­men­tation, dass in min­des­tens einem Bau­stein Service die im Wiki ver­öffent­lichte Spezifi­kation geän­dert wurde. Sie ent­hält nun die für die Reali­sierung der neuen Fähig­keit ergänz­ten oder geänder­ten Geschäfts­regeln oder Algo­rith­men. Haben sich Daten­struk­turen geändert, dann gibt es Änderungen in den Spezifi­kationen der Bau­steine Event bzw. Entity. Die ver­öffent­lichten Test­pläne ent­hal­ten zusätz­liche Test­fälle, passend zu den Akzep­tanz­krite­rien in der Story.

Der Pro­dukt­verant­wort­liche hat immer die Mög­lich­keit, die Ergeb­nisse aus dem agi­len Ent­wick­lungs­pro­zess direkt im Wiki nach­zule­sen. Die Entwickler müssen dafür nur sorg­fältig die klei­nen Korrek­turen an den Spezifi­kationen gleich­zeitig mit den Änderungen am Code machen. Sie tun das aber nicht für den Pro­dukt­verant­wort­lichen. Sie profi­tie­ren selbst davon. Das kann man ohne Ein­schrän­kung als Win-Win-Situa­tion bezeich­nen.

Die Ver­öffent­lichung im Wiki läßt sich auto­mati­sie­ren. Ihr Aus­löser ist die Frei­gabe des Pro­dukt­inkre­ments. Ein Bonus moder­ner Soft­ware-Ent­wick­lung.

Welche Kate­gorien von Quali­täts­­merk­malen gibt es?
Be­nutz­bar­­keit

Be­nutz­bar­keit (engl. usabi­lity) ist die Fähig­keit der Soft­ware, Stan­dards, Kon­ven­tio­nen, Stil­vorg­aben (engl. style guides) oder Vor­schrif­ten bezo­gen auf die Be­nutz­bar­keit ein­zu­hal­ten. Be­nutz­bar­keit ist eng ver­wandt mit dem Begriff Ge­brauchs­taug­lich­keit, der Eig­nung ei­nes Pro­duk­tes, die von Nutzern ange­streb­ten Ziele effek­tiv, effi­zient und zufrie­den­stel­lend zu errei­chen.

Effi­zienz

Effi­zienz (engl. effi­ciency) ist das Ver­hält­nis zwi­schen dem Leis­tungs­ni­veau der Soft­ware und dem Um­fang der ein­ge­setz­ten Be­triebs­mit­tel un­ter fest­geleg­ten Be­dingun­gen. Effi­zienz wird in der Praxis oft­mals ver­ein­facht als Leis­tungs­fähig­keit (engl. perfor­mance) be­zeich­net, mit den Aspek­ten Verar­bei­tungs­ge­schwin­dig­keit, Ant­wort­zeit, Durch­satz, Spei­cher­be­darf oder Men­gen­ge­rüs­te.

Funk­tio­­­nali­tät

Funk­tio­nali­tät (engl. functio­nality, func­tional suita­bility) ist das Vor­han­den­sein von Funk­tio­nen mit ange­forder­ten Ei­gen­schaf­ten. Fun­ktio­nale Soft­ware be­sitzt ei­nen ange­messe­nen Um­fang und ist ord­nungs­gemäß reali­siert. Da aber ein Soft­ware-Test nur die An­wesen­heit, aber nicht die voll­stän­dige Ab­wesen­heit von Feh­lern zei­gen kann, ist eine feh­ler­freie Soft­ware eher als nie er­reich­bares Ziel zu sehen.

Kompa­ti­­bili­tät

Kompa­tibili­tät (engl. com­pati­bility), auch Inter­opera­bili­tät, kenn­zeich­net die Fähig­keit der Soft­ware von min­des­tens zwei IT-Syste­men, Da­ten unter­ein­ander aus­zu­tau­schen, die­se Da­ten kor­rekt zu inter­pre­tie­ren und zu ver­ar­bei­ten. Bei Kompa­tibili­tät im Sin­ne von Ko­exis­tenz geht es vor allem da­rum, dass die Soft­ware nur jene Res­sour­cen ver­braucht, die ihr zuge­wiesen wer­den.

Porta­­bili­tät

Porta­bili­tät (engl. porta­bility) ist die Eig­nung der Soft­ware, von der Umge­bung in eine andere über­tra­gen wer­den zu kön­nen. Da­raus lei­tet sich der An­spruch ab, dass Soft­ware leicht in­stal­lier­bar und Kompo­nen­ten der Soft­ware leicht aus­tausch­bar sind. Porta­bili­tät ist eine Vor­aus­setzung für die Auto­ati­sierung der Instal­lation von Soft­ware.

Sicher­heit

Sicher­heit (engl. secu­rity) ist ein Sam­mel­begriff für alle Fähig­kei­ten einer Soft­ware, die not­wendig sind, um Da­ten und das IT-System so zu schüt­zen, dass beab­sich­tigte Zu­grif­fe erkannt und uner­laubte Zu­grif­fe abge­wehrt wer­den. Das bein­haltet den Nach­weis von manu­ellen Ein­grif­fen (engl. auditing).

Wart­bar­­keit

Wart­bar­keit (engl. main­taina­bility) ist ein Sam­mel­begriff für Ände­run­gen mit dem Ziel, Korrek­turen, Ver­besse­run­gen oder An­passun­gen an der Soft­ware für neue An­for­derun­gen oder geän­der­ten Quali­täts­merk­malen durchzu­füh­ren. Eine Soft­ware gilt als wart­bar bzw. gut änder­bar, wenn der Auf­wand für die Durch­füh­rung von Ände­rungen ge­ring ist.

Zuver­lässig­­keit

Zuver­lässig­keit (engl. relia­bility) ist die Fähig­keit der Soft­ware, ihr Leis­tungs­niveau unter fest­geleg­ten Be­dingun­gen über einen fest­geleg­ten Zeit­raum zu bewah­ren. Über Ver­füg­bar­keit er­folgt die Fest­legung, in­wie­weit eine An­wen­dung rund um die Uhr ver­füg­bar ist. Wei­tere Merk­male sind die Wieder­her­stell­bar­keit und die Fehler­tole­ranz eines IT-Systems.

Quali­täts­­merk­male

Für die Beur­teilung der Quali­tät von Soft­ware gibt es Quali­täts­merk­male. Die Quali­täts­manage­ment­norm  ISO 25010 macht Vor­schläge für die Kate­gori­sie­rung von Quali­täts­merk­malen. Eine voll­stän­dige und kor­rekte Pro­dukt­doku­men­tation ist bereits ein nicht zu unter­schätzen­des Quali­täts­merk­mal einer Soft­ware in Bezug auf die Kate­gorie Wart­bar­keit. Mit anderen Worten unter­stützt ein Wiki mit Bau­steinen der Methode cards+ die Erfüllung von Quali­täts­merk­malen der Kate­gorien Funktio­nali­tät und Wart­bar­keit.

Mit dem Bau­stein Decision begrün­det der Pro­dukt­verant­wort­liche oder Ver­tre­ter des Teams eine wichtige Ent­schei­dungen, die große Aus­wir­kung auf die Soft­ware hat oder den Lösungs­raum ein­schränkt. Jede Ent­schei­dung wird min­destens einem Quali­täts­merk­mal zuge­ordnet, mit einer Begrün­dung, die erklärt, warum sie für dieses Quali­täts­merk­mal rele­vant ist. In der Pro­dukt­doku­men­tation gibt es zu jedem Quali­täts­merk­mal mindes­tens eine Ent­scheidung oder ein Kon­zept mit einer Aus­sage, wie und in welchem Umfang das Quali­täts­merk­mal in der Soft­ware umge­setzt wurde.

Mit dem Bau­stein Concept doku­men­tieren Ent­wickler über­grei­fende oder wieder­holt einge­setzte Kon­zepte, die u.a. sicher­stellen, dass eine Soft­ware bestimmte Quali­täts­merk­male auf­weist.

Mit diesem Vor­gehen kehrt der Pro­dukt­verant­wort­liche die weit ver­breitete Praxis um, nicht funk­tionale Aspekte wie Fähig­keiten anzu­for­dern. Quali­täts­merk­male werden nicht ein­fach program­miert. Sie sind Eigen­schaf­ten einer Soft­ware, die durch die Wahl des Archi­tektur­stils, durch den Ein­satz bestimm­ter Infra­struk­tur oder Anwen­dung bestimm­ter Entwurfs­muster ent­stehen. Quali­täts­merk­male beein­flussen sich gegen­seitig. Häufig «zerren» sie von zwei Seiten, d.h. stärkt man ein Quali­täts­merk­mal, schwächt man ein anderes. In einem verteilten IT-System kann bei­spiels­weise die Opti­mierung des Zeit­ver­hal­tens bei der Daten­ver­arbeitung die Ana­lysier­bar­keit bein­trächti­gen. Das CAP-Theo­rem ist ein weiteres Bei­spiel für dieses Dilemma.

Das CAP-Theo­rem oder Brewers Theo­rem besagt, dass es in einem ver­teil­ten System unmög­lich ist, gleich­zeitig die drei Eigen­schaf­ten Konsis­tenz (engl. consistency), Verfüg­bar­keit (engl. availability) und Aus­fall­tole­ranz (engl. partition tolerance) zu garan­tieren.

Eric Brewer

Ein weiterer nicht zu unter­schätzen­der Vor­teil ist der Über­blick zu jedem einzel­nen Quali­täts­merk­mal, der sich aus der Verknüpfung der Bau­steine Decision und Concept mit dem Quali­täts­merk­mal ableiten läßt. Diese kom­pakte Zusammen­stellung von Ent­scheidungen und Kon­zepten zu einem Thema zeigt Abhängig­keiten, die sonst nicht so leicht erkenn­bar sind.

Quali­täts­­manage­ment

Steuerungs­maß­nahmen für den Ent­wicklungs­prozess, wie sie in der Quali­täts­manage­ment­norm  ISO 9001 von einer Organi­sation gefordert werden, sind nur mit genauer Kennt­nis der Ent­wick­lungs­erge­bnisse mög­lich. Der Ein­satz von cards+ und dem damit ver­bundenen Vor­haben, eine ange­messene und mit der ent­wickel­ten Soft­ware wachsende Pro­dukt­doku­men­tation zu erstel­len und zu pflegen, eröff­net eine Reihe von Mög­lich­keiten zur Veri­fizierung der Ent­wicklungs­ergeb­nisse. Eine wesent­liche Eigen­schaft von cards+ ist die fixe Struk­tur im Wiki, mit Bau­steinen, Prinzi­pien und Prak­tiken, die opti­mal auf­einander abge­stimmt sind.

Der Bau­stein Topic hilft, den Umfang (engl. scope) eines IT-Systems fest­zule­gen und klare Gren­zen für die Ent­wick­lung zu zie­hen. Alle Topics zusammen beschrei­ben den Pro­jekt­auf­trag, über­setzt in die Sprache des Pro­duk­tes.

Der Bau­stein Case wird ver­wendet, um eine Fähi­gkeit des IT-Systems zu beschrei­ben. Mit dem Bau­stein Epic werden eng ver­wandte Fähig­keiten zu einer kom­pletten Funktio­nali­tät zusam­men­gefasst. In der Sprache der Norm sind das die Ent­wicklungs­ein­gaben. Eine Soft­ware, die «fertig» ist, hat für jeden Case eine Lösung oder eine Begrün­dung, warum eine Lösung nicht mög­lich oder not­wendig ist. Auf dieser Grund­lage kann der Pro­dukt­verant­wort­liche sehr gut beur­teilen, ob alle Ent­wick­lungs­einga­ben bei der Reali­sierung vom Team berück­sich­tigt wurden.

Das Testen einer Soft­ware hat nicht die voll­stän­dige Prüfung aller Fähig­keiten zum Ziel. Das wird in der IT-Branche heut­zutage als unmög­liches Vor­haben einge­schätzt. Eine Metrik wie die Test­abdeckung durch Modul-, Schnitt­stellen- und System­tests ver­setzt den Pro­dukt­verant­wort­lichen in die Lage, Quali­täts­ziele für die Ent­wick­lung zu defi­nie­ren. Der Ein­satz von cards+ lässt ihn auch beim System­test eine Quali­täts­ziel defi­nieren. Jede Fähigkeit des Produktes mit einer Lösung, wie sie mit dem Baustein Case dokumentiert ist, muss durch mindes­tens einen Test­fall im System­test abge­sichert werden. So ist der Beweis erbracht, dass die Soft­ware min­destens alle in der Pro­dukt­doku­men­tation erfassten Fähig­keiten besitzt.