much more rework.

This commit is contained in:
Nicole Dresselhaus 2025-06-05 09:56:37 +02:00
parent 19ca830585
commit 6202af618a
4 changed files with 1407 additions and 532 deletions

File diff suppressed because one or more lines are too long

View File

@ -26,15 +26,16 @@ authors:
roles: roles:
- Conceptualization - Conceptualization
- Supervision - Supervision
- Investigation
- Validation - Validation
- "Writing review & editing" - "Writing review & editing"
- name: GPT-4.5 - name: GPT-4.5 "deep research"
url: https://chatgpt.com url: https://chatgpt.com
affiliation: affiliation:
- name: OpenAI - name: OpenAI
url: https://openai.com url: https://openai.com
roles: roles:
- investigation - Investigation
- "Writing original draft" - "Writing original draft"
citation: true citation: true
google-scholar: true google-scholar: true
@ -44,6 +45,7 @@ bibliography:
citation-style: springer-humanities-brackets citation-style: springer-humanities-brackets
format: format:
html: html:
css: extra-styles.css
embed-resources: true embed-resources: true
link-external-icon: true # externe links markieren link-external-icon: true # externe links markieren
link-external-newwindow: true # externe linkn in neuem Fenster öffnen link-external-newwindow: true # externe linkn in neuem Fenster öffnen
@ -70,20 +72,20 @@ viel Zeit aufwenden müssen, um den Code zu verstehen und anzuwenden. Dabei gilt
gute Dokumentation als zentrale Voraussetzung, um Forschungssoftware gute Dokumentation als zentrale Voraussetzung, um Forschungssoftware
**auffindbar, nachvollziehbar und wiederverwendbar** zu machen. **auffindbar, nachvollziehbar und wiederverwendbar** zu machen.
[Alle Empfehlungen stützen sich auf Literatur und etablierte Richtlinien
[@PrlicProcter2012TenSimpleRules; @WilsonEtAl2017Goodenoughpractices;
@BarkerEtAl2022IntroducingFAIR; @EndingsPrinciples221].]{.aside}
Dieser Anforderungskatalog richtet sich an Forschende, die keine Dieser Anforderungskatalog richtet sich an Forschende, die keine
Vollzeit-Programmierer sind, und soll **wissenschaftlich fundierte Richtlinien** Vollzeit-Programmierer sind, und soll **wissenschaftlich fundierte Richtlinien**
für die Dokumentation von Forschungssoftware liefern. Die Empfehlungen für die Dokumentation von Forschungssoftware liefern. Die Empfehlungen
berücksichtigen Best Practices des Research Software Engineering (RSE) und berücksichtigen Best Practices des Research Software Engineering (RSE) und damit
insbesondere die Prinzipien des _Endings-Projekts_ für digitale Langlebigkeit einhergehender Prinzipien wie die des _Endings-Projekts_ für digitale
[@EndingsPrinciples221]. Ziel ist es, ein praxistaugliches Gerüst Langlebigkeit [@EndingsPrinciples221] und _FAIR-Prinzipien_ für
bereitzustellen, das trotz Zeitknappheit die wesentlichen Software[@BarkerEtAl2022IntroducingFAIR].
Dokumentationsaspekte abdeckt, um sowohl die **Nachvollziehbarkeit** der
Ergebnisse als auch eine **Weiterverwendung** der Software zu ermöglichen. Im Ziel ist es, ein praxistaugliches Gerüst bereitzustellen, das trotz
Folgenden werden die Anforderungen an Inhalt, Format und Umfang der Zeitknappheit die wesentlichen Dokumentationsaspekte abdeckt, um sowohl die
**Nachvollziehbarkeit** der Ergebnisse als auch eine **Weiterverwendung** der
Software zu ermöglichen[@WilsonEtAl2017Goodenoughpractices].
Im Folgenden werden die Anforderungen an Inhalt, Format und Umfang der
Dokumentation definiert, geeignete (teil-)automatisierte Dokumentationswerkzeuge Dokumentation definiert, geeignete (teil-)automatisierte Dokumentationswerkzeuge
diskutiert und Best Practices in Form von Vorlagen und Checklisten vorgestellt. diskutiert und Best Practices in Form von Vorlagen und Checklisten vorgestellt.
@ -114,16 +116,23 @@ Dokumentieren Sie alle _Eingabeformate, Ausgabedaten und verwendeten
Datensätze_. Nutzer\*innen müssen wissen, welche Daten die Software erwartet Datensätze_. Nutzer\*innen müssen wissen, welche Daten die Software erwartet
(Dateiformate, Schnittstellen, Parameter) und welche Ergebnisse sie produziert. (Dateiformate, Schnittstellen, Parameter) und welche Ergebnisse sie produziert.
Idealerweise werden Beispiele angegeben: z.B. Beispiel-Dateien oder -Parameter Idealerweise werden Beispiele angegeben: z.B. Beispiel-Dateien oder -Parameter
und die korrespondierende Ausgabe. Falls die Software mit bestimmten und die korrespondierende Ausgabe.
Forschungsdaten arbeitet, beschreiben Sie diese Daten und ihre Struktur. Dies
umfasst die **Datenmodelle** (etwa wichtige Felder, deren Bedeutung und Falls die Software mit bestimmten Forschungsdaten arbeitet, beschreiben Sie
kontrollierte Vokabulare) und Annahmen über die Daten. Gemäß den diese Daten und ihre Struktur. Dies umfasst die **Datenmodelle** (etwa wichtige
ENDINGS-Prinzipien sollte die Datenstruktur in einem _statischen Dokument_ Felder, deren Bedeutung und kontrollierte Vokabulare) und Annahmen über die
festgehalten und der Software beigelegt sein so bleibt nachvollziehbar, wie Daten.
die Software die Daten interpretiert [@EndingsPrinciples221]. Eine Tabelle oder
Auflistung der Eingabefelder und Ausgabegrößen mit kurzen Beschreibungen erhöht Gemäß den ENDINGS-Prinzipien sollte die Datenstruktur auch in einem _statischen
die Klarheit. [Beispiel: _“Eingabedatei: CSV mit Spalten `Autor`, `Empfänger`, Dokument_ festgehalten und der Software beigelegt sein so bleibt
...; Ausgabe: JSON-Datei mit Netzwerk-Metriken pro Briefwechsel.”_]{.aside} nachvollziehbar, wie die Software die Daten interpretiert
[@EndingsPrinciples221]. Eine Tabelle oder Auflistung der Eingabefelder und
Ausgabegrößen mit kurzen Beschreibungen erhöht die Klarheit. [Beispiel:
_“Eingabedatei: CSV mit Spalten `Autor`, `Empfänger`, ...; Ausgabe: JSON-Datei
mit Netzwerk-Metriken pro Briefwechsel.”_]{.aside}
Gerade für JSON-Dateien bietet es sich an ggf. auch ein formelle Spezifikation
via [JSON-Schema](https://json-schema.org/draft/2020-12/json-schema-core) an.
### Code-Abhängigkeiten und technische Voraussetzungen ### Code-Abhängigkeiten und technische Voraussetzungen
@ -141,6 +150,12 @@ _“Benötigt Python 3.9 und die Bibliotheken Pandas und NetworkX. Installation:
bestehen etwa Zugriff auf bestimmte Hardware, ein Hochleistungsrechner oder bestehen etwa Zugriff auf bestimmte Hardware, ein Hochleistungsrechner oder
große Speicherkapazitäten sind diese zu nennen.]{.aside} große Speicherkapazitäten sind diese zu nennen.]{.aside}
::: {.callout-tip title="Prinzip" .column-margin}
Zeigen statt nur beschreiben konkrete Anwendungsfälle in der Doku verankern.
:::
- **Typische Nutzungsszenarien und Workflows:** Zeigen Sie anhand von - **Typische Nutzungsszenarien und Workflows:** Zeigen Sie anhand von
_Beispielen_, wie die Software benutzt wird. Ein **Quickstart-Beispiel** senkt _Beispielen_, wie die Software benutzt wird. Ein **Quickstart-Beispiel** senkt
die Einstiegshürde enorm. Dies kann z.B. eine Anleitung sein, wie man mit die Einstiegshürde enorm. Dies kann z.B. eine Anleitung sein, wie man mit
@ -155,58 +170,62 @@ große Speicherkapazitäten sind diese zu nennen.]{.aside}
Beispielschritte direkt ausprobieren können. Idealerweise werden Beispielschritte direkt ausprobieren können. Idealerweise werden
Code-Beispiele mit ausgegebenen Resultaten gezeigt (z.B. in Form von Code-Beispiele mit ausgegebenen Resultaten gezeigt (z.B. in Form von
Ausschnitten oder, bei Kommandozeilentools, via `--help` dokumentiert). Ausschnitten oder, bei Kommandozeilentools, via `--help` dokumentiert).
[Prinpip 1: **Zeigen statt nur beschreiben konkrete Anwendungsfälle in der
Doku verankern.**]{.aside .principle}
### Wissenschaftlicher Hintergrund und theoretischer Kontext ### Wissenschaftlicher Hintergrund und theoretischer Kontext
Da es sich um Forschungssoftware handelt, sollten Sie den _wissenschaftlichen Da es sich um Forschungssoftware handelt, sollten Sie den _wissenschaftlichen
Kontext_ offenlegen. Das heißt, erklären Sie die grundlegenden Methoden, Kontext_ ^[Dieser Hintergrundteil unterscheidet Forschungssoftware-Dokumentation
Algorithmen oder Modelle, die in der Software umgesetzt sind, zumindest in von rein kommerzieller Dokumentation: Es geht nicht nur um _wie_ man das Tool
Überblicksform. Verweisen Sie auf _relevante Publikationen_ oder Theorien, damit benutzt, sondern auch _warum_ es so funktioniert (Stichwort
andere die wissenschaftliche Grundlage nachvollziehen können. Beispielsweise: Nachvollziehbarkeit).] offenlegen. Das heißt, erklären Sie die grundlegenden
_“Die Implementierung folgt dem Algorithmus von Müller et al. (2019) zur Methoden, Algorithmen oder Modelle, die in der Software umgesetzt sind,
Netzwerkanalyse historischer Korrespondenz.”_ Halten Sie diesen Abschnitt aber zumindest in Überblicksform. Verweisen Sie auf _relevante Publikationen_ oder
prägnant Details gehören in die Forschungsarbeit selbst. Wichtig ist, dass die Theorien, damit andere die wissenschaftliche Grundlage nachvollziehen können.
Dokumentation den **Brückenschlag zwischen Code und Forschung** herstellt. Da Beispielsweise: _“Die Implementierung folgt dem Algorithmus von Müller et al.
viele Wissenschaftler\*innen zentrale Aspekte lieber in ihren Artikeln (2019) zur Netzwerkanalyse historischer Korrespondenz.”_ Halten Sie diesen
dokumentieren, sollte in der Software-Dokumentation zumindest eine Abschnitt aber prägnant Details gehören in die Forschungsarbeit selbst.
Zusammenfassung mit Querverweis erfolgen. So wissen Nutzer\*innen, unter welchen Wichtig ist, dass die Dokumentation den **Brückenschlag zwischen Code und
Annahmen oder Theorien das Tool funktioniert. [Dieser Hintergrundteil Forschung** herstellt. Da viele Wissenschaftler\*innen zentrale Aspekte lieber
unterscheidet Forschungssoftware-Dokumentation von rein kommerzieller in ihren Artikeln dokumentieren, sollte in der Software-Dokumentation zumindest
Dokumentation: Es geht nicht nur um _wie_ man das Tool benutzt, sondern auch eine Zusammenfassung mit Querverweis erfolgen. So wissen Nutzer\*innen, unter
_warum_ es so funktioniert (Stichwort Nachvollziehbarkeit).]{.aside} welchen Annahmen oder Theorien das Tool funktioniert.
### Bekannte Limitationen, Annahmen und Fehlermeldungen ### Bekannte Limitationen, Annahmen und Fehlermeldungen
Geben Sie ehrlich Auskunft über die _Grenzen der Software_. Welche Fälle werden Geben Sie ehrlich Auskunft über die _Grenzen der Software_:
**nicht** abgedeckt? Welche Annahmen über die Daten oder Anwendungsszenarien
werden getroffen? Dokumentieren Sie bekannte Probleme oder Einschränkungen - Welche Fälle werden **nicht** abgedeckt?
(z.B. _“funktioniert nur für Deutschsprachige Texte”, “maximale Datenmenge 1 - Welche **Annahmen** über die Daten oder Anwendungsszenarien werden getroffen?
Mio. Datensätze, da Speicherbegrenzung”_). Solche Hinweise verhindern
Fehlanwendungen und sparen Nutzern Zeit. Falls es bekannte **Bugs oder Dokumentieren Sie bekannte Probleme oder Einschränkungen (z.B. _“funktioniert
Workarounds** gibt, sollten diese ebenfalls (etwa in einer FAQ oder einem nur für Deutschsprachige Texte”, “maximale Datenmenge 1 Mio. Datensätze, da
Abschnitt "Bekannte Probleme") erwähnt werden. Eine transparente Auflistung von Speicherbegrenzung”_). Solche Hinweise verhindern Fehlanwendungen und sparen
Limitationen erhöht die Vertrauenswürdigkeit und hilft anderen, die Ergebnisse Nutzern Zeit.
richtig einzuordnen. Auch **aussagekräftige Fehlermeldungen** im Programm selbst
sind eine Form von Dokumentation: Sie sollten nicht nur kryptisch abbrechen, Falls es bekannte **Bugs oder Workarounds** gibt, sollten diese ebenfalls (etwa
sondern dem/der Anwender\*in idealerweise mitteilen, was schiefging und wie es in einer FAQ oder einem Abschnitt "Bekannte Probleme") erwähnt werden.
behoben werden kann (z.B. _“Fehler: Ungültiges Datum im Feld XY bitte Format
TT/MM/JJJJ verwenden.”_). Solche in den Code integrierten Hinweise ergänzen die Auch **aussagekräftige Fehlermeldungen** im Programm selbst sind eine Form von
schriftliche Dokumentation und tragen zur besseren Nutzbarkeit bei. Dokumentation: Sie sollten nicht nur kryptisch abbrechen, sondern dem/der
Anwender\*in idealerweise mitteilen, was schiefging und bestenfalls direkt wie
es behoben werden kann (z.B. _“Fehler: Ungültiges Datum im Feld XY bitte
Format TT/MM/JJJJ verwenden.”_). Solche in den Code integrierten Hinweise
ergänzen die schriftliche Dokumentation und tragen zur besseren Nutzbarkeit bei.
### Weiterentwicklung und Beitragsmöglichkeiten ### Weiterentwicklung und Beitragsmöglichkeiten
Obwohl viele Digital-Humanities-Tools primär von Einzelpersonen genutzt werden, Obwohl viele Digital-Humanities-Tools primär von Einzelpersonen genutzt werden,
sollte dennoch angegeben werden, wie andere ggf. _zur Software beitragen oder sollte dennoch angegeben werden, wie andere ggf. _zur Software beitragen oder
Support erhalten_ können. Ein kurzer Hinweis auf den Issue-Tracker (z.B. Support erhalten_ können. Ein kurzer Hinweis auf den Issue-Tracker (z.B.
_“Fehler bitte über GitHub-Issues melden”_) oder auf die Kontaktmöglichkeit zum _“Fehler bitte über GitHub-Issues melden”_) oder auf die Kontaktmöglichkeit
Autor (E-Mail) gehört dazu. Ebenso können **Community Guidelines** skizziert zum\*zur Autor\*in (E-Mail) gehört dazu.
werden: etwa Codierstandards oder ein Verhaltenskodex, falls Beiträge erwartet
werden. Für kleinere Projekte reicht oft ein Satz wie _“Beiträge durch Pull Ebenso können **Community Guidelines** skizziert werden: etwa Codierstandards
Requests sind willkommen; bei Fragen wenden Sie sich an…”_. [Dieser Aspekt muss oder ein Verhaltenskodex, falls Beiträge erwartet werden. Für kleinere Projekte
nicht umfangreich sein, zeigt aber Offenheit und sorgt dafür, dass im Falle von reicht oft ein Satz wie _“Beiträge durch Pull Requests sind willkommen; bei
Rückfragen die Hürde für Kontaktaufnahme niedrig ist.]{.aside} Fragen wenden Sie sich an…”_. ^[Dieser Aspekt muss nicht umfangreich sein, zeigt
aber Offenheit und sorgt dafür, dass im Falle von Rückfragen die Hürde für
Kontaktaufnahme niedrig ist.]
### Projekt-Metadaten (Lizenz, Zitation, Version) ### Projekt-Metadaten (Lizenz, Zitation, Version)
@ -216,50 +235,86 @@ Bedingungen der Nutzung und Weiterverbreitung. Es ist Best Practice, eine
**LICENSE-Datei** beizulegen, aber auch in der README kurz zu erwähnen, unter **LICENSE-Datei** beizulegen, aber auch in der README kurz zu erwähnen, unter
welcher Lizenz die Software steht. Für Forschungssoftware empfiehlt sich eine welcher Lizenz die Software steht. Für Forschungssoftware empfiehlt sich eine
offene Lizenz (z.B. MIT, BSD oder Apache 2.0 für Code, CC-BY für Daten), um offene Lizenz (z.B. MIT, BSD oder Apache 2.0 für Code, CC-BY für Daten), um
Nachnutzung nicht zu behindern. Zudem sollte angegeben werden, wie die Software Nachnutzung nicht zu behindern.
**zitiert** werden kann (z.B. DOI, Paper-Referenz). Ein eigener Abschnitt
_“Zitation”_ oder eine CITATION-Datei beschreibt, welche Publikation oder Zudem sollte angegeben werden, wie die Software **zitiert** werden kann (z.B.
welcher DOI bei Verwendung der Software in wissenschaftlichen Arbeiten anzugeben DOI, Paper-Referenz). Ein eigener Abschnitt _“Zitation”_ oder eine
ist. Dies erhöht die akademische Sichtbarkeit und stellt sicher, dass **CITATION-Datei** beschreibt, welche Publikation oder welcher DOI bei
Autor\*innen Credits für ihre Software bekommen Verwendung der Software in wissenschaftlichen Arbeiten anzugeben ist. Dies
[@SmithEtAl2016Softwarecitation]. Schließlich ist es sinnvoll, eine erhöht die akademische Sichtbarkeit und stellt sicher, dass Autor\*innen Credits
**Versionsnummer** der Software zu nennen (idealerweise in README und im Tool für ihre Software bekommen [@NoyEtAl2019IndustryscaleKnowledge].
selbst), damit Nutzer wissen, auf welche Ausgabe sich die Dokumentation bezieht
insbesondere, wenn es im Laufe der Zeit Aktualisierungen gibt. Diese Praxis Schließlich ist es sinnvoll, eine **Versionsnummer** der Software zu nennen
entspricht auch den ENDINGS-Prinzipien, die verlangen, dass jede veröffentlichte (idealerweise in README und im Tool selbst), damit Nutzer wissen, auf welche
Version eindeutig erkennbar ist und zitiert werden kann. Ausgabe sich die Dokumentation bezieht insbesondere, wenn es im Laufe der Zeit
Aktualisierungen gibt[@EndingsPrinciples221].
### Zusammenfassung der inhaltlichen Anforderungen ### Zusammenfassung der inhaltlichen Anforderungen
Zusammengefasst sollte die Dokumentation alle **W-Fragen** beantworten: _Was_ Zusammengefasst sollte die Dokumentation alle **W-Fragen** beantworten:
tut die Software, _warum_ wurde sie geschrieben (wissenschaftlicher Zweck),
_wer_ soll sie nutzen, _wie_ wird sie benutzt (Inputs, Outputs, Abläufe), - _Was_ tut die Software,
_womit_ läuft sie (Umgebung/Abhängigkeiten), _unter welchen Bedingungen_ - _warum_ wurde sie geschrieben (wissenschaftlicher Zweck),
(Annahmen/Limitationen) und _wohin_ können sich Nutzer wenden - _wer_ soll sie nutzen,
(Support/Zitation). All diese Punkte sorgen für **Nachvollziehbarkeit** (im - _wie_ wird sie benutzt (Inputs, Outputs, Abläufe),
Sinne von Reproduzierbarkeit der Ergebnisse) und **Weiterverwendbarkeit** (im - _womit_ läuft sie (Umgebung/Abhängigkeiten),
Sinne von Adaptierbarkeit der Software für neue Kontexte). - _unter welchen Bedingungen_ (Annahmen/Limitationen) und
- _wohin_ können sich Nutzer wenden (Support/Zitation).
All diese Punkte sorgen für **Nachvollziehbarkeit** (im Sinne von
Reproduzierbarkeit der Ergebnisse) und **Weiterverwendbarkeit** (im Sinne von
Adaptierbarkeit der Software für neue Kontexte).
## Format und Struktur der Dokumentation ## Format und Struktur der Dokumentation
Für Forschende ohne viel Ressourcen muss die Dokumentation **einfach zugänglich, Für Forschende ohne viel Ressourcen muss die Dokumentation **einfach zugänglich,
leicht pflegbar und ohne Spezialsoftware** erstellbar sein. Daher empfiehlt es leicht pflegbar und ohne Spezialsoftware** erstellbar sein.
sich, auf **leichte Formate** und eine klare Struktur zu setzen:
### `README.md` als zentrales Dokument ### `README.md` als zentrales Dokument
Die Hauptdokumentation sollte als README in Markdown-Format im Hauptverzeichnis Die Hauptdokumentation sollte als README in Markdown-Format im Hauptverzeichnis
des Code-Repositoriums liegen. Dieses README fungiert als “Startseite” des des Code-Repositoriums liegen. Dieses README fungiert als “Startseite” des
Projekts und enthält idealerweise eine komprimierte Übersicht aller wichtigen Projekts und enthält idealerweise eine komprimierte Übersicht aller wichtigen
Punkte: Zweck der Software, Kurzbeschreibung, Installation, kurzer Punkte:
Nutzungsbeispiel, Kontakt/Lizenz. Auf Plattformen wie [GitHub][], [GitLab][]
etc. wird die README automatisch angezeigt, was die Sichtbarkeit erhöht. Die - Zweck der Software,
Vorteile von **[Markdown][]** sind die einfache Lesbarkeit in Rohform, die - Kurzbeschreibung,
breite Unterstützung (auch in Renderern wie GitHub-Webansicht) und die Eignung - Installation,
für Versionierung (Textdatei im [git][]). So bleibt die Dokumentation eng mit - kurzer Nutzungsbeispiel,
dem Code verzahnt und unter Versionskontrolle ein Prinzip, das auch von - Kontakt/Lizenz.
ENDINGS[@EndingsPrinciples221] propagiert wird (Dokumentation soll statisch und
zusammen mit den Daten/Code abgelegt werden). Auf Plattformen wie [GitHub][], [GitLab][] etc. wird die README automatisch
angezeigt, was die Sichtbarkeit erhöht. Die Vorteile von **[Markdown][]** sind
die einfache Lesbarkeit in Rohform, die breite Unterstützung (auch in Renderern
wie GitHub-Webansicht) und die Eignung für Versionierung (Textdatei im [git][]).
So bleibt die Dokumentation eng mit dem Code verzahnt und unter
Versionskontrolle denn Dokumentation soll statisch und zusammen mit den
Daten/Code abgelegt werden[@EndingsPrinciples221].
### Keine proprietären Formate oder Abhängigkeit von Werkzeugen
::: {.callout-tip title="Prinzip" .column-margin}
Dokumentation gehört zum Code und muss auch ohne Programm lesbar sein.
:::
Um Hürden für die Erstellung und Nutzung der Dokumentation gering zu halten,
sollte auf gängige, offene Formate gesetzt werden (Plaintext, [Markdown][],
[reStructuredText][rst]).
[Vermeiden Sie nach Möglichkeit Formate wie Word-Dokumente oder PDF als primäre
Dokumentationsquelle solche Formate sind nicht diff-freundlich, erschweren
Zusammenarbeits-Workflows und sind meist nicht Teil des
Versionskontrollsystems.]{.bad-practice} Ein [Markdown][]-Dokument hingegen kann
gemeinsam mit dem Code gepflegt werden, und Änderungen sind transparent
nachvollziehbar.
Im Sinne der _Digital Longevity_[@EndingsPrinciples221] ist eine **statische
HTML- oder PDF-Version** der Dokumentation (automatisch generiert aus
[Markdown][] via [pandoc][]) als Teil der Release-Artefakte sinnvoll. **Wichtig
ist aber, dass die Quelle der Wahrheit immer die im Repository gepflegte Doku
bleibt.**
### Strukturierte Unterteilung in weitere Dateien/Abschnitte ### Strukturierte Unterteilung in weitere Dateien/Abschnitte
@ -303,44 +358,29 @@ Repository (z.B. eine `INSTALL.md` für ausführliche Installationshinweise,
- `LICENSE` Lizenztext - `LICENSE` Lizenztext
- `CITATION.cff` oder `CITATION.md` wie zu zitieren. - `CITATION.cff` oder `CITATION.md` wie zu zitieren.
Diese Dateien sollten konsistent formatiert und benannt sein, damit sie leicht Diese Dateien sollten konsistent formatiert und wie oben benannt sein, damit sie
auffindbar sind. Sie kommen ohne spezielle Tools aus ein einfacher Texteditor leicht auffindbar sind.
genügt zum Bearbeiten. Auch **Wiki-Seiten** (etwa in [GitHub][]) können genutzt
werden, sind aber weniger dauerhaft versioniert im Vergleich zu Dateien im
Code-Repository selbst. Die Dokumentation sollte möglichst _im Repository_
selbst liegen, um sicherzustellen, dass sie gemeinsam mit dem Code versioniert,
verteilt und archiviert wird. Externe Dokumentationswebsites sind für kleine
Projekte oft Overkill und können im schlimmsten Fall verwaisen.
### Keine proprietären Formate oder Abhängigkeit von Werkzeugen
Um Hürden für die Erstellung und Nutzung der Dokumentation gering zu halten,
sollte auf gängige, offene Formate gesetzt werden (Plaintext, [Markdown][],
[reStructuredText][rst]). Vermeiden Sie nach Möglichkeit Formate wie
Word-Dokumente oder PDF als primäre Dokumentationsquelle solche Formate sind
nicht diff-freundlich, erschweren Zusammenarbeits-Workflows und sind meist nicht
Teil des Versionskontrollsystems. Ein [Markdown][]-Dokument hingegen kann
gemeinsam mit dem Code gepflegt werden, und Änderungen sind transparent
nachvollziehbar. Markdown/Plaintext erfüllt die Bedingung der offenen
**Langzeitarchivierung**[@EndingsPrinciples221] (im Gegensatz etwa zu einer
Datenbank-gestützten Wissensbasis oder einem proprietären Wiki, das in 10 Jahren
evtl. nicht mehr läuft). Im Sinne der _Digital Longevity_ ist eine **statische
HTML- oder PDF-Version** der Dokumentation (automatisch generiert aus
[Markdown][] via [pandoc][]) als Teil der Release-Artefakte sinnvoll. **Wichtig
ist aber, dass die Quelle der Wahrheit immer die im Repository gepflegte Doku
bleibt.**
### Übersichtlichkeit und Navigierbarkeit ### Übersichtlichkeit und Navigierbarkeit
::: {.callout-tip title="Prinzip" .column-margin}
_"Dont Repeat Yourself"_: Alle Informationen zu einem Thema
(Installation/Nutzung/...) an derselben Stelle sammeln und keinesfalls mehrfach
pflegen.
:::
Strukturieren Sie die Dokumentation mit klaren Überschriften und Listen, damit Strukturieren Sie die Dokumentation mit klaren Überschriften und Listen, damit
Leser schnell die gesuchten Informationen finden. Eine **logische Gliederung** Leser schnell die gesuchten Informationen finden. Eine **logische Gliederung**
hilft unterschiedlichen Nutzergruppen gezielt das Relevante zu finden. Für hilft unterschiedlichen Nutzergruppen gezielt das Relevante zu finden. Für
längere Dokumente kann ein Inhaltsverzeichnis oder eine Abschnittsübersicht am längere Dokumente kann ein Inhaltsverzeichnis oder eine Abschnittsübersicht am
Anfang nützlich sein. [Markdown][] bietet z.B. automatische TOC-Generierung auf Anfang nützlich sein. [Markdown][] bietet z.B. automatische TOC-Generierung auf
manchen Plattformen. Achten Sie darauf, pro Abschnitt nur zusammenhängende manchen Plattformen.
Informationen zu behandeln (z.B. alles zu Installation an einem Ort) und
Wiederholungen zu vermeiden. Das Mantra _"Dont Repeat Yourself"_ gilt auch für Achten Sie darauf, pro Abschnitt nur zusammenhängende Informationen zu behandeln
Dokumentation. (z.B. alles zu Installation an einem Ort) und Wiederholungen zu vermeiden. Das
Mantra _"Dont Repeat Yourself"_ gilt auch für Dokumentation.
### Beispiele, Codeblöcke und ggf. Abbildungen einbinden ### Beispiele, Codeblöcke und ggf. Abbildungen einbinden
@ -348,15 +388,18 @@ Nutzen Sie die Möglichkeiten von [Markdown][], um die Dokumentation lebendig zu
gestalten. Zeigen Sie Code-Beispiele als formatierte Codeblöcke, fügen Sie Links gestalten. Zeigen Sie Code-Beispiele als formatierte Codeblöcke, fügen Sie Links
zu weiterführenden Ressourcen ein, oder binden Sie bei Bedarf Abbildungen ein zu weiterführenden Ressourcen ein, oder binden Sie bei Bedarf Abbildungen ein
(etwa ein Diagramm der Datenpipeline, ein Screenshot der Benutzeroberfläche, (etwa ein Diagramm der Datenpipeline, ein Screenshot der Benutzeroberfläche,
etc.). Achten Sie dabei auf Dateigrößen und Formate (Bilder als PNG/JPG, etc.).
Diagramme wenn möglich als SVG für Langlebigkeit). Falls Diagramme der
Architektur oder Workflow-Abbildungen hilfreich sind, können diese mit simplen Achten Sie dabei auf Dateigrößen und Formate (Bilder als PNG/JPG, Diagramme wenn
Mitteln erstellt werden (zur Not handgezeichnet und abfotografiert, besser möglich als SVG für Langlebigkeit). Falls Diagramme der Architektur oder
jedoch mit Tools wie [mermaid.js][] Diagrammen in [Markdown][] oder Workflow-Abbildungen hilfreich sind, können diese mit simplen Mitteln erstellt
[graphviz][]). Diese Visualisierungen sind jedoch nur dann einzusetzen, wenn sie werden^[zur Not handgezeichnet und abfotografiert, besser jedoch mit Tools wie
echten Mehrwert bieten und ohne komplexe Build-Prozesse eingebunden werden [mermaid.js][] Diagrammen in [Markdown][] oder [graphviz][]].
können. Im Zweifel hat textuelle Beschreibung Vorrang, um nicht vom **Prinzip
“keep it simple”** abzuweichen. Diese Visualisierungen sind jedoch nur dann einzusetzen, wenn sie echten
Mehrwert bieten und ohne komplexe Build-Prozesse eingebunden werden können. Im
Zweifel hat textuelle Beschreibung Vorrang, um nicht vom **Prinzip “keep it
simple”** abzuweichen.
### Fazit Format und Struktur ### Fazit Format und Struktur
@ -373,6 +416,13 @@ meisten Fällen optimal.
## Die Dokumentation selbst ## Die Dokumentation selbst
::: {.callout-tip title="Prinzip" .column-margin}
Kann eine neue Person in < 1 Stunde mit Hilfe der Doku das Tool zum Laufen
bringen und ein einfaches Beispiel ausführen?
:::
Gerade weil Forschende wenig Zeit haben, muss die Dokumentation **effizient** Gerade weil Forschende wenig Zeit haben, muss die Dokumentation **effizient**
gestaltet sein sie soll alle wichtigen Informationen enthalten, aber auch gestaltet sein sie soll alle wichtigen Informationen enthalten, aber auch
nicht unnötig ausschweifen. Für typische Forschungssoftware-Projekte in den nicht unnötig ausschweifen. Für typische Forschungssoftware-Projekte in den
@ -381,23 +431,27 @@ verteilt auf mehrere Dateien) als ausreichend erachtet. Dieser Richtwert
verhindert, dass die Doku zu einer unüberschaubaren Abhandlung wird, und zwingt verhindert, dass die Doku zu einer unüberschaubaren Abhandlung wird, und zwingt
zur Fokussierung auf das Wesentliche. Wichtig ist der **Inhalt, nicht die zur Fokussierung auf das Wesentliche. Wichtig ist der **Inhalt, nicht die
Länge**: eine kürzere, aber inhaltsreiche Dokumentation ist besser als eine Länge**: eine kürzere, aber inhaltsreiche Dokumentation ist besser als eine
lange, die nichts aussagt. [Prinzip 1: **Kann eine neue Person in < 1 Stunde mit lange, die nichts aussagt.
Hilfe der Doku das Tool zum Laufen bringen und ein einfaches Beispiel
ausführen?**]{.aside .principle}
### Umfang und Fokus der Dokumentation ### Umfang und Fokus der Dokumentation
Ein effizienter Umfang lässt sich erreichen, indem sie **alles, was für Ein effizienter Umfang lässt sich erreichen, indem sie **alles, was für
Nachvollziehbarkeit und Wiederverwendung nötig ist dokumentieren, und alles Nachvollziehbarkeit und Wiederverwendung nötig ist dokumentieren, und alles
andere skippen**. Negativbeispiele umfassen: andere skippen**.
::: {.bad-practice}
Negativbeispiele umfassen:
- jeder interne Programmiertrick wird erläutert Quellcode-Kommentare richten - jeder interne Programmiertrick wird erläutert Quellcode-Kommentare richten
sich an Entwickler, während die Nutzerdokumentation sich auf Nutzung und sich an Entwickler\*innen, während die Nutzendendokumentation sich auf Nutzung
Kontext beschränkt und Kontext beschränkt
- seitenlange Theorieabhandlungen (verweisen Sie stattdessen auf Papers) - seitenlange Theorieabhandlungen (verweisen Sie stattdessen auf Papers)
- generische Erklärungen bekannter Technologien (man muss Git oder Python nicht - generische Erklärungen bekannter Technologien (man muss Git oder Python nicht
in der Doku erklären, sondern kann referenzieren) in der Doku erklären, sondern kann referenzieren)
:::
Halten Sie auch die Sprache prägnant: Halten Sie auch die Sprache prägnant:
- kurze Absätze - kurze Absätze
@ -430,9 +484,9 @@ eine Software weiter betrachten oder nicht, und hier zählt der erste Eindruck.
Dieser Katalog adressiert primär die Nutzerdokumentation (für Endnutzer und für Dieser Katalog adressiert primär die Nutzerdokumentation (für Endnutzer und für
die Autoren selbst, wenn sie das Tool später wieder anfassen). die Autoren selbst, wenn sie das Tool später wieder anfassen).
Entwicklerdokumentation (z.B. detaillierte API-Dokumente, Code-Kommentare, Entwickler\*innendokumentation (z.B. detaillierte API-Dokumente,
technische Architektur) kann separat gehalten werden, sofern nötig, um den Code-Kommentare, technische Architektur) kann separat gehalten werden, sofern
Hauptnutzerfluss nicht zu überfrachten. nötig, um den Hauptnutzerfluss nicht zu überfrachten.
#### Minimaldokumentation: kurze Kommentare #### Minimaldokumentation: kurze Kommentare
@ -464,33 +518,33 @@ redundant zu erklären. Das entlastet Ihre Dokumentation und hält sie schlank.
#### Fokus auf Nutzer\*innen - nicht Entwickler\*innen #### Fokus auf Nutzer\*innen - nicht Entwickler\*innen
Stellen Sie sich beim Schreiben der Doku die verschiedenen _Nutzerrollen_ vor: Stellen Sie sich beim Schreiben der Doku die verschiedenen _Nutzerrollen_ vor:
**“Zukünftiges Ich”**, **Kolleg\*innen**, **Fachforscher anderer Disziplin** und **“Zukünftiges Ich”**, **Kolleg\*innen**, **Fachforscher\*innen anderer
ggf. **Software-Entwickler, die den Code erweitern**. Jede dieser Gruppen möchte Disziplin** und ggf. **Software-Entwickler\*innen, die den Code erweitern**.
bestimmte Dinge wissen. Jede dieser Gruppen möchte bestimmte Dinge wissen.
_Forscher\*innen_ fragen: _Forschende_ fragen:
- Was kann das Tool? - Was kann das Tool?
- Wie benutze ich es? - Wie benutze ich es?
- In welchem Kontext steht es? - In welchem Kontext steht es?
_Entwickler\*innen_ fragen: _Entwicklende Personen_ fragen:
- Wie kann ich beitragen? - Wie kann ich beitragen?
- Wie funktioniert es unter der Haube? - Wie funktioniert es unter der Haube?
Priorisieren Sie zunächst die erstgenannten (Anwender) deshalb Fokus auf Priorisieren Sie zunächst die erstgenannten (Anwender) deshalb Fokus auf
Zweck, Nutzung und Ergebnisse in der Hauptdoku. Detailinfos für Entwickler Zweck, Nutzung und Ergebnisse in der Hauptdoku. Detailinfos für
(z.B. Code-Struktur, To-do-Liste) können separat oder später ergänzt werden. Entwickler\*innen (z.B. Code-Struktur, To-do-Liste) können separat oder später
Für viele kleine Forschungssoftware-Projekte sind ausführliche Entwicklerdokus ergänzt werden. Für viele kleine Forschungssoftware-Projekte sind ausführliche
ohnehin nicht nötig hier reicht es, den Code gut zu kommentieren und eventuell Entwickler\*innendokumentationen ohnehin nicht nötig hier reicht es, den Code
eine grobe Architekturübersicht bereitzustellen. Konzentrieren Sie die gut zu kommentieren und eventuell eine grobe Architekturübersicht
Hauptdokumentation darauf, **das Nutzen und Verstehen der Software von außen** bereitzustellen. Konzentrieren Sie die Hauptdokumentation darauf, **das Nutzen
zu ermöglichen. und Verstehen der Software von außen** zu ermöglichen.
#### Und anschließend? #### Und anschließend?
Wenn der Zeitmangel vorüber ist[^als ob DAS je der Fall wäre -.-], sollte man Wenn der Zeitmangel vorüber ist^[als ob DAS je der Fall wäre -.-], sollte man
nach und nach das folgende Kapitel umsetzen. nach und nach das folgende Kapitel umsetzen.
## Was macht eine gute Dokumentation aus ## Was macht eine gute Dokumentation aus
@ -513,15 +567,20 @@ die Schwelle für alltägliche Fragen.
### Prinzipien: FAIR und ENDINGS ### Prinzipien: FAIR und ENDINGS
Beachten Sie, dass dieser Anforderungskatalog in Einklang mit den Prinzipien des Beachten Sie, dass dieser Anforderungskatalog in Einklang mit den Prinzipien des
**Research Software Engineering**[@citation-needed] und den **Research Software Engineering**[@Hasselbring2020OpenSourceResearch] und den
**ENDINGS-Prinzipien**[@EndingsPrinciples221] steht[Die ENDINGS-Prinzipien für **ENDINGS-Prinzipien**[@EndingsPrinciples221] steht.
digitale Projekte betonen insbesondere die Bedeutung von Dokumentation für
Datenstrukturen, offenen Lizenzen, statischen Outputs und Zitierbarkeit. Unsere
Empfehlungen, etwa ein statisches Markdown-README beizulegen, die
Datenmodell-Doku nicht auszulagern oder Zitationsangaben zu machen, setzen genau
diese Vorgaben um. ]{.aside}.
Gute Dokumentation bedeutet daher u.a. ::: {.callout-note title="ENDINGS-Prinzipien" .column-margin}
Die ENDINGS-Prinzipien für digitale Projekte betonen insbesondere die Bedeutung
von Dokumentation für Datenstrukturen, offenen Lizenzen, statischen Outputs und
Zitierbarkeit. Unsere Empfehlungen, etwa ein statisches Markdown-README
beizulegen, die Datenmodell-Doku nicht auszulagern oder Zitationsangaben zu
machen, setzen genau diese Vorgaben um.
:::
Gute Dokumentation bedeutet daher u.a. die Verdeutlichung und Sicherstellung von
- Reproduzierbarkeit (Installation, Daten, Beispiele), - Reproduzierbarkeit (Installation, Daten, Beispiele),
- Offenheit (Lizenz, offene Formate) und - Offenheit (Lizenz, offene Formate) und
@ -534,7 +593,7 @@ Softwarepraxis.
### Kontinuierliche Verbesserung und Feedback ### Kontinuierliche Verbesserung und Feedback
Dokumentation ist kein einmaliges Ereignis, sondern ein fortlaufender Prozess. Dokumentation ist kein einmaliges Ereignis, sondern ein fortlaufender Prozess.
Best Practice sind daher insbesondere: Best Practice sind daher insbesondere:[@citation-needed]
- früh Feedback von Testnutzer\*innen oder Kolleg\*innen einzuholen: Lassen Sie - früh Feedback von Testnutzer\*innen oder Kolleg\*innen einzuholen: Lassen Sie
jemanden die Anleitung befolgen und hören Sie auf Stolpersteine. Oft zeigen jemanden die Anleitung befolgen und hören Sie auf Stolpersteine. Oft zeigen
@ -601,18 +660,21 @@ zusammenfließen. Sie sind daher sinnvoll, **wenn der Hauptanwendungsfall die
Durchführung von Analysen oder Datenverarbeitungen ist**, die man Schritt für Durchführung von Analysen oder Datenverarbeitungen ist**, die man Schritt für
Schritt demonstrieren kann. Schritt demonstrieren kann.
::: {.callout-warning} ::: {.callout-warning title="Vorsicht bei Python-Notebooks"}
Notebooks erfordern allerdings eine lauffähige Umgebung das heißt, Sie müssen Notebooks erfordern eine lauffähige Umgebung das heißt, Sie müssen darauf
darauf achten, dass alle Abhängigkeiten im Notebook deklariert sind und die achten, dass alle Abhängigkeiten im Notebook deklariert sind oder ggf.
Daten zugänglich sind. Es hat sich gezeigt, dass Notebooks aus Publikationen oft nachinstalliert werden und die Daten zugänglich sind.
nicht ohne Weiteres laufen, weil Pfade, Datenquellen oder spezielle Umgebungen
fehlen. Deshalb: Wenn Sie Notebooks als Doku nutzen, stellen Sie sicher, dass Es hat sich gezeigt, dass Notebooks aus Publikationen oft nicht ohne Weiteres
sie _leicht ausführbar_ sind (z.B. durch Bereitstellen von Umgebungsdateien wie laufen, weil Pfade, Datenquellen oder spezielle Umgebungen fehlen.
Deshalb: Wenn Sie Notebooks als Doku nutzen, stellen Sie sicher, dass sie
_leicht ausführbar_ sind (z.B. durch Bereitstellen von Umgebungsdateien wie
`environment.yml` oder Dockerfiles, kleinen Beispieldatensätzen und klaren `environment.yml` oder Dockerfiles, kleinen Beispieldatensätzen und klaren
Anweisungen im Notebook). Ggf. kann man Notebooks auch in reine Markdown/HTML Anweisungen im Notebook). Ggf. kann man zusätzlich auch reine
exportieren und dem Repo beilegen, damit zumindest statisch die Inhalte Markdown/HTML-Exporte von evaluierten Notebooks exportieren und dem Repo
einsehbar sind. beilegen, damit zumindest statisch die Inhalte einsehbar sind.
::: :::
@ -626,6 +688,13 @@ kann.
### Sphinx/MkDocs/Doxygen (statische Dokumentationswebseiten) ### Sphinx/MkDocs/Doxygen (statische Dokumentationswebseiten)
::: {.callout-tip title="Prinzip" .column-margin}
Ab einer Codebasis `> einige tausend Zeilen` oder `>5 nontriviale Module` sollte
eine generierte Dokumentation bereitstehen.
:::
Für umfangreichere Projekte oder solche mit eigener Website kann es sinnvoll Für umfangreichere Projekte oder solche mit eigener Website kann es sinnvoll
sein, eine **Dokumentationswebsite** zu generieren. Tools wie _[Sphinx][]_ sein, eine **Dokumentationswebsite** zu generieren. Tools wie _[Sphinx][]_
(zusammen mit ReadTheDocs für Hosting) oder _[MkDocs][]_ erlauben es, aus (zusammen mit ReadTheDocs für Hosting) oder _[MkDocs][]_ erlauben es, aus
@ -633,9 +702,7 @@ sein, eine **Dokumentationswebsite** zu generieren. Tools wie _[Sphinx][]_
HTML-Dokumentationssatz zu bauen. Der Vorteil ist, dass man eine durchsuchbare, HTML-Dokumentationssatz zu bauen. Der Vorteil ist, dass man eine durchsuchbare,
verlinkte Doku bekommt, oft mit schönem Layout und zusätzlicher Navigation. Mit verlinkte Doku bekommt, oft mit schönem Layout und zusätzlicher Navigation. Mit
_Continuous Integration_ lassen sich diese Seiten bei jedem Git-Push automatisch _Continuous Integration_ lassen sich diese Seiten bei jedem Git-Push automatisch
aktualisieren. [Prinzip 2: **ab einer Codebasis `> einige tausend Zeilen` oder aktualisieren.
`>5 Module` lohnt es sich, eine generierte Dokumentation bereitzustellen, um
(auch selbst) den Überblick zu behalten.**]{.aside .principle}
Für die Nachhaltigkeit ist wichtig, dass diese Webseiten statisch Für die Nachhaltigkeit ist wichtig, dass diese Webseiten statisch
sind[@EndingsPrinciples221] d.h. sie funktionieren ohne Server-Backends und sind[@EndingsPrinciples221] d.h. sie funktionieren ohne Server-Backends und
@ -658,24 +725,30 @@ Sphinx/Doxygen-Doku für die API (s.u.) existiert.
### Docstrings und API-Dokumentationsgeneratoren ### Docstrings und API-Dokumentationsgeneratoren
::: {.callout-tip title="Prinzip" .column-margin}
Benutzt jemand die Software nur, braucht es keine API-Dokumentationen; wird die
Software aber woanders eingebunden, ist dieses notwendig.
:::
Nutzen Sie die Möglichkeit, Dokumentation _direkt im Quellcode_ unterzubringen, Nutzen Sie die Möglichkeit, Dokumentation _direkt im Quellcode_ unterzubringen,
z.B. in Form von **[Docstrings][Docstring]** (mehrzeilige Strings in z.B. in Form von **Docstrings^[kurz für: "Documentation String"]** (mehrzeilige
Funktionen/Klassen bei Python, [Roxygen][]-Kommentare in R, Strings in Funktionen/Klassen bei Python, [Roxygen][]-Kommentare in R,
[Javadoc][]-Kommentare in Java, etc.). Diese dienen doppelt: Zum einen [Javadoc][]-Kommentare in Java, etc.).
erleichtern sie es Ihnen und Kollegen, den Code beim Lesen zu verstehen, zum
anderen können sie von Tools ausgelesen und zu hübschen API-Dokumentationen Diese dienen doppelt: Zum einen erleichtern sie es Ihnen und Kollegen, den Code
verarbeitet werden. Idealerweise dokumentieren Sie _jede wichtige **oder** von beim Lesen zu verstehen, zum anderen können sie von Tools ausgelesen und zu
außen sichtbare Funktion, Klasse oder Modul_ mit einem kurzen Docstring, der hübschen API-Dokumentationen verarbeitet werden. Idealerweise dokumentieren Sie
Zweck, Parameter, Rückgaben und ggf. Beispiele enthält. Für kleine Scripte _jede wichtige **oder** von außen sichtbare Funktion, Klasse oder Modul_ mit
genügen ggf. Modul- oder Abschnittskommentare.[Prinzip 3: **Benutzt jemand die einem kurzen Docstring, der Zweck, Parameter, Rückgaben und ggf. Beispiele
Software nur braucht es keine API-Dokumentationen; wird die Software aber enthält. Für kleine Scripte genügen ggf. Modul- oder Abschnittskommentare.
woanders eingebunden ist dieses angeraten.**]{.aside .principle}
Wichtig ist Konsistenz im Stil halten Sie sich an Konventionen Ihres Wichtig ist Konsistenz im Stil halten Sie sich an Konventionen Ihres
Ökosystems (z.B. **[Google Style Guide](https://google.github.io/styleguide/)** Ökosystems (z.B. [Google Style Guide](https://google.github.io/styleguide/) für
für Python Docstrings oder entsprechende Formatvorgaben für andere Sprachen). Python Docstrings oder entsprechende Formatvorgaben für andere Sprachen).
Verlinken sie diese Styleguides in der README. Sogenannte Linting-Tools, wie Verlinken sie diese Styleguides in der README. Sogenannte Linting-Tools, wie
etwa [pylint][], können die Verwendung erzwingen. etwa **[pylint][]**, können die Verwendung erzwingen.
Mit Tools, wie **[Sphinx][]**, **[Javadoc][]**, **[Doxygen][]**, Mit Tools, wie **[Sphinx][]**, **[Javadoc][]**, **[Doxygen][]**,
**[MkDocs][]**,**[pdoc][]** und vielen weiteren, können aus Docstrings **[MkDocs][]**,**[pdoc][]** und vielen weiteren, können aus Docstrings
@ -690,22 +763,13 @@ anderen genutzt werden soll, oder wenn das Projekt größer wird und die interne
Struktur komplexer ist. In solchen Fällen kann eine _API-Referenz_ (automatisch Struktur komplexer ist. In solchen Fällen kann eine _API-Referenz_ (automatisch
aus dem Code erzeugt) eine erhebliche Hilfe sein. aus dem Code erzeugt) eine erhebliche Hilfe sein.
**Verpflichtend** wird dieser Ansatz etwa, wenn Sie ein Bibliothekspaket
veröffentlichen (z.B. ein R-Package in CRAN oder Python-Package auf PyPI)
dort sind Docstrings und generierte Dokumentation quasi Standard. Für ein
einmaliges Analyse-Skript in den Digital Humanities ist eine voll ausgebaute
API-Doku vielleicht nicht nötig; hier reicht möglicherweise ein inline
kommentierter Code. Häufig wandeln sich solche Analyse-Skripte aber über Zeit,
sodass hier auch weitere Prinzipien guter Software[@citation-needed], wie
Modularisierung empfohlen sind um gegebene Ansätze einfacher zu übertragen.
[Prinzip: **Benutzt jemand die Software nur braucht es keine
API-Dokumentationen; wird die Software aber woanders eingebunden ist dieses
angeraten.**]{.aside .principle}
### Versionskontrolle und kontinuierliche Dokumentationspflege ### Versionskontrolle und kontinuierliche Dokumentationspflege
[Prinzip 4: **Die beste Dokumentation ist die, die sich selbst ::: {.callout-tip title="Prinzip" .column-margin}
schreibt.**]{.aside .principle}
Die beste Dokumentation ist die, die sich selbst aktualisiert.
:::
Eine Form der _Teil-Automatisierung_ ist es, die Dokumentation an den Eine Form der _Teil-Automatisierung_ ist es, die Dokumentation an den
Entwicklungs-Workflow zu koppeln. So sollte die Dokumentation im selben Entwicklungs-Workflow zu koppeln. So sollte die Dokumentation im selben
@ -717,10 +781,10 @@ mit Continuous Integration (CI) kann man sogar automatisierte Checks einrichten,
die z.B. prüfen, ob die Doku gebaut werden kann oder ob Docstrings fehlen. die z.B. prüfen, ob die Doku gebaut werden kann oder ob Docstrings fehlen.
Einige CI-Skripte generieren bei jedem Commit eine frische Doku (z.B. mittels Einige CI-Skripte generieren bei jedem Commit eine frische Doku (z.B. mittels
Sphinx) und veröffentlichen sie so ist garantiert, dass _die aktuelle Sphinx) und veröffentlichen sie so ist garantiert, dass _die aktuelle
Codeversion immer eine aktuelle Doku hat_. [Prinzip: **Dieses Level an Codeversion immer eine aktuelle Doku hat_.
Automation ist für kleine Projekte evtl. zu viel, aber das Prinzip
“Dokumentation versionieren” ist allgemeingültig, um die Entwicklungshistorie Schlussendlich muss aber das Level an Automation für jedes Projekt individuell
konsistent zu halten.**]{.aside} abgewogen werden.
## Best Practices, Vorlagen und Checklisten ## Best Practices, Vorlagen und Checklisten
@ -749,8 +813,8 @@ Dokumentation zu überprüfen:
jede intern, aber alles, was ein Nutzer aufrufen könnte). Für APIs: Sind jede intern, aber alles, was ein Nutzer aufrufen könnte). Für APIs: Sind
Parameter und Rückgaben erläutert? Parameter und Rückgaben erläutert?
5. **Validierung & Einschränkungen:** Werden Annahmen und Grenzen der Software 5. **Validierung & Einschränkungen:** Werden Annahmen und Grenzen der Software
genannt? Weiß ein*e Nutzer*in, welche Fälle nicht abgedeckt sind oder worauf genannt? Weiß ein\*e Nutzer\*in, welche Fälle nicht abgedeckt sind oder
zu achten ist (z.B. Datenqualität, maximale Größen)? Transparenz hier worauf zu achten ist (z.B. Datenqualität, maximale Größen)? Transparenz hier
verhindert Frustration. verhindert Frustration.
6. **Hintergrund & Referenzen:** Sind die wichtigsten konzeptionellen 6. **Hintergrund & Referenzen:** Sind die wichtigsten konzeptionellen
Hintergründe oder Referenzen angegeben? (Z.B. theoretische Grundlagen, Hintergründe oder Referenzen angegeben? (Z.B. theoretische Grundlagen,
@ -779,11 +843,7 @@ Diese Checkliste kann vor einem “Release” der Software durchgegangen werden,
die viele dieser Punkte abdecken). Sie hilft zu entscheiden, was noch die viele dieser Punkte abdecken). Sie hilft zu entscheiden, was noch
dokumentiert werden muss und was eventuell weggelassen werden kann. **Alles, was dokumentiert werden muss und was eventuell weggelassen werden kann. **Alles, was
für die obigen Punkte nicht relevant ist, kann man tendenziell aus der für die obigen Punkte nicht relevant ist, kann man tendenziell aus der
Hauptdokumentation herauslassen.** Beispielsweise interne Hauptdokumentation herauslassen.**
Code-Refaktorierungsdetails oder historische Anekdoten zur Entwicklung gehören
eher ins interne Changelog oder in Blog-Posts, nicht in die Nutzerdokumentation.
### Zusammenfassung Best Practices
## Fazit ## Fazit
@ -791,32 +851,22 @@ Die hier präsentierten Anforderungen und Empfehlungen bieten einen **Leitfaden
für die Dokumentation von Forschungssoftware** in den Digital Humanities. Sie für die Dokumentation von Forschungssoftware** in den Digital Humanities. Sie
sind darauf ausgerichtet, mit überschaubarem Aufwand maximale sind darauf ausgerichtet, mit überschaubarem Aufwand maximale
**Nachvollziehbarkeit, Langlebigkeit und Wiederverwendbarkeit** zu erreichen. **Nachvollziehbarkeit, Langlebigkeit und Wiederverwendbarkeit** zu erreichen.
Indem zentrale Inhalte (Ziele, Inputs/Outputs, Hintergrund, etc.) klar Indem zentrale Inhalte (Ziele, Inputs/Outputs, Hintergrund, etc.) klar
dokumentiert, ein nutzerfreundliches Format (README im Repo) gewählt, der Umfang dokumentiert, ein nutzerfreundliches Format (README im Repo) gewählt, der Umfang
fokussiert gehalten und hilfreiche Tools eingesetzt werden, kann die fokussiert gehalten und hilfreiche Tools eingesetzt werden, kann die
Dokumentation zur Stärke eines Projekts werden statt einem lästigen Anhängsel. Dokumentation zur Stärke eines Projekts werden statt einem lästigen Anhängsel.
Eine gute Dokumentation _erzählt eine klare Geschichte_ über die Software, So schließt sich der Kreis zwischen guter **Softwareentwicklung** und guter
anstatt den Leser mit irrelevanten Details zu verlieren. Mit den richtigen **Wissenschaft**[@Forschungsgemeinschaft2025LeitlinienzurSicherung, Leitlinie
Werkzeugen und Prinzipien an der Hand kann selbst unter Zeitdruck eine 12]: Dokumentation ist das Bindeglied, das Code und Erkenntnis transparent
qualitativ hochwertige Dokumentation entstehen zur Freude aller, die mit der verbindet. In der Praxis bedeutet dies zwar zusätzliche Arbeitsschritte, doch
Forschungssoftware arbeiten möchten. wie die Erfahrung zeigt, zahlen sich diese in Form von _Zeiteinsparung bei
Nutzern, höherer Zitierbarkeit und größerer Wirkung_ der Software aus. Mit
Wissenschaftlich fundierte Best Practices von _Ten Simple Rules for diesem Anforderungskatalog sind Forschende gut gerüstet, um ihre
Documenting Scientific Software_[@PrlicProcter2012TenSimpleRules] bis zu den Softwareprojekte dokumentationstechnisch auf ein solides Fundament zu stellen
_ENDINGS-Principles_[@EndingsPrinciples221] untermauern diesen Katalog. Die trotz knapper Zeit und ohne Informatikabschluss. Denn am Ende gilt: **Gut
Umsetzung dieser Richtlinien wird dazu beitragen, dass Forschungssoftware aus dokumentierte Forschungscode ist nachhaltige Forschung**.
den Geisteswissenschaften nicht nur kurzfristig von ihren Autor\*innen genutzt
wird, sondern langfristig von Dritten verstanden, validiert und weiterentwickelt
werden kann. So schließt sich der Kreis zwischen guter **Softwareentwicklung**
und guter **Wissenschaft**: Dokumentation ist das Bindeglied, das Code und
Erkenntnis transparent verbindet. In der Praxis bedeutet dies zwar zusätzliche
Arbeitsschritte, doch wie die Erfahrung zeigt, zahlen sich diese in Form von
_Zeiteinsparung bei Nutzern, höherer Zitierbarkeit und größerer Wirkung_ der
Software aus. Mit diesem Anforderungskatalog sind Forschende gut gerüstet, um
ihre Softwareprojekte dokumentationstechnisch auf ein solides Fundament zu
stellen trotz knapper Zeit und ohne Informatikabschluss. Denn am Ende gilt:
**Gut dokumentierte Forschungscode ist nachhaltige Forschung**.
## Tabellarische Übersicht der Dokumentations-Bestandteile {.appendix} ## Tabellarische Übersicht der Dokumentations-Bestandteile {.appendix}
@ -879,14 +929,32 @@ Community (kostenfrei; limitierte features) oder Enterprise-Linzenz"
(z.b. fehlende Dokumentation) hin. (z.b. fehlende Dokumentation) hin.
- [rst][]: Alternative zu Markdown. - [rst][]: Alternative zu Markdown.
[argparse]: ... [argparse]:
[Sphinx]: ... https://docs.python.org/3/library/argparse.html
[MkDocs]: ... "Der Argument-Parser der Python-Standardbibliothek"
[Doxygen]: ... [Sphinx]:
[Roxygen]: ... https://www.sphinx-doc.org
[Javadoc]: ... "Mächtiges Dokumentations-Generierungs-Werkzeug, welches hinter
[pdoc]: ... readthedocs.com steht."
[Docstring]: ... [MkDocs]:
https://www.mkdocs.org/
"Sehr einfacher und minimalistischer Generator für statische Websites aus Markdown"
[Doxygen]:
https://www.doxygen.nl/
"Generator um aus C/C++ Docstrings eine Dokumentation zu generieren"
[Roxygen]:
https://roxygen2.r-lib.org/
"Generator um aus R Docstrings eine Dokumentation zu generieren"
[Javadoc]:
https://www.oracle.com/java/technologies/javase/javadoc.html
"Generator um aus Java Docstrings eine
Dokumentation zu generieren"
[pdoc]:
https://pdoc.dev/
"Generator um aus Python Docstrings eine Dokumentation zu generieren"
---
[git]: https://git-scm.com "Das de-facto Standard-Versionskontrollsystem" [git]: https://git-scm.com "Das de-facto Standard-Versionskontrollsystem"
[graphviz]: [graphviz]:
https://graphviz.org/ https://graphviz.org/

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,3 @@
.bad-practice {
color: #888888;
}