Die Code-Dokumentation

Das Thema Dokumentation ist bei EntwicklerInnen nicht unbedingt beliebt. Dennoch kommt jede EntwicklerIn fast täglich mit dem Thema in Berührung. Zum Beispiel wenn eine EntwicklerIn die Dokumentation einer Dritt-Software liest, die für die eigene Software genutzt werden soll. Oder wenn eine EntwicklerIn direkt im Quellcode Kommentare finden oder ihren eigenen Quellcode selbst kommentiert. Wie viel von so einer Code-Dokumentation im Quellcode nötig und sinnvoll ist, hängt allerdings von verschiedenen Faktoren ab.

Das Für und Wider der Code-Dokumentation

Viele EntwicklerInnen sind der Ansicht, dass ein ideales Software-Projekt auf die Code-Dokumentation weitgehend verzichten kann, wenn es konsequent dem Prinzip des Clean Codes folgt. In diesem Fall wäre der Code so klar strukturiert und so einfach geschrieben, dass sich der Sinn von allein ergibt und Erläuterungen überflüssig sind.

Screenshot von einem Laptop-Bildschirm mit Code-Zeilen

Für Verständlichkeit des Quellcodes sorgt beispielsweise eine sprechende und selbsterklärende Namensgebung von Klassen, Methoden, Funktionen und Variablen. Auch die konsequente Anwendung von Type Hints kann viel zur Klarheit des Codes beitragen, indem sowohl Eingabe- als auch Rückgabewerte definiert werden. Die Nutzung gängiger Design-Patterns und verbreiteter Bibliotheken trägt ebenfalls zur Verständlichkeit bei.

Beispiel: Ein klassischer DocBlock mit Parametern und Rückgabewert.

/**
 * Constructs a new PDO Object and returns it
 *
 * @param string $dbname name of the database to connect to
 * @return PDO connection to the database
 */
private function ConstructPDOObject($dbname) 
{
      ...
      return $pdoConnection;
}

Beispiel: Der gleiche Code bietet mit Typehints dieselbe Verständlichkeit.

private function ConstructPDOObject(string $dbname) : PDO
{
      ...
      return $pdoConnection;
}

In der Praxis begegnet man allerdings nicht immer Clean Code. Und selbst bei einem idealen Code müssen Dokumentationen nicht überflüssig sein. Denn es kommt darauf an, was man wie und für wen dokumentiert:

Wann man Quellcode dokumentiert

Quellcode sollte man möglichst sofort während des Entwicklungs-Prozesses dokumentieren, denn dann sind alle Gedanken präsent. Zudem findet man nur in den seltensten Fällen zu einem späteren Zeitpunkt die nötige Muße und Motivation, eher lässte Dokumentationspflichten zu erfüllen.

Wie man Quellcode dokumentiert

Bei der Dokumentation von Quellcode sind Inline-Kommentare und sogenannte DocBlocks üblich. Die genaue Syntax der Kommentare hängt dabei von der Programmiersprache und auch dem verwendeten Dokumentations-Generator ab.

Inline-Kommentare

Inline-Kommentare werden genutzt, um einzelne Code-Zeilen oder Code-Abschnitte zu erläutern. Wie viele Inline-Kommentare man verwendet, hängt von mehreren Faktoren ab. Zum einen sollte man sich fragen, wer den Quellcode liest und welchen Kenntnisstand man erwarten kann. Für Code-Anfänger können Inline-Kommentare sehr hilfreich sein, während erfahrene EntwicklerInnen die Kommentare oft eher überflüssig finden werden. Generell sollte man sich bei jedem Inline-Kommentar fragen, ob eine sprechendere Namensgebung oder ein einfacherer Code nicht mehr zum Verständnis beitragen kann.

DocBlocks

DocBlocks sind die gebräuchlichste Form der Code-Dokumentation. DocBlocks werden einleitend vor Klassen, Methoden und Funktionen geschrieben und folgen einem vorgegebenen Schema. In der Praxis sieht man üblicherweise einen kurzen Titel, einen Beschreibungstext sowie Tags für Eingabewerte (Paramenter) und Rückgabewerte (Return). Zwar sollten die Parameter und Returns schon über Type Hints verständlich sein, allerdings bieten DocBlocks die Möglichkeit, noch auf weitere Details einzugehen.

