Dokumentation: Unterschied zwischen den Versionen

Aus Das Sopra Wiki
Jeremi (Diskussion | Beiträge)
Vogty (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
 
(42 dazwischenliegende Versionen von 7 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{UEA|Jeremi|Dieser Artikel wird gerade erstellt. Bitte haben Sie etwas Geduld. :) Achtung: Artikel ist noch als interna markiert!}}
{{Review}}
== Dokumentation ==
=== Warum kommentieren? ===
Kommentieren macht den Programmcode für andere verständlicher. Jeder Entwickler wird dankbar über hilfreiche Kommentare sein, die ein persönliches Nachfragen und somit viel Zeit ersparen. Selbst wenn man nur alleine an einem Projekt arbeitet, sollte man sich fragen, ob das auch für die Zukunft gilt.


== Warum kommentieren? ==
Beim Schreiben einer Bibliothek muss diese zwingend dokumentiert werden, da Benutzer der Bibliothek deren Quellcode meistens nicht lesen möchten. Auch in diesem Fall helfen Kommentare, da aus ihnen automatisiert eine Dokumentation erstellt werden kann.
...


Gutes Kommentieren kann außerdem das Design des Programms verbessern.<ref>http://dkrukovsky.blogspot.de/2005/07/how-to-write-comments.html Make The Software Shine - How to Write Comments</ref> Wenn man nach dem [[CleanCode#Single_Responsibility_Principle_.28SRP.29|Single Responsibility Principle (SRP)]] vorgeht, so kann man den Verantwortungsbereich jeder Klasse in einem Kommentar ausdrücken. Auf diese Weise kann man stetig kontrollieren, ob die Klasse in ihrem Verantwortungsbereich operiert und das Implementieren von Aufgaben vermeiden, die nicht zu dieser Klasse gehören.




