Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

15.07.2013, 12:59

Die Krux mit der Dokumentation

Ich halte mich für durchschnittlich bis begabt, was den schriftsprachlichen Ausdruck angeht. Warum fällt es mir dann immer so schwer, meinen Quelltext zu dokumentieren?

So kommt es vor, dass mir die Dokumentation wie eine (sinnlose) Doppelung der Signatur erscheint oder sie ist schneller implementiert als Dokumentiert (oder beides).

Das Ergbnis ist, dass der Quelltext undokumentiert bleibt. :whistling:

Wie händelt Ihr das? Welche Reiszwecke muss man sich in den Hintern jagen, damit man ordentlich dokumentiert. Lesestoff, Referenzen und allgemeine Ratschläge nehme ich gerne entgegen.

Grüße ... bwbg

Zitat

Ich bin nicht der Messias.
Ich sage, du bist es, Herr. Und ich muss es wissen, denn ich bin schon einigen gefolgt.

https://bitbucket.org/bwbg

Oberon

Treue Seele

Beiträge: 181

Wohnort: Österreich

Beruf: Student

  • Private Nachricht senden

2

15.07.2013, 13:51

Lies dir doch als Beispiel Bibliotheksdokumentationen durch, z.B. die von SFML.

Zitat

So kommt es vor, dass mir die Dokumentation wie eine (sinnlose) Doppelung der Signatur erscheint

Wenn du das erkennst, wieso machst du es dann? Wenn die Funktionsparameter aus der Signatur klar sind, brauchst du sie ja nicht nochmals zu dokumentieren. Manchmal reicht eben eine Beschreibung in einem Satz.

Wie ich damit umgehe?
Wenn der Code nur zur privaten Verwendung ist, dokumentiere ich eigentlich nur "Gotchas", Schnittstellen (d.h. abstrakte Basisklassen) und wenige andere Dinge die nicht aus dem Code hervorgehen. Z.B.:

C-/C++-Quelltext

1
2
// CollideableGroupGroup does not own g, but only holds a WeakRef to it
void CollideableGroupGroup::add(CollideableGroup& g);

C-/C++-Quelltext

1
2
3
4
// Note that only the existence, not the actual readability of the file
// is checked. Trying to open a file using PhysFS could be rather
// expensive.
if (PHYSFS_exists(filename)) /* ... */

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

3

15.07.2013, 14:09

Wie händelt Ihr das? Welche Reiszwecke muss man sich in den Hintern jagen, damit man ordentlich dokumentiert. Lesestoff, Referenzen und allgemeine Ratschläge nehme ich gerne entgegen.


Ich möchte darauf hinweisen, dass hier primär Programmierer (bzw. Softwareentwickler) unterwegs sind, dem entsprechend dürftest du, was das Schreiben einer Dokumentation angeht, wohl eher fehl am Platze sein! ;)
Aber mal Spaß bei Seite: Bei einer Dokumentation kommt es nicht darauf an, wie gut sich die entsprechende Person artikulieren kann, da der Zweck der Dokumentation das dokumentieren der Funktionalität und in gewissem Maße der Implementierung darstellt. Sie muss also nicht hübsch klingen, solange sie verstanden wird. Das Problem dabei ist jedoch, dass die Person, die etwas implementiert hat, diese Implementierung i. d. R. so gut wie die eigene Westentasche kennt und daher auch eine Dokumentation grundsätzlich immer für unnötig hält, da doch alles klar ist. Spätestens wenn dann jemand anderes sich den Code anschaut, dürfte oft genug auffallen, dass es das eben nicht ist.
Ich für meinen Teil muss zugeben, dass ich in Sachen Dokumentation nicht unbedingt der vorbildlichste Entwickler bin. Bei meinen privaten Projekten dokumentiere ich bis auf sehr wenige Ausnahmefälle gar nichts und auf Arbeit wird die Dokumentation nachgepflegt, sollte die entsprechende Funktionalität implementiert sein... vielleicht...

