Session D-DOCProgrammdokumentation -
|
Gesetz von der Unabhängigkeit gedruckter Dokumentation von den Sourcen
(mit A = zeitlicher/räumlicher/logischer Abstand zwischen Sourcen und Dokumentation) |
Diese überschlägige Formel liefert, relativ unabhängig von der Größe des eingesetzten Korrekturfaktors K, ein für den Nutzer der Dokumentation fast immer frustrierendes Ergebnis.
Ausgehend von der Einsicht, daß der Versuch, eine vorhandene Dokumentation aktuell zu erhalten immer von der ausreichenden Verfügbarkeit der hierfür verfügbaren Ressourcen abhängig ist, bietet sich eigentlich nur der Ausweg an, zeitnah eine neue Dokumentation direkt aus den Sourcen zu erstellen und das weitgehend automatisiert.
Der Aufwand, der für den Zugriff auf die Sourcen und die notwendige Aufbereitung und spätere Ausgabe notwendig ist, hängt sehr stark davon ab, in welcher Form die Sourcen vorliegen und wie einfach der Zugriff darauf ist. Hier sind die Visual Foxpro-Entwickler einmal mehr auf der Sonnenseite der Entwicklergemeinde, da VFP fast alle Programmsourcen in normalen DBF-Dateien ablegt. Mit bordeigenen Mitteln lassen sich daraus bereits mit recht wenig Aufwand sehr ansehnliche Ausdrucke erzeugen. Die so erhältlichen Informationen beschränken sich jedoch im wesentlichen auf Strukturinformationen, wie z.B. Namen von Klassen, Methoden und Properties inclusive der zugehörigen Kommentare, Klassenhierarchien und deren Verteilung auf Klassenbibliotheken usw.
Will man weitergehende Infos zugänglich machen, so muß man ein klein wenig mehr tun...
Eine Dokumentation sollte wenn möglich weitere Informationen enthalten, wie z.B.:
Um diese Informationen für ein Dokumentationstool leicht zugänglich zu machen, reichen einige wenige Konventionen zum Thema "wie und wo sollen Doku-relevante Infos abgelegt werden". Wie im bereits aufgeführten Gesetz beschrieben hat der zeitliche/räumliche/logische Abstand zwischen Dokumentation und Sourcen zumeist erheblichen Einfluß auf die Qualität derselben. Dies liegt u.a. daran, daß eine externe, von den Sourcen getrennt gehaltene Dokumentation zusätzlichen Aufwand sowohl für die Bearbeitung (i.d.R. nicht das Entwicklungstool) als auch für die Erhaltung/Verwaltung der Versionsgleichheit bedeutet. Es liegt daher nahe, die entsprechenden Infos direkt im Sourcecode abzulegen. Die Vorteile hiervon sind recht einleuchtend:
Dem Entwickler kann man dann noch kleine Hilfen für das einfache Anlegen Doku-relevanter Einträge in den Sourcen bieten, wie Funktionen, die direkt entsprechende Code Blöcke einfügen. Ein Beispiel hierfür ist eine Wer/Wann-Markierung wie "*! 11.11.98 Joachim:", die sich dehr einfach per Hotkey einfügen läßt:
Unter den innerhalb der Sourcen "versteckten" Dokumentationstexte können diverse Arten unterschieden werden:
Alle beschriebenen Doku-Arten können direkt dort abgelegt werden, wo sie auf etwas Hinweisen sollen, bzw. wo der Entwickler gerade seinen Code bearbeitet hat. Für einige Arten bietet es sich allerdings an, sie entweder ganz oder zusätzlich an anderen Stellen abzulegen.
Schnittstellenbeschreibungen sollten (auch) im Kommentar einer Methode auftauchen,
wie z.B. "liefert eindeutigen Wert für das Feld A000 *!P Betrachtet man ganze Klassen, so wird dies schon etwas schwieriger, da hier ja u.U. auch Strukturänderungen (neue/geänderte Properties und Methoden) nachvollzogen werden müssen. Hier bietet es sich an, seinen Klassen standarmäßig eine Methode mit dem Namen _Dokumentation() zu spendieren. In diese Methode kann, beliebig viel Text abgelegt werden:
Durch die #IF .F. - #ENDIF Konstruktion wird verhindert, daß der Compiler versucht, den dazwischen stehenden Text zu kompilieren.
Mit dem auf der Begleit-CD befindlichen (ziemlich alten) Klassenbibliothek METHVIEW.VCX hat man sehr schnellen Zugriff auf diese Methode, wodurch die "natürlichen" Hemmungen der Entwickler, hier zusätzlich zu dokumentieren, etwas abgebaut werden können.
Wenn die in den Sourcen abgelegten Kommentare in eine externe Dokumentation übernommen werden sollen, dann müssen sie entweder an bestimmten Stellen abgelegt oder mittels geeigneter Markierungen auffindbar gemacht werden. Die Methode _Dokumentation() ist ein Beispiel für ein festgelegtes "Wo", die folgende Liste von Kommentarmarkierungen ermöglicht ein Auffinden an beliebigen Stellen.
Markierungen beginnen alle mit "*!"
Kann automatisiert ausgelesen werden, um technische Dokumentation für Entwickler zu erstellen
Hilft Änderungen nachzuvollziehen, besonders, wenn plötzlich Fehler auftreten. Kann / sollte irgendwann später mal gelöscht werden, am besten, wenn die Änderung einige Zeit fehlerfrei gelaufen ist. Der Code bleibt in der Regel da stehen, wo er vorher war. Falls das zu unübersichtlich wird (langer Codeblock), an das Ende der aktuellen Datei verschieben. Anstelle <Alter Code> wird dann z. B.: "siehe:*!#01"]
oder
es muß noch etwas geändert/ergänzt/geklärt werden.
Auf dem Markt befinden sich eine Reihe unterschiedlichster Werkzeuge, die helfen können, bei der Dokumentation eigener Programme sehr viel Zeit zu sparen, oder "schöne" bzw. professionelle Dokumentationen ermöglichen.
Rational Rose Export Wizard - eine Konverter von/nach RR und Visual Modeler
(Download vom MS-Server für registrierte Visual Studio Bsitzer)
Die Tools sind z.T. auf der Begleit-CD enthalten, ansonsten findet sich dort ein Hinweis auf die Bezugsquelle.
Falls die Zeit reicht werden weitere Tools in der Session gezeigt.
#IF .f. && der folgende Text wird nicht eincompiliert
Wiederfinden
Markierungen im Header:
*!C <Comment: einzeiliger Kommentar / Beschreibung des Moduls>
*!DEV <zuständiger Entwickler> (optional)
*!> OPTIONAL: <aus diesem Modul aufgerufenes Modul (Methode/PROC/FUNC)>
*!< OPTIONAL: <in diesem Modul enthaltenes Modul /Methode/PROC/FUNC)>
*!T <Laufnummer> : <zu übergebender Parameter> <Beschreibung>
*!P <Property> <Beschreibung>
*!V <Variable> <Beschreibung>
*!K <Konstante> <Beschreibung>
*!B <ggfls. mehrzeilige Beschreibung>
Der Header endet mit (manchmal ziemlich sinnvolles Lineal): im restlichen Code:
*!D <Programmdokumentationstext>
*+ alt: <Erfolgt_Datum> <Entwickler> [<Alter Code>]:
*!! <Erfolgt_Datum> <Entwickler> <Was muß gemacht werden>
*<"normaler", nicht doku-relevanter Programm-Kommentar>
Werkzeuge