== Kommentare in C# ==
=== Kommentare in C# und Doxygen ===
[[Visual Studio]] bietet verschiedene Möglichkeiten, Kommentare zu verfassen. Neben den ''Inline Kommentaren'', die nur für kurze Anmerkungen verwendet werden sollten, gibt es noch ''mehrzeilige Kommentare'' und ''XML Kommentare'', mit denen sich der Quellcode gut dokumentieren lässt.
{{CSharp}} und [[Visual Studio]] bieten verschiedene Möglichkeiten an, Kommentare zu verfassen. Neben den [[#Einzeilige Kommentare|''einzeiligen Kommentaren'']], die nur für kurze Anmerkungen verwendet werden sollten, gibt es noch [[#Mehrzeilige Kommentare|''mehrzeilige Kommentare'']] und [[#XML Kommentare|''XML Kommentare'']], mit denen sich der Quellcode gut dokumentieren lässt.


=== Einzeilige Kommentare (single line comment) ===
==== Einzeilige Kommentare ====
Einzeilige Kommentare beginnen mit zwei Slashes und enden automatisch am Ende der Zeile:
Einzeilige Kommentare beginnen mit zwei Slashes und enden automatisch am Ende der Zeile:


<source lang="csharp">
<source lang="csharp">
//Dies ist ein Inline Kommentar. Er endet automatisch am Ende der
//Dies ist ein einzeiliger Kommentar. Er endet automatisch am Ende der
//Zeile, so dass // in jeder Zeile wiederholt werden muss.
//Zeile, so dass // in jeder Zeile wiederholt werden muss.


int i = 0; // Inline Kommentare können auch in der Mitte einer Zeile beginnen
int i = 0; // Einzeilige Kommentare können auch in der Mitte einer Zeile beginnen
</source>
</source> [[Kategorie:Code-Beispiele]]


=== Abgegrenzte Kommentare (delimited comment) ===
==== Mehrzeilige Kommentare ====
Ein Stern nach einem Slash (<code>/*</code>) leitet einen Kommentarblock ein. Der Kommentar endet erst, wenn das das entsprechende Token zum beenden des abgegrenzten Kommentars gefunden wurde (<code>*/</code>).
Ein Stern nach einem Slash (<code>/*</code>) leitet einen Kommentarblock ein. Der Kommentar endet erst, wenn das das entsprechende Token zum beenden des abgegrenzten Kommentars gefunden wurde (<code>*/</code>).


<source lang="csharp">
<source lang="csharp">
/* Dies ist ein Mehrzeiliger
/* Dies ist ein mehrzeiliger
Kommentar. Ich brauche nicht  
Kommentar. Ich brauche nicht  
jede Zeile wieder neu als
jede Zeile wieder neu als
Kommentar markieren. */
Kommentar markieren. */
</source>
</source> [[Kategorie:Code-Beispiele]]


=== XML Kommentare ===
==== XML Kommentare ====
Mit XML Kommentaren können Klassen, Methoden, Eigenschaften, etc. zusätzliche Meta Informationen mitgegeben werden, um die Dokumentation des Codes zu erleichtern. Gibt man in Visual Studio vor einer bereits deklarierten Prozedur das dritte Slash ein, so werden anhand der Signatur der Funktion automatisch die notwendigen XML Tags erstellt.
Mit XML Kommentaren können Klassen, Methoden, Eigenschaften, etc. zusätzliche Meta-Informationen mitgegeben werden, um die Dokumentation des Codes zu erleichtern. Gibt man in Visual Studio vor einer bereits deklarierten Prozedur drei Slashes (<code>/</code>) ein, so werden anhand der Signatur der Funktion automatisch die notwendigen XML Tags erstellt.


<source lang="csharp">
<source lang="csharp">
Zeile 46: Zeile 49:
</source> [[Kategorie:Code-Beispiele]]
</source> [[Kategorie:Code-Beispiele]]


Mit XML Kommentaren lässt sich zum Beispiel auch angeben, ob und wann [[Exception]]s auftreten können oder es lassen sich Querverweise zu anderen Stellen im Code definieren. <ref>http://msdn.microsoft.com/en-us/library/5ast78ax.aspx Microsoft msdn - Recommended Tags for Documentation Comments (C# Programming Guide)</ref>
Mit XML Kommentaren lässt sich zum Beispiel auch angeben, ob und wann [[Exception]]s auftreten können oder es lassen sich Querverweise zu anderen Stellen im Code definieren. <ref>http://msdn.microsoft.com/en-us/library/5ast78ax.aspx Microsoft MSDN - Recommended Tags for Documentation Comments (C# Programming Guide)</ref>


Praktisch an XML Kommentaren ist, dass diese automatisch in einem Tooltip erscheinen, wenn die entsprechend dokumentierte Klasse, Funktion, etc. bei der Codeeingabe verwendet wird.
Praktisch an XML Kommentaren ist, dass diese automatisch in einem Tooltip erscheinen, wenn die entsprechend dokumentierte Klasse, Methode, etc. bei der Codeeingabe verwendet wird.


=== Task Listen Kommentare ===
==== Aufgabenliste-Kommentare ====
Visual Studio kann in Kommentaren nach bestimmten Token suchen und diese dann in der [[Task List]]e gesammelt anzeigen. So können zum Beispiel Codestellen markiert werden, die noch einer Bearbeitung bedürfen. Vordefinierte Token sind ''TODO'', ''HACK'' und ''UNDONE''. Ein Token muss immer direkt hinter den Zeichen stehen, die den Kommentar einleiten.
[[Visual Studio]] kann in Kommentaren nach bestimmten Token suchen und diese dann in der [[Aufgabenliste]] gesammelt anzeigen. So können zum Beispiel Codestellen markiert werden, die noch einer Bearbeitung bedürfen. Vordefinierte Token sind ''TODO'', ''HACK'' und ''UNDONE''. Ein Token muss immer direkt hinter den Zeichen stehen, die den Kommentar einleiten.


<source lang="csharp">
<source lang="csharp">
// TODO Diese Zeile erscheint in der Task Liste
// TODO Diese Zeile erscheint in der Aufgabenliste


/* HACK Auch dieser mehrzeilige Kommentar
/* HACK Auch dieser mehrzeilige Kommentar
erscheint in der Task Liste */
erscheint in der Aufgabenliste */
</source>
</source>


Es können auch eigene Token erstellt werden.<ref>http://msdn.microsoft.com/en-us/library/zce12xx2(VS.80).aspx Mircrosoft msdn Library - How to: Create Task List Comments</ref> [[Kategorie:Code-Beispiele]]
{{BA|Vogty|Tote Referenz auf Tokens und dazugehörigen Kommentar entfernt. <!--Es können auch eigene Token erstellt werden.<ref>http://msdn.microsoft.com/en-us/library/zce12xx2(VS.80).aspx Mircrosoft msdn Library - How to: Create Task List Comments</ref>-->}}
 
==== Doxygen Befehle ====
Wird ein Programm wie [http://www.doxygen.nl/ Doxygen] verwendet, um aus dem Source Code automatisiert eine Dokumentation zu generieren, so können in den Kommentaren noch zusätzlich [http://www.doxygen.nl/manual/commands.html Special Commands] verwendet werden. Mit ihnen lassen sich zum Beispiel der Text formatieren oder man kann bestimmte Meta-Informationen zum Code mitgeben.
[[Kategorie:Code-Beispiele]]
 
=== Wie kommentieren? ===
==== Innerhalb von Methoden ====


=== Doxygen Befehle ===
Nach den [[CleanCode|Clean Code Prinzip]] sollte ein Programm sich selbst beschreiben und mit möglichst wenigen Kommentaren auskommen:{{BA|Vogty|Tote Referenz entfernt. <!--<ref>http://www.clean-code-developer.de/Source-Code-Konventionen.ashx Clean Code Developer - Source Code Konventionen</ref>-->}}
Wird ein Programm wie [[Doxygen]] verwendet, um aus dem Source Code automatisiert eine Dokumentation zu generieren, so können in den Kommentaren noch zusätzlich ''Special Commands''<ref>http://www.stack.nl/~dimitri/doxygen/commands.html Doxygen Manual - Special Commands</ref> verwendet werden. Mit ihnen lassen sich zum Beispiel der Text formatieren oder man kann bestimmte Meta Informationen zum Code mitgeben.


== Wie und was kommentieren? ==
Statt:
...
<source lang="csharp">
int length = 210;  // Länge in mm
</source>
Besser:
<source lang="csharp">
int lengthInMm = 210;
</source>
Statt:
<source lang="csharp">
public Vector3D Position() {
    // Calculates new Position
}
</source>
Besser:
<source lang="csharp">
public Vector3D CalculateNewPosition() {
    ...
}
</source> [[Kategorie:Code-Beispiele]]


==== Klassen bzw. außerhalb von Methoden ====
Klassen, Methoden, Prozeduren, Funktionen, etc. sollten mit [[Dokumentation#XML_Kommentare|XML Kommentaren]]  versehen werden. Diese werden verwendet um die automatisierte Dokumentation zu bauen.
Außerdem werden XML Kommentare dazu verwendet, bei der Codeeingabe Hinweise in einer Tooltip Box anzuzeigen, so dass das arbeiten mit dokumentierten Funktionen deutlich leichter fällt. [[Kategorie:Code-Beispiele]]


{{BA|Jeremi|Hier auf Parameter der XML Kommentare eingehen? So kommt sicher die Frage, ob nun ein Parameter, der in der summary beschrieben wurde jetzt auch nochmal einzeln beschrieben werden muss -> ja!}}


== Wann kommentieren? ==
=== Wie man NICHT kommentieren sollte ===
Manchmal ist es einfach leichter zu sagen, wie man es eben nicht machen sollte<ref>http://allthingsoracle.com/how-to-make-comments-the-most-important-code-you-write/ How to make comments the most important 'code' you write</ref>:
 
==== Unterschätze die Zielgruppe nicht ====
Wer auch immer in den Code reinschauen wird, es wird sicherlich auch ein Entwickler (aus deinem Team?) sein. Solche Kommentare sind völlig unnötig und gehören raus:
 
<source lang="csharp">
ACHTUNG NEGATIVBEISPIEL!
 
//Initialisiere i mit 20
int i = 20;
</source>
 
==== Übertreibe es nicht ====
Wenn man aufgrund lauter Kommentare den Code selbst plötzlich suchen muss, dann wurde inzwischen bei weitem viel zu viel kommentiert. Innerhalb von Prozeduren sollten nur dann Kommentare verwendet werden, wenn es aus dem Code selbst nicht ersichtlich ist, was er tut (Clean Code Ansatz).
 
==== Trenne dich von altem Code ====
Lösche nicht mehr gebrauchten Code, anstatt ihn auszukommentieren. Ansonsten sammeln sich nach und nach im Quellcode immer mehr Codeleichen an, die völlig unnötig sind.
 
{{BA|Jeremi|Natürlich ist das nicht super streng gemeint. Beim Testen kann durchaus Code auskommentiert werden. Spätestens beim Commit ins Git sollte das aber raus}}
 
==== Du sollst nicht Fluchen ====
Selbst wenn dich gerade ein Stück Code in Rage versetzt, solltest du dich beim Schreiben eines Kommentars zurückhalten. Es ist gesünder für die Zusammenarbeit im Team und kann dich im Berufsleben im schlimmsten Fall den Job kosten. [[Kategorie:Code-Beispiele]]
 
 
=== Wann kommentieren? ===
Kommentieren ist schön und gut, aber wann genau soll nun kommentiert werden? Es gibt mehrere Ansätze, Kommentare zu verfassen, die auch von dem jeweiligen Programmierstil abhängen.  
Kommentieren ist schön und gut, aber wann genau soll nun kommentiert werden? Es gibt mehrere Ansätze, Kommentare zu verfassen, die auch von dem jeweiligen Programmierstil abhängen.  


Bei einem geplanten Vorgehen überlegt man sich im Voraus, was der Code genau leisten soll. Dann spezifiziert man die Parameter und die Rückgabe und verfasst noch vor dem Implementieren einen Kommentar der genau beschreibt, was der Code leisten wird. Vorteil dieses Ansatzes ist, dass auf diese Weise Funktionen und Klassen markiert werden können, die man (oder ein anderer Entwickler) erst später implementieren wird. Solche Codestellen sollten unbedingt mit einem ''Task List Comment'' markieren:
Bei einem geplanten Vorgehen überlegt man sich im Voraus, was der Code genau leisten soll. Dann spezifiziert man die Parameter und die Rückgabe und verfasst noch vor dem Implementieren einen Kommentar der beschreibt, was der Code leisten wird. Vorteil dieses Ansatzes ist, dass auf diese Weise Funktionen und Klassen markiert werden können, die man (oder ein anderer Entwickler) erst später implementieren wird. Solche Codestellen sollten unbedingt mit einem [[Dokumentation#Aufgabenliste-Kommentare|Aufgabenliste-Kommentar]] markiert werden.


<source lang="csharp">
Geht man etwas ungeplanter vor, so kann es passieren, dass man eine Funktion implementiert, diese aber kurze Zeit später erweitert, überarbeitet oder gar durch eine neue ersetzt. Jetzt jederzeit Kommentare zu schreiben, die man nur wenige Minuten später wieder wegschmeißt ist unnötiger Aufwand. Aus diesem Grund schiebt man das Kommentieren und somit das Dokumentieren der Funktion vor sich her. Dennoch sollte die finale Version der Funktion letztendlich kommentiert sein.
// TODO kurze Beschreibung, was genau hier noch zu tun ist
 
</source> [[Kategorie:Code-Beispiele]]
Ein guter Richtwert ist: ''Wenn man ins Git committet, dann sollte alles kommentiert sein!'' (Committen sollte man sowieso nur sauberen Code.)
 
<noinclude>== Referenzen ==
<references /></noinclude>


== Referenzen ==
[[Kategorie:Best Practice Programmierung]]
<references />
[[Kategorie:MS01]]
{{Interna}}
[[Kategorie:MS02]]
[[Kategorie:MS03]]
[[Kategorie:MS04]]
[[Kategorie:MS05]]

Aktuelle Version vom 12. Oktober 2020, 11:14 Uhr

Dokumentation

Warum kommentieren?

Kommentieren macht den Programmcode für andere verständlicher. Jeder Entwickler wird dankbar über hilfreiche Kommentare sein, die ein persönliches Nachfragen und somit viel Zeit ersparen. Selbst wenn man nur alleine an einem Projekt arbeitet, sollte man sich fragen, ob das auch für die Zukunft gilt.

Beim Schreiben einer Bibliothek muss diese zwingend dokumentiert werden, da Benutzer der Bibliothek deren Quellcode meistens nicht lesen möchten. Auch in diesem Fall helfen Kommentare, da aus ihnen automatisiert eine Dokumentation erstellt werden kann.

Gutes Kommentieren kann außerdem das Design des Programms verbessern.[1] Wenn man nach dem Single Responsibility Principle (SRP) vorgeht, so kann man den Verantwortungsbereich jeder Klasse in einem Kommentar ausdrücken. Auf diese Weise kann man stetig kontrollieren, ob die Klasse in ihrem Verantwortungsbereich operiert und das Implementieren von Aufgaben vermeiden, die nicht zu dieser Klasse gehören.


Kommentare in C# und Doxygen

C# und Visual Studio bieten verschiedene Möglichkeiten an, Kommentare zu verfassen. Neben den einzeiligen Kommentaren, die nur für kurze Anmerkungen verwendet werden sollten, gibt es noch mehrzeilige Kommentare und XML Kommentare, mit denen sich der Quellcode gut dokumentieren lässt.

Einzeilige Kommentare

Einzeilige Kommentare beginnen mit zwei Slashes und enden automatisch am Ende der Zeile:

//Dies ist ein einzeiliger Kommentar. Er endet automatisch am Ende der
//Zeile, so dass // in jeder Zeile wiederholt werden muss.

int i = 0; // Einzeilige Kommentare können auch in der Mitte einer Zeile beginnen

Mehrzeilige Kommentare

Ein Stern nach einem Slash (/*) leitet einen Kommentarblock ein. Der Kommentar endet erst, wenn das das entsprechende Token zum beenden des abgegrenzten Kommentars gefunden wurde (*/).

/* Dies ist ein mehrzeiliger 
Kommentar. Ich brauche nicht 
jede Zeile wieder neu als
Kommentar markieren. */

XML Kommentare

Mit XML Kommentaren können Klassen, Methoden, Eigenschaften, etc. zusätzliche Meta-Informationen mitgegeben werden, um die Dokumentation des Codes zu erleichtern. Gibt man in Visual Studio vor einer bereits deklarierten Prozedur drei Slashes (/) ein, so werden anhand der Signatur der Funktion automatisch die notwendigen XML Tags erstellt.

/// <summary>
/// Calculates length of the hypotenuse in a right-angled triangle. 
/// (Pythagorean theorem)
/// </summary>
/// <param name="a">length of first leg</param>
/// <param name="b">length of second leg</param>
/// <returns>length of hypotenuse</returns>
public double GetHypotenuse(double a, double b)
{
    return Math.Sqrt(Math.Pow(a, 2) + Math.Pow(b, 2));
}

Mit XML Kommentaren lässt sich zum Beispiel auch angeben, ob und wann Exceptions auftreten können oder es lassen sich Querverweise zu anderen Stellen im Code definieren. [2]

Praktisch an XML Kommentaren ist, dass diese automatisch in einem Tooltip erscheinen, wenn die entsprechend dokumentierte Klasse, Methode, etc. bei der Codeeingabe verwendet wird.

Aufgabenliste-Kommentare

Visual Studio kann in Kommentaren nach bestimmten Token suchen und diese dann in der Aufgabenliste gesammelt anzeigen. So können zum Beispiel Codestellen markiert werden, die noch einer Bearbeitung bedürfen. Vordefinierte Token sind TODO, HACK und UNDONE. Ein Token muss immer direkt hinter den Zeichen stehen, die den Kommentar einleiten.

// TODO Diese Zeile erscheint in der Aufgabenliste

/* HACK Auch dieser mehrzeilige Kommentar
erscheint in der Aufgabenliste */

Doxygen Befehle

Wird ein Programm wie Doxygen verwendet, um aus dem Source Code automatisiert eine Dokumentation zu generieren, so können in den Kommentaren noch zusätzlich Special Commands verwendet werden. Mit ihnen lassen sich zum Beispiel der Text formatieren oder man kann bestimmte Meta-Informationen zum Code mitgeben.

Wie kommentieren?

Innerhalb von Methoden

Nach den Clean Code Prinzip sollte ein Programm sich selbst beschreiben und mit möglichst wenigen Kommentaren auskommen:

Statt:

int length = 210;  // Länge in mm

Besser:

int lengthInMm = 210;

Statt:

public Vector3D Position() {
    // Calculates new Position
}

Besser:

public Vector3D CalculateNewPosition() {
    ...
}

Klassen bzw. außerhalb von Methoden

Klassen, Methoden, Prozeduren, Funktionen, etc. sollten mit XML Kommentaren versehen werden. Diese werden verwendet um die automatisierte Dokumentation zu bauen. Außerdem werden XML Kommentare dazu verwendet, bei der Codeeingabe Hinweise in einer Tooltip Box anzuzeigen, so dass das arbeiten mit dokumentierten Funktionen deutlich leichter fällt.

Wie man NICHT kommentieren sollte

Manchmal ist es einfach leichter zu sagen, wie man es eben nicht machen sollte[3]:

Unterschätze die Zielgruppe nicht

Wer auch immer in den Code reinschauen wird, es wird sicherlich auch ein Entwickler (aus deinem Team?) sein. Solche Kommentare sind völlig unnötig und gehören raus:

ACHTUNG NEGATIVBEISPIEL!

//Initialisiere i mit 20
int i = 20;

Übertreibe es nicht

Wenn man aufgrund lauter Kommentare den Code selbst plötzlich suchen muss, dann wurde inzwischen bei weitem viel zu viel kommentiert. Innerhalb von Prozeduren sollten nur dann Kommentare verwendet werden, wenn es aus dem Code selbst nicht ersichtlich ist, was er tut (Clean Code Ansatz).

Trenne dich von altem Code

Lösche nicht mehr gebrauchten Code, anstatt ihn auszukommentieren. Ansonsten sammeln sich nach und nach im Quellcode immer mehr Codeleichen an, die völlig unnötig sind.

Du sollst nicht Fluchen

Selbst wenn dich gerade ein Stück Code in Rage versetzt, solltest du dich beim Schreiben eines Kommentars zurückhalten. Es ist gesünder für die Zusammenarbeit im Team und kann dich im Berufsleben im schlimmsten Fall den Job kosten.


Wann kommentieren?

Kommentieren ist schön und gut, aber wann genau soll nun kommentiert werden? Es gibt mehrere Ansätze, Kommentare zu verfassen, die auch von dem jeweiligen Programmierstil abhängen.

Bei einem geplanten Vorgehen überlegt man sich im Voraus, was der Code genau leisten soll. Dann spezifiziert man die Parameter und die Rückgabe und verfasst noch vor dem Implementieren einen Kommentar der beschreibt, was der Code leisten wird. Vorteil dieses Ansatzes ist, dass auf diese Weise Funktionen und Klassen markiert werden können, die man (oder ein anderer Entwickler) erst später implementieren wird. Solche Codestellen sollten unbedingt mit einem Aufgabenliste-Kommentar markiert werden.

Geht man etwas ungeplanter vor, so kann es passieren, dass man eine Funktion implementiert, diese aber kurze Zeit später erweitert, überarbeitet oder gar durch eine neue ersetzt. Jetzt jederzeit Kommentare zu schreiben, die man nur wenige Minuten später wieder wegschmeißt ist unnötiger Aufwand. Aus diesem Grund schiebt man das Kommentieren und somit das Dokumentieren der Funktion vor sich her. Dennoch sollte die finale Version der Funktion letztendlich kommentiert sein.

Ein guter Richtwert ist: Wenn man ins Git committet, dann sollte alles kommentiert sein! (Committen sollte man sowieso nur sauberen Code.)

Referenzen

  1. http://dkrukovsky.blogspot.de/2005/07/how-to-write-comments.html Make The Software Shine - How to Write Comments
  2. http://msdn.microsoft.com/en-us/library/5ast78ax.aspx Microsoft MSDN - Recommended Tags for Documentation Comments (C# Programming Guide)
  3. http://allthingsoracle.com/how-to-make-comments-the-most-important-code-you-write/ How to make comments the most important 'code' you write