Wenn man mit anderen an einem Projekt arbeitet oder wenn man vor hat, anderen den geschriebenen Code zugänglich zu machen, dann sollte man auch eine entsprechende Dokumentation pflegen. Ich denke, dass es in dem Zusammenhang sinnvoll ist, möglichst für jede Klasse und (öffentliche) Methode zu dokumentieren, was diese macht und ggf. auch wofür diese da ist, also welches Problem sie lösen soll. Wie umfangreich die Code-Doku sein sollte, ist in gewissem Maße Geschmackssache bzw. eine Abwägung aus Aufwand und Nutzen. Welche Sachverhalte so offensichtlich sind, dass sie gar nicht dokumentiert werden müssen, kann auch unterschiedlich wahrgenommen werden, zumal, wie bereits erwähnt, der Ersteller vieles für wesentlich offensichtlicher hält als jemand anderes. Auch das Maß an Erfahrung kann in dem Zusammenhang eine Rolle spielen.
Wenn man ausschließlich alleine an einem Projekt arbeitet, kann es sich ebenfalls lohnen, diverse Dinge zu dokumentieren, damit man auch später noch weiß, warum man etwas so gemacht hat, wie man es gemacht hat oder damit man nicht ggf. später Fehler macht, die man sonst nicht begangen hätte. In meinem Action Adventure ist es beispielsweise so, dass ich ziemlich viel mit Locks arbeiten muss, um Threadsicherheit zu erlangen, da die Skripte parallelisiert ausgeführt werden. Mal abgehesen davon, dass mein Action Adventure diese stellenweise noch nicht besitzt, habe ich eine Stelle, an der ich 2 Listen habe, die für die Bewegungen der Charaktere verwendet werden. In die erste Liste werden die Charaktere eingefügt, wenn ein skript sagt, dass sich der Charakter bewegen soll und die 2. besitzt die aktuell durchzuführenden Bewegungen. Würde ich an nur einer einzigen Stelle nicht darauf achten und die Locks in falscher Reihenfolge setzen, hätte ich eine potenzielle Stelle für einen Deadlock. Unter Berücksichtigung dieser Tatsache, hatte ich ausnahmsweise auch mal sofort ein bisschen was dazu geschrieben.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

4

15.07.2013, 14:29

Also ich dokumentiere auch eher selten, weil ich mir meistens zutraue, die Funktion des Codes auch Monate später sofort verstehen zu können.
Nur in längeren Methoden dokumentiere ich häufiger. So mache ich z.B. bei einer Kollisionsabfrage deutlich, welche Seite gerade geprüft wird, damit ich das später direkt finde.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

5

15.07.2013, 14:37

Es ist sogar ein sehr gutes Zeichen, wenn du keine Doku brauchst und der Programmcode selbsterklärend ist. Manchmal wird es aber fälle geben, wo vielleicht nicht wirklich klar ist, was die Methode macht, auch wenn die Signatur klar ist. Beispielsweise wenn sich die Parameter gegenseitig beeinflussen ist es oftmals hilfreich, das zu dokumentieren.

In meinen Freizeitprojekten dokumentiere ich auch keine Methoden/Klassen, nur Workarounds oder TODOs. Meiner Meinung nach ist es, wenn man alleine arbeitet und guten Code hat, gar nicht notwendig, etwas zu dokumentieren. Bei Fehlern findet man dann schnell die fehlerhafte Methode und kann es sowieso oftmals schnell fixen. Bei wirklich vertrickten Problemen hilft dir die Doku eh nie.

6

15.07.2013, 15:46

