Programmentwicklung/-struktur dokumentieren

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von cl10k.

    Programmentwicklung/-struktur dokumentieren

    Hallo,

    für mein aktuelles Projekt möchte ich eine saubere Dokumentation anfertigen.

    U.a. geht es mir darum, meine Klassen (Eigenschaften, Methoden) und deren gegenseitige Abhängigkeiten darzustellen. Neben der graphischen Darstellung möchte ich auch die Möglichkeit haben, per Text zu beschreiben welche Aufgaben meine einzelnen Objekte wahrnehmen.

    Welche Tools & Literatur könnt ihr empfehlen? Gibt es Standards (UML?)? Was lässt sich besonders bequem in Visual Studio integrieren?

    Schön wäre es, wenn die "Ausgabe" dieser Tools gut in eine Form überführt werden könnte, die sich in einer Textverarbeitung bequem verwenden lässt.

    Danke vorab!

    lg
    Der Tipp ist schon einmal nicht schlecht. Was ich hier msdn.microsoft.com/de-de/library/aa289191%28v=vs.71%29.aspx sehe, gefällt mir ganz gut, erledigt meine Probleme aber nicht ganz.

    Zum Hintergrund:

    Ich schreibe im Rahmen meiner Diplomarbeit ein kleines Programm (Ich bin allerdings kein Informatiker) und möchte den Programmaufbau nachhaltig und verständlich in den Grundzügen in Printform dokumentieren. Zielsetzung ist es, dem Leser (so wie ich Programmier-Laien!) einen groben Überblick über einzelne Komponenten (auf Klassenebene) zu verschaffen. Ich könnte mich zwar hinsetzen und das Ganze mit einer Grafikbearbeitung oder Powerpoint basteln, aber sicherlich bin ich nicht der erste mit diesem Problem.

    Bislang ging ich davon aus, dass UML der richtige Ansatz dafür sei. Allerdings erschließt sich mir StarUML nicht wirklich, darum auch die Frage nach Literatur bzw. euren Erfahrungen...

    lg
    Oh - ich fürchte, da gibts garkein Standard-Vorgehen.
    Also Programme zu dokumentieren ist eminent wichtig, und ist State of Art, aber derlei Dokumentationen richten sich an Programmierer, nicht an Laien.
    Laien erklärt man, was das Prog tut, und wies zu bedienen ist, nicht aber, aus welchen Komponenten es zusammengesetzt ist, und wie die interagieren.

    Wie gesagt: imo kein Standard möglich. Dem einen Laien kannste mit UML kommen, dem anderen ganz sicher sicher nicht. Und auch nicht standardisierbar ist, wieweit du ins Detail gehen willst oder kannst (hängt ja auch von Auffassungsgabe und Vorwissen des Gegenübers ab).
    Danke für deine Antwort!

    Mir geht es vor allem darum, nachfolgenden Studenten zu ermöglichen mein Programm weiter zu entwickeln. Der Programmcode ist dann doch zu umfangreich (rein quantitativ) als das man das einfach so überblicken könnte - zumal ich sicherlich auch nicht den schönsten und verständlichsten Code schreibe :huh:

    Vielleicht hat ja ein anderes Mitglied des Forums noch eine Idee. In der Zwischenzeit werde ich mich mal weiter mit UML beschäftigen. Tipps für gute Literatur zu diesem Thema sind nach wie vor HÖCHST willkommen...

    lg und Gute Nacht
    also doch Dokumentation für Programmierer. Na, dazu habich meine Meinung ja in Kommentation kundgetan, nämlich: schreibe guten Code und wenig Kommentare.
    Guter Code erklärt sich selbst,
    und zusätzliche Erklärungen beleidigen dann den Intellekt des Lesers, lenken vom wesentlichen ab, und lügen, wenn der Code geändert wird, und die Nachbesserung der Komentation vergessen.

    Ich zB. kommentiere den grundsätzlichen Aufbau eines Progs, und b.Bed. auch die Verantwortlichkeit der verschiedenen Klassen.
    Darüber hinaus nur ausnahmsweise, bei besonders eigenartigen oder listigen Konstrukten.

    Auf diese Weise erhält der Leser eingangs eine Orientierung, was das ganze soll, und dann kann er im Code selbst nachlesen, dasses tatsächlich so funktioniert, wie eingangs behauptet.
    Wenn der Leser nix kapiert, weil ihm programmiererische Kenntnisse fehlen, kannichnix dafür. Eine Programm-Doku ist eine Programm-Doku und kein Programmierkurs für Anfänger.
    also doch Dokumentation für Programmierer


    Jein. In unserem Studiengang erlernen wir schon ein paar grundlegende Kenntnisse im Programmieren. Schwerpunkt sind dabei aber numerische Verfahren zur Lösung mathematischer Probleme in Fortran und Ada. Das ist dann eigentlich ein so beschränktes Themengebiet, dass man von richtigem Programmieren immer noch keine Ahnung hat. Es reicht aber dazu aus, sich bei Bedarf ein Halbwissen an Grundlagen anzueignen.

    Ich werde deine Ratschläge aber beherzigen wenn es um das prinzipielle Kommentieren meines Codes geht. Auch wenn ich das wohl nicht so streng handhaben werde wie du es vorschlägst. Zwischen dem was ein richtiger Programmierer und ein ambitionierter Laie schreiben und verstehen kann, liegen Welten - dem muss ich Rechnung tragen.

    lg
    na, doch. Bei mir ist Programmierer, wer programmiert :D Ob ers gut macht, oder ühaupt kann, ist eine annere Frage ;)

    mein wichtigster Rat ist halt: schreibe guten Code. Das vlt. wesentlichste daran ist, vernünftig zu benamen, also wer die berühmte "Textbox1" in seiner Anwendung rumfahren hat, der fällt durchs Examen.
    Nenn das blöde Ding "txtUserName" oder whatever, und schon brauchst du einen Kommentar weniger zu schreiben.
    Hi
    ich denk' mal, dass sich UML, eine hierarchische Dokumentationsweise usw. eher bei richtig großen, unüberschaubareren Projekten anbietet. Die meisten Programme im Forum dürften auf ein spezifisches Problem beschränkt sein und daher im Allgemeinen noch relativ übersichtlich. Eine Dokumentation der einzelnen Typen und Mitgliedern ist sinnvoll, eine Kommentierung von nicht offensichtlichem Vorgehen gehört ebenfalls dazu. D.h. Kommentare wie
    If a = b Then//vergleicht, ob a und b gleich sind
    gehören nicht zu der sinnvollen Art (siehe MDX *hust*) und sind mehr nervig, als nützlich, wenn man wirklich mal auf Fehlersuche ist. Ein Bezeichner sollte allerdings schon seinen Sinn kundtun, sodass die Dokumentation wegfällt. Also ist a oder b kein wirklich sinnvoller Bezeichner. Ich bin immer der Meinung, man sollte sich auch an die Vorgaben der Umgebung halten (d.h. öffentliche Membernamen groß, Parameternamen klein usw. oder so)

    Ich denke mal, dass du selber entscheiden solltest, in was für einem Rahmen du eine Dokumentation anfertigst. Mach' dir einfach mal Gedanken dazu, was du benötigen würdest, wenn du an dein Programm rangehen würdest. Umfangreichheit ist immer relativ gesehen und ein schlechtes Maß für die Komplexität eines Programmes. Praktisch wäre eine Dokumentation in Textformat, bei der man einen groben überblick erhält, eine Einteilung in Ordner und Namensräumen, die jeweils ebenfalls eine Dokumentation erhalten und evtl. echt ein Klassendiagramm.
    Ich will mich hier nicht zu weit aus dem Fenster lehnen, ich bin nur Student und habe keine große Erfahrung in dem Thema. Meine bisherigen Projekte, sind größtenteils nicht darauf ausgelegt, von anderen gelesen zu werden, d.h. die Dokumentation ist vorhanden, aber nicht für "Laien" ausgelegt, die sich ohne Vorwissen in meine Programme einarbeiten wollen. Trotzdem denke ich, dass es wichtig ist, die Dokumentation nur mit nicht offensichtlichen Elementen vollzupacken und auf wesentliche Aspekte zu beschränken. Wenn man ein Klassendiagramm über 5000 zusammenhangslose Klassen hat, kann man das vielleicht als Tapete verwenden, aber sonst ist der Sinn evtl. eher fraglich.

    Noch was zur Architektur:
    Achte auf jeden Fall darauf, dass dein Code sauber ist, Redundanz vermieden wird, Klassen mit sich überschneidenden Inhalten in vererbbaren Klassen zusammengefasst werden, usw. Nachträgliche Ausbesserungen sind extrem nervig. Lieber auch mal auf eine abstrakte Klasse oder ein Interface zurückgreifen, wenn du nachträgliche Optimierungen vornehmen kannst oder möchtest (z.B. IDictionary statt einem Dictionary, das später durch ein manuell implementiertes als Hashtable gestaltetes Dictionary ersetzt werden soll). Es wäre auch gut, das Programm so zu gestalten, dass nachträgliche Änderungen sehr einfach und Probleme sehr leicht zu beheben sind. Also Abstraktion im Hinterkopf behalten, aber nicht über das Ziel hinausschießen. Nachträgliche Änderungen sind zeitaufwändig und lästig, da man an allen Ecken und Enden etwas ändern muss, aber eine Abstraktion selbst einzuführen ist meist auch nicht gerade schnell passiert.

    Gruß
    ~blaze~

    ~blaze~ schrieb:

    Hi
    ich denk' mal, dass sich UML, eine hierarchische Dokumentationsweise usw. eher bei richtig großen, unüberschaubareren Projekten anbietet.


    Vielen Dank für diesen ausführlichen Beitrag.

    Ich möchte dann doch noch ein bisschen ausholen um zu verdeutlichen warum ich eine vernünftige Dokumentation brauche.

    An meinem Programm schreibe ich schon eine ganze Weile. Die erste vollständige Version umfasst 30.000 Zeilen Code mit einem dementsprechenden Funktionsumfang. Der Schwerpunkt des Codes liegt dabei aber auf der technischen Fragestellung. Programmtechnisch handelt es sich dabei nur um ein paar simple Forms, Datenbanken und ein wenig COM mit Excel und einem CAD-Programm. Ich bin es aber meiner Vorstellung von vernünftiger Arbeit schuldig, meinen Nachfolgern ein entsprechend dokumentiertes Projekt zu hinterlassen. Andernfalls wird sich einfach niemand finden der damit weiter arbeiten möchte - was sehr schade wäre...

    ~blaze~ schrieb:

    Achte auf jeden Fall darauf, dass dein Code sauber ist, Redundanz vermieden wird, Klassen mit sich überschneidenden Inhalten in vererbbaren Klassen zusammengefasst werden, usw. Nachträgliche Ausbesserungen sind extrem nervig. Lieber auch mal auf eine abstrakte Klasse oder ein Interface zurückgreifen, wenn du nachträgliche Optimierungen vornehmen kannst oder möchtest (z.B. IDictionary statt einem Dictionary, das später durch ein manuell implementiertes als Hashtable gestaltetes Dictionary ersetzt werden soll). Es wäre auch gut, das Programm so zu gestalten, dass nachträgliche Änderungen sehr einfach und Probleme sehr leicht zu beheben sind. Also Abstraktion im Hinterkopf behalten, aber nicht über das Ziel hinausschießen. Nachträgliche Änderungen sind zeitaufwändig und lästig, da man an allen Ecken und Enden etwas ändern muss, aber eine Abstraktion selbst einzuführen ist meist auch nicht gerade schnell passiert.


    Genau das ist mein Problem!
    Das Programm funktioniert zwar, aber es ist eine einzige Katastrophe! Zum einen war das mein erster Versuch ein anspruchsvolles Thema zu handhaben und zugleich auch mein erstes umfangreiches Programm in vb.net. Ich war vollkommen von der Komplexität der Aufgabe überfordert und meine Kenntnisse im Programmieren waren/sind eher bescheiden. Ich habe z.B. ALLES :cursing: prozedural programmiert.

    Mittlerweile habe ich mich mit OOP beschäftigt und versuche nun mein Programm from scratch neu zu schreiben und in eine vernünftige, wartbare, lesbare Form zu bringen. Zielstellung ist die vollständige Umsetzung in OOP mit einer drastischen Verkleinerung des Quellcodes bei einer moderaten Steigerung des Funktionsumfanges. Ein wenig mehr Eleganz des Codes würde mich auch freuen ;)

    Dieses Forum ist dabei eine GROSSE Hilfe. Also habt bitte ein wenig Geduld wenn ich euch mit Kinkerlitzchen nerve...
    Am wichtigsten ist, wie wir ja wissen, vorher schon genau zu definieren was das Programm machen soll. Das wäre schon mal ein guter Einstieg in die Dokumentation. Danach noch eine kurze Erklärung der Funktionen intern.

    Für die internen Funktionen brauchst du nicht viel machen. Fasse die Formeln zu Gruppen zusammen (Berechnungen, Datenbankzugriff usw.) und beschreib nur die Funktionen, die wichtig sind. Alle nicht so wichtigen Funktionen werden im Programmcode über die Kommentare erklärt (XML-Kommentare).

    Auf simple Methoden brauchst du auch nicht näher eingehen. z.B.: Wenn du eine Methode mit dem Name "WriteLog" hast die einen String als Parameter annimmt, dann sagt das doch schon so ziemlich alles aus, was man darüber wissen muss. Wer dann noch genau wissen möchte, wie geloggt wird, der muss sich halt den Code ansehen.
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D
    Eine Standardmethode zur Dokumentation von Klassen, Methoden, Properties und Variablen besteht darin, in der Leerzeile darüber einfach mal 3 Kommentarzeichen einzugeben:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. ' bla
    3. End Sub
    4. ' ==>
    5. ''' <summary>
    6. '''
    7. ''' </summary>
    8. ''' <param name="sender"></param>
    9. ''' <param name="e"></param>
    10. ''' <remarks></remarks>
    11. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    12. ' bla
    13. End Sub
    Da hast Du schon mal ein gutes Dokumentationsgerüst.
    Mit einem Haken im Projekt:
    Eigenschaften -> Compile -> Generate XML documentation file macht Dir der Compiler sogar aus all diesen Kommentaren einen XML-File, der auch von anderen Werkzeugen genutzt werden kann.
    Und noch besser: Du bekommst eine Warnung, wenn eine Public Klasse / Methode / Property / Variable nicht so kommentiert ist.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich finde diesen Haken nicht, oder ist es nur für VisualStudio Anwender vorhanden?