Dokumentierwerkzeuge
Eine Seminararbeit im Rahmen der
LVA „Programmierstil“
erstellt von
Severin Forstinger
Gliederung des Vortrags
Einleitung & Motivation
Praktische Beispiele
– JavaDoc
– CSC (C#-Tool)
– Doxygen
– Weiterführende Links
Zusammenfassung
Anmerkungen
Weiterführende Informationen
10.01.03
Severin Forstinger
2
Einleitung
Tools schon länger bekannt
– Firmenintern
– Speziallösungen (Preis!)
– Selbst „gestrickt“
Keine Normen vorhanden
Wurde bald als wichtig erkannt
10.01.03
Severin Forstinger
3
Motivation
Firmenseitig
– Neue Module haben konsistentes APILayout (vgl. Java)
– Anreiz zum Einsatz des Produkts
Programmiererseitig
– Muss nicht zwischen Programmier- &
Dokumentationswerkzeug wechseln
– „Dokumentation“ geht neben Codeentwurf
» verliert nicht den Faden
» vergisst kaum, etwas zu beschreiben
10.01.03
Severin Forstinger
4
Praktische Beispiele
Aus der Fülle an Tools drei ausgewählt
– Javadoc (da sehr bekannt und erprobt)
– CSC (C#, da eine Neuerung)
– Doxygen (als Vertreter von
produktfremden Werkzeugen)
Alleine Javadoc im Detail würde einen
Vortrag füllen
10.01.03
Severin Forstinger
5
Javadoc (1/10)
Anfangs bei Sun intern verwendet
Bald als Tool im JDK enthalten
Erzeugt HTML-Dateien
Möglich für:
– Source Code .java (class, interface, field,
constructor, method comments)
– Package comment files (package.html)
– Overview comment files
– Div. Files (als Refernenzziel)
10.01.03
Severin Forstinger
6
Javadoc (2/10)
Beginnt mit /** und endet mit */
Dazwischen HTML (jeder HTML-Tag ist
gültig) mit speziellen Javadoc-Tags
Muss vor einer class, field, constructor
oder method declaration stehen
2 Teile:
– Description (Beschreibung bis erstes @)
– Tag-list (Liste aller Standalone-Tags)
10.01.03
Severin Forstinger
7
Javadoc (3/10)
Tags
– Standalone: können nur in der Tag-list
verwendet werden
Notation: @tag
– Inline: können überall im Doc-Kommentar
eingesetzt werden
Notation: {@tag}
– Custom: können über die Kommandozeile
spezifiziert werden
10.01.03
Severin Forstinger
8
Javadoc (4/10)
/**
* @deprecated As of JDK 1.1, replaced by
{@link #setBounds(int,int,int,int)}
*/
Dabei ist
– @deprecated ein Standalone-Tag
– {@link #setBounds(int,int,int,int)} ein InlineTag
10.01.03
Severin Forstinger
9
Javadoc (5/10)
/**
* Ist eine Testmethode ohne tieferen Sinn.
* Der Methode wird ein String übergeben, der dann
* ausgegeben wird.
*
* @param str ein String, der ausgegeben werden soll
*/
public void writeText(String str) {
System.out.println(str);
}
10.01.03
Severin Forstinger
10
Javadoc (6/10)
Erste Zeile wird als Zusammenfassung
interpretiert
– Wird in den Index kopiert
– Wird in der summary-table eingetragen
Erste Zeile endet mit dem ersten „.“
– Problem: * this is Prof. Knuth‘s mix.
– Lösung: HTML Tag dahinter einfügen
* this is Prof.  Knuth‘s mix.
oder * this is Prof.<!-- --> Knuth‘s mix.
10.01.03
Severin Forstinger
11
Javadoc (7/10)
Die erzeugte Ausgabe schaut so aus:
Java-Ausgabe
Anmerkungen
– Seit Javadoc 1.4 ist das * am Beginn jeder
Zeile nicht mehr nötig.
– /** und */ sollten in einer eigenen Zeile
stehen
– Zwischen der Beschreibung und der TagListe soll eine Leerzeile eingefügt werden
10.01.03
Severin Forstinger
12
Javadoc (8/10)
Besonderheiten
– Es gibt pro Doc-Kommentar nur eine
Beschreibung die beim ersten @ endet.
Sie kann danach nicht mehr fortgesetzt
werden.
– Parameter werden nicht automatisch
dokumentiert, es ist für jeden ein @param
nötig.
– Mit einem Return-Wert ist es ebenso,
dieser wird mit @return festgelegt.
10.01.03
Severin Forstinger
13
Javadoc (9/10)
Package-level Kommentare
– Werden in einer Datei package.html
geschrieben (inline-tags können verwendet
werden)
– Diese Datei wird in das PackageVerzeichnis kopiert (zu den .java-Dateien)
– Javadoc sucht nach dieser Datei und
kopiert den Inhalt in den PackageDescription Abschnitt
– Erste Zeile kommt in die OverviewSummary
10.01.03
Severin Forstinger
14
Javadoc (10/10)
Liste aller Tags ist in meinem
Projektbericht, bzw. unter
http://java.sun.com/j2se/1.4/docs/tooldocs/solaris/javadoc.html#javadoctags
Aufruf über javadoc.exe (in jdk\bin)
– Hat eine Fülle von Parametern (56 Stück)
– Oft muss über ein Makefile gearbeitet
werden, da sonst die Eingabe zu lang wird
(z.B. DOS)
Ein „lustiges“ Beispiel sowie alle Parameter
findet man hier:
http://java.sun.com/j2se/1.4/docs/tooldocs/solaris/javadoc.html#realworldexample
10.01.03
Severin Forstinger
15
CSC (1/6)
Im C# Compiler integriert, daher nur für
C# verwendbar
Bildet XML-Dateien (Kategorie+Daten)
Alle XML-Tags gültig, aber nur wenige
haben spezielle Bedeutung
Erzeugt keine formatierte Ausgabe wie
Javadoc
10.01.03
Severin Forstinger
16
CSC (2/6)
Beginnt mit ///
– Dieser Kommentar ist nur einzeilig, daher
muss /// vor jeder Zeile wiederholt werden.
– Muss vor dem zugehörigen Objekt stehen.
– Jeder gültige XML-Tag wird verarbeitet.
Erste Zeile hat keine spezielle
Bedeutung
Generierter Output wird in ein XMLDokument gespeichert
10.01.03
Severin Forstinger
17
CSC (3/6)
/// text for class MyClass
public class MyClass {
/// <param name="Int1">Used to indicate
status.</param> public static void MyMethod(int Int1)
{}
/// text for Main
public static void Main () { }
}
10.01.03
Severin Forstinger
18
CSC (4/6)
<?xml version="1.0"?>
<doc>
<assembly>
<name>Project2</name>
</assembly>
<members>
<member name="T:MyClass">
text for class MyClass
</member>
<member name="M:MyClass.MyMethod(System.Int32)">
<param name="Int1">Used to indicate status.</param>
</member>
<member name="M:MyClass.Main">
text for Main
</member>
</members>
</doc>
10.01.03
Severin Forstinger
19
CSC (5/6)
Automatische Doc-Generierung
– Über Kommandozeile einstellbar (/doc:file)
– Über Compileroption (Build-Optionen)
Betrachtungsfähige Ausgabe:
– Über Befehl im Programm möglich
– Unter „Tools“, „Build Comment Web Page“
– Erzeugt mehrere HTM-Dateien, die die
Struktur des Projekts bzw. der Solution
generiert (ähnlich dem Aussehen von
Javadoc)
10.01.03
Severin Forstinger
20
CSC (6/6)
Liste aller besonderen XML-Tags findet
man in der VS .NET Hilfe, bzw. in
meinem Projektbericht
– Es gibt 18 Stück
– Manche werden vom Compiler überprüft
(z.B. <param> ob der angegebene
Parameter tatsächlich existiert)
Tags im Grunde nicht eingeschränkt, da
alle gültigen XML-Tags erlaubt sind
10.01.03
Severin Forstinger
21
Doxygen (1/5)
Ist von einem Programmierer entwickelt
worden, weil er spezielle Fähigkeiten
des Tools benötigte
– Unterstützt C, C++, C#, Java, PHP, IDL
– Mögliche Ausgabeformate sind HTML,
XML, RTF, Latex, PDF, PS, Unix-Manpage
– Für C++ kann man Vererbungsdiagramme
generieren (bei Mehrfachvererbung sehr
nützlich)
10.01.03
Severin Forstinger
22
Doxygen (2/5)
Wurde unter Linux entwickelt
Portiert für: Unix, Windows, Solaris
Doxygen ist sehr mächtig, aber dadurch
auch sehr kompliziert
– Knapp 70-100 Optionen die man bei der
Generierung angeben kann
– Sehr unübersichtliche Oberfläche (siehe
Screenshot im Projektbericht)
10.01.03
Severin Forstinger
23
Doxygen (3/5)
Mehrere Arten von
Kommentarbezeichnern
– Java
– C(#/++)
– Qt-Format Java
– Qt-Format C(#/++)
/** ... */
/// (in jeder Zeile)
/*! ... */
//! (in jeder Zeile)
Anders als in Javadoc muss vor jedem
Parameter ein @param-Tag stehen
10.01.03
Severin Forstinger
24
Doxygen (4/5)
Javadoc
/**
* A test discription.
* @param var1 a simple varibale
*
var2 another one
* @see…..
*/
Doxygen
/**
* A test discription.
* @param var1 a simple varibale
* @param var2 another one
* @see…..
*/
Tags entweder im Java-Stil (@tag)
Doxygen eigenes Format \tag
10.01.03
Severin Forstinger
25
Doxygen (5/5)
Hat eine Menge spezieller Tags (z.B.
Gruppierung – in Javadoc über Cmd)
Besonderheiten
– Kann Latexformeln generieren (wenn Latex
installiert ist)
– Über ein Plugin (Link auf der DoxygenHomepage) können auch umfangreicherer
Diagramme erstellt werden
Sehr komplex – Manual hat 120 Seiten!
10.01.03
Severin Forstinger
26
Zusammenfassung (1/2)
Javadoc
+ Für Java bestens geeignet
+ Langer Praxiseinsatz
- Umständlich auszuführen
CSC
+ Im Compiler integriert
+ Sehr flexibel
– Noch in den Kinderschuhen
– Zusatztool notwendig
10.01.03
Severin Forstinger
27
Zusammenfassung (2/2)
Doxygen
+ Für viele Produkte geeignet
+ Viele Zusatzfunktionen
± Sehr umfangreich
– Umständlich sich einzuarbeiten
Allgemein
– Alles in allem schon sehr viel Funktionalität
– Sehr nützlich und nötig
– Wird noch intensiver werden
10.01.03
Severin Forstinger
28
Anmerkungen
Tools schon sehr brauchbar
Eher eine Hilfe für den Programmierer
selbst
Generierte Version hat wenig mit einer
endgültigen Dokumentation zu tun, eher
nur ein Grundgerüst
10.01.03
Severin Forstinger
29
Weiterführende Infos
Einen guten Einstieg in die Thematik findet
man unter folgenden Links:
–
–
–
–
–
–
10.01.03
http://www.python.org/sigs/doc-sig/otherlangs.html
http://docpp.sourceforge.net/manual/index.html
http://www.python.org/
http://www.stack.nl/~dimitri/doxygen/index.html
http://www.swbs.com/
http://java.sun.com/j2se/javadoc/
Severin Forstinger
30