In meiner Signatur sind ein paar Zitate zum Thema Softwareentwicklung und Dokumentation dabei, die sich bei mir über die Zeit angesammelt haben. Die spiegeln ein bisschen die generelle Einstellung der Branche zu dem Thema wieder... (Zum Nachlesen: http://pastebin.com/xxCXAYZG )

Falls wirklich Dokumentation erstellt werden soll ist eine beliebte Möglichkeit einen Praktikanten/Hiwi dafür einzustellen. Oder du nimmst irgendein Tool was dir die Doku automatisch generiert. Das wird meistens dann gemacht, wenn eine Dokumentation vertraglich gefordert ist, sie aber sowieso niemand ernsthaft verwendet.

Als schönes Beispiel für eine Dokumentation dieser Qualität ist auch hier: http://static.springsource.org/spring/do…actoryBean.html

Zitat

public abstract class AbstractSingletonProxyFactoryBean
Convenient proxy factory bean superclass for proxy factory beans that create only singletons.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

15.07.2013, 15:49

Als schönes Beispiel für eine Dokumentation dieser Qualität ist auch hier: http://static.springsource.org/spring/do…actoryBean.html

Zitat

public abstract class AbstractSingletonProxyFactoryBean
Convenient proxy factory bean superclass for proxy factory beans that create only singletons.
Solche Dokumentation ist aber für die Tonne, weil sie sogar falsche Sachen behauptet.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

8

15.07.2013, 17:20

Bei meinen privaten Projekten dokumentiere ich die öffentliche Schnittstelle eigentlich nur aus dem Grund, damit ich mir daraus auch mal ein HTML machen könnte, wenn ich es wollte.
Und damit ich ein einheitliches Bild in IntelliSense hab und nicht nur bei der Hälfte der Klassen und Methoden eine Beschreibung bekomme und bei der anderen Hälfte nicht.
Ansonsten wie hier schon mehrfach genannt wurde nur irgendwelche Besonderheiten, die sich nicht unbedingt direkt aus dem Methodennamen und/oder Parameternamen ablesen lassen.

Zum Thema Tools um Dokumentation zu erzeugen: Hin und wieder sind die auch für einen Lacher gut ^^

C#-Quelltext

1
2
3
4
5
6
/// <summary>
/// Files the exists.
/// </summary>
/// <param name="fileName">Name of the file.</param>
/// <returns></returns>
bool FileExists( string fileName )

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

16.07.2013, 08:06

Ah ja, das gute Doxygen. Solche Sachen sind üblich. Ich persönlich nutze übrigens auch Doxygen oder Javadoc, einfach damit die IDE mit die Parameter und vielleicht sogar deren Zusammenhang (z.B. welche null sein dürfen und welche nicht) aufzeigen kann.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Thoran

Alter Hase

Beiträge: 520

Wohnort: Stuttgart

Beruf: Senior Software Engineer

  • Private Nachricht senden

10

16.07.2013, 09:29

Es ist sogar ein sehr gutes Zeichen, wenn du keine Doku brauchst und der Programmcode selbsterklärend ist.

Das halt ich für absoluten quatsch. Wenn ich eine Bibliothek, die ich vor Jahren geschrieben habe, wieder raus hole und verwenden will, interessiert mich die Implementierung absolut keinen Meter. Ich werde nur im Falle eines Bugs den Code wohl jemals wieder anschauen. Ansonsten will ich eine Blackbox mit definiertem Zugriffsinterface, das so dokumentiert ist, dass ich es ohne Probleme verwenden kann. Mag sein, dass ich mit dieser Ansicht alleine da stehe. Abgesehen davon deckt sich Anspruch mit der Realität bei meinen Projekten nicht immer ganz. :whistling: Zufäligerweise arbeite ich grad wieder schwer an der Dokumentation meiner öffentlichen Klassen in meiner Gameengine, nachdem sie jetzt schon einige zeit nur neue und geänderte Funktionalität erhalten hat. Überhaupt ist nicht das Dokumentieren neuer Funktionen das Problem, sondern das Nachführen existierender Dokumentation mit der Implementierung. Es gibt wohl nix schlimmeres als falsche Dokumentation. Am Ende ist es eine Frage der persönlichen Disziplin. Ich gebe zu es ist ein stetiger Kampf, aber auch befriedigend wenn man seine Doxygendoku durschaut und feststellt, dass man fast 100% dokumentiert hat. Und bei der einen oder anderen Klassen, hat die Doku mir schon geholfen mich an die interne Funktionsweise zu erinnern ohne dabei in den Code schauen zu müssen.

Für die Statistik: Ich verwende Doxygen mit graphviz im Javadoc-Stil, dazu habe ich VS-Makros die mir per Tastendruck Dokumentationsblöcke für Dateien, Klassen und Funktionen erstellen, abgeleitet aus der Signatur.
Mein Entwicklertagebuch
Aktuelles Projekt: Universum Espionage
Eingestellt:Spieleengine SilverCore
Organisator "Spieleentwickler Stammtisch Stuttgart"

Werbeanzeige