Ein DocBlock kann beispielsweise so aussehen:

/**
 * Calculates the monthly payment for a loan based on the principal amount, 
 * annual interest rate, and the number of payments.
 *
 * This method implements the fixed-rate monthly payment formula to compute
 * the payment amount for a loan. The calculation accounts for the principal
 * amount, the interest rate per period, and the total number of payments.
 *
 * @param float $principal The total amount of the loan.
 * @param float $annualInterestRate The annual interest rate of the loan as a percentage (e.g., 5.5 for 5.5%).
 * @param int $numberOfPayments The total number of payments to be made.
 * @return float The monthly payment amount. Returns 0 if any input is non-positive.
 */

Die gängigen IDEs unterstützen EntwicklerInnen bei dem Schreiben von DocBlocks und KI-Assistenten wie Copilot können DocBlocks komplett automatisiert verfassen. Damit wird zumindest das Argument des zusätzlichen Zeitaufwands für die Code-Dokumentation entkräftet oder deutlich abgeschwächt. Trotzdem sollte man sich auch bei DocBlocks fragen, in welcher Form sie wirklich sinnvolle Zusatzinformationen zu einem Clean Code mit sprechenden Namen, Type Hints und einer verständlichen Logik bieten.

Readme-Dateien

Eine besondere Form der Dokumentation sind Readme-Dateien, die ebenfalls direkt im Code-Projekt integriert sind und meist eher allgemeine Informationen über die Software, die Installation und die Nutzung bieten. Readme-Dateien sind standardmäßig bei jedem Software-Projekt auf Plattformen wie GitHub oder GitLab integriert. Dort wird aus der zentralen Readme-Dateie die Startseite des Software-Projekts generiert.

Tools für die Code-Dokumentation

Es gibt für die meisten Programmier-Sprachen Tools, mit denen sich automatisch Dokumentationen aus dem Quellcode generieren lassen. Wer sich nicht nur für automatische Dokumentationen sondern auch für redaktionelle Dokumentations-Tools interessiert, findet einige Anregungen in der Tool-Übersicht.

Andere Dokumentationen von und für EntwicklerInnen

Klassische Code-Dokumentationen tendieren häufig dazu, Informationen zu wiederholen, die in einem guten Code ohnehin offensichtlich sind. Ausgesprochen nützlich sind solche Code-Dokumentationen jedoch für die Erzeugung von Code-Referenzen, die häufig Teil der öffentlichen Entwickler-Dokumentation sind. Auch für die API-Dokumentation als spezielle Form der Entwickler-Dokumentation sind Code-Referenzen bzw. die systematische Dokumentation von Endpunkten bedeutsam.

In vielen Fällen können auch interne Software-Dokumentationen sinnvoll sein, die über die eigentliche Code-Dokumentation hinausgeht. Dafür werden oft Wiki-Systeme wie Confluence oder Media-Wiki, aber auch Content Management Systeme genutzt, da an solchen Dokumentationen oft auch Nicht-Entwickler beteiligt sind. In so einer Dokumentation können übergreifende Features oder Logiken beschrieben werden, die sich über mehrere Code-Files und Komponenten verteilen. Es können zum Beispiel zugehörige Tickets mit User-Stories verlinkt, Anforderungen beschrieben oder Schaubilder für Datenbanken oder Systeme integriert werden. Auf dem Enterprise-Level werden häufig ganze System-Architekturen dokumentiert, zum Beispiel mit einer Software wie dem Enterprise Architect.

Im weiteren Sinne gehören auch Commits zum Themenbereich Dokumentation. Commits sind kleine Nachrichten, die bei jeder Code-Änderung für das Versionierungs-Tool Git geschrieben werden. Mit den Commits können EntwicklerInnen andere EntwicklerInnen in einem Satz über die vorgenommenen Änderungen informieren. Aus diesen Commits können jedoch auch sehr gut Changelogs generiert werden, die oft Teil einer Software-Dokumentation sind.

Aufgrund des hohen Zeitaufwandes bleiben solche Dokumentationen meist lückenhaft, sie sollten daher auf zentrale und kritische Bereiche einer Software beschränkt bleiben. In vielen Fällen sind solche Dokumentationen die Basis für eine Diskussionen zwischen EntwicklerInnen, technischen ProjektmanagerInnen und Produkt-EntwicklerInnen.