mirror of
https://scm.cms.hu-berlin.de/methodenlabor/doc_documentation.git
synced 2025-06-08 09:59:06 +00:00
911 lines
50 KiB
Markdown
911 lines
50 KiB
Markdown
---
|
||
tags:
|
||
- Writing
|
||
cssclasses:
|
||
- table-wide
|
||
- table-wrap
|
||
title:
|
||
"Anforderungskatalog für die Dokumentation von Forschungssoftware (Digital
|
||
Humanities)"
|
||
description: |
|
||
Ein Überblick und Best Practices für die Dokumantation von Forschungssoftware.
|
||
abstract: |
|
||
Diese Dokumentation fasst zusammen, welche wissenschaftlichen Konzepte,
|
||
Algorithmen und Theorien hinter der Software stehen. Sie dient dazu, den
|
||
Nutzer*innen zu helfen, die theoretischen Grundlagen nachvollziehbar zu machen.
|
||
lang: de
|
||
date: 2025-05-08
|
||
authors:
|
||
- name: Nicole Dresselhaus
|
||
affiliation:
|
||
- name: Humboldt-Universität zu Berlin
|
||
url: https://hu-berlin.de
|
||
email: nicole.dresselhaus@hu-berlin.de
|
||
correspondence: true
|
||
orcid: 0009-0008-8850-3679
|
||
roles:
|
||
- Conceptualization
|
||
- Supervision
|
||
- Validation
|
||
- "Writing – review & editing"
|
||
- name: GPT-4.5
|
||
url: https://chatgpt.com
|
||
affiliation:
|
||
- name: OpenAI
|
||
url: https://openai.com
|
||
roles:
|
||
- investigation
|
||
- "Writing – original draft"
|
||
citation: true
|
||
google-scholar: true
|
||
fileClass: authored
|
||
bibliography:
|
||
- background.bib
|
||
citation-style: springer-humanities-brackets
|
||
format:
|
||
html:
|
||
embed-resources: true
|
||
link-external-icon: true # externe links markieren
|
||
link-external-newwindow: true # externe linkn in neuem Fenster öffnen
|
||
toc-location: left # table of contents links (oder rechts)
|
||
toc: true
|
||
citation-location: document
|
||
reference-location: margin # fußnoten im Margin (falls gewünscht)
|
||
mermaid:
|
||
theme: default
|
||
theme:
|
||
- themes/nfdi.scss # theme aus ./themes/ auswählen
|
||
---
|
||
|
||
## Einleitung
|
||
|
||
Die **Dokumentation von Forschungssoftware** ist entscheidend, um
|
||
wissenschaftliche Ergebnisse nachvollziehbar und Software für andere nutzbar zu
|
||
machen. Insbesondere in den Digital Humanities (etwa in der
|
||
Geschichtswissenschaft) entwickeln Forschende neben Forschung und Lehre oft
|
||
eigene Software – meist unter hohem Zeitdruck und ohne formale Ausbildung in
|
||
Softwareentwicklung. Häufig bleibt die Dokumentation deshalb minimal oder
|
||
unvollständig, was dazu führt, dass andere (und sogar die Autor\*innen selbst)
|
||
viel Zeit aufwenden müssen, um den Code zu verstehen und anzuwenden. Dabei gilt
|
||
gute Dokumentation als zentrale Voraussetzung, um Forschungssoftware
|
||
**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
|
||
Vollzeit-Programmierer sind, und soll **wissenschaftlich fundierte Richtlinien**
|
||
für die Dokumentation von Forschungssoftware liefern. Die Empfehlungen
|
||
berücksichtigen Best Practices des Research Software Engineering (RSE) und
|
||
insbesondere die Prinzipien des _Endings-Projekts_ für digitale Langlebigkeit
|
||
[@EndingsPrinciples221]. Ziel ist es, ein praxistaugliches Gerüst
|
||
bereitzustellen, das – trotz Zeitknappheit – die wesentlichen
|
||
Dokumentationsaspekte abdeckt, um sowohl die **Nachvollziehbarkeit** der
|
||
Ergebnisse als auch eine **Weiterverwendung** der Software zu ermöglichen. Im
|
||
Folgenden werden die Anforderungen an Inhalt, Format und Umfang der
|
||
Dokumentation definiert, geeignete (teil-)automatisierte Dokumentationswerkzeuge
|
||
diskutiert und Best Practices in Form von Vorlagen und Checklisten vorgestellt.
|
||
|
||
## Inhaltliche Anforderungen an die Dokumentation
|
||
|
||
Ein zentrales Problem in der Dokumentation wissenschaftlicher Software ist oft
|
||
das fehlende _Big Picture_, also eine klare Darstellung des _Was_ und _Warum_.
|
||
Die Dokumentation sollte daher alle **Informationen abdecken, die zum Verstehen,
|
||
Nutzen und Weiterentwickeln der Software nötig sind**. Insbesondere sind
|
||
folgende Inhalte essenziell:
|
||
|
||
### Ziel und Zweck der Software (Statement of Need)
|
||
|
||
Beschreiben Sie _was die Software tut_ und _warum sie entwickelt wurde_. Nennen
|
||
Sie den wissenschaftlichen Zweck, das Forschungsproblem oder die Fragestellung,
|
||
die mit der Software adressiert wird, sowie die _Zielgruppe_ (wer soll sie
|
||
nutzen?). Dieser Kontext hilft anderen, den Nutzen der Software einzuschätzen.
|
||
Beispiel: _“Dieses Tool extrahiert Personen-Netzwerke aus historischen
|
||
Briefkorpora, um sozialwissenschaftliche Analysen zu ermöglichen.”_ Eine klare
|
||
Problem- und Zielbeschreibung richtet sich auch nach dem Umfeld ähnlicher
|
||
Lösungen – falls es bereits etablierte Tools gibt, sollte die Dokumentation die
|
||
eigene Herangehensweise einordnen (z. B. was die Software anders oder besser
|
||
macht).
|
||
|
||
### Input-/Output-Spezifikation und Datenbeschreibung
|
||
|
||
Dokumentieren Sie alle _Eingabeformate, Ausgabedaten und verwendeten
|
||
Datensätze_. Nutzer\*innen müssen wissen, welche Daten die Software erwartet
|
||
(Dateiformate, Schnittstellen, Parameter) und welche Ergebnisse sie produziert.
|
||
Idealerweise werden Beispiele angegeben: z. B. Beispiel-Dateien oder -Parameter
|
||
und die korrespondierende Ausgabe. Falls die Software mit bestimmten
|
||
Forschungsdaten arbeitet, beschreiben Sie diese Daten und ihre Struktur. Dies
|
||
umfasst die **Datenmodelle** (etwa wichtige Felder, deren Bedeutung und
|
||
kontrollierte Vokabulare) und Annahmen über die Daten. Gemäß den
|
||
ENDINGS-Prinzipien sollte die Datenstruktur in einem _statischen Dokument_
|
||
festgehalten und der Software beigelegt sein – so bleibt 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}
|
||
|
||
### Code-Abhängigkeiten und technische Voraussetzungen
|
||
|
||
Listen Sie alle _Abhängigkeiten_ (Dependencies) der Software auf. Dazu gehören
|
||
verwendete Programmiersprachen/Versionen, erforderliche Bibliotheken oder
|
||
Frameworks, und sonstige Systemvoraussetzungen (z. B. Betriebssystem,
|
||
Mindesthardware, Datenbank-Versionen). Wichtig ist, **wie** diese Abhängigkeiten
|
||
installiert werden können. Optimal ist eine automatisierte Installationsroutine
|
||
(z. B. ein `requirements.txt` für Python oder ein Paketmanager-Befehl). In jedem
|
||
Fall sollte die Dokumentation mindestens
|
||
Schritt-für-Schritt-Installationsanleitungen enthalten (inklusive evtl.
|
||
benötigter Vorkenntnisse, z. B. _“Python 3 erforderlich”_). [Beispiel:
|
||
_“Benötigt Python 3.9 und die Bibliotheken Pandas und NetworkX. Installation:
|
||
`pip install -r requirements.txt`.”_ Falls spezielle technische Voraussetzungen
|
||
bestehen – etwa Zugriff auf bestimmte Hardware, ein Hochleistungsrechner oder
|
||
große Speicherkapazitäten – sind diese zu nennen.]{.aside}
|
||
|
||
- **Typische Nutzungsszenarien und Workflows:** Zeigen Sie anhand von
|
||
_Beispielen_, wie die Software benutzt wird. Ein **Quickstart-Beispiel** senkt
|
||
die Einstiegshürde enorm. Dies kann z. B. eine Anleitung sein, wie man mit
|
||
wenigen Schritten von einer Eingabedatei zum gewünschten Ergebnis kommt
|
||
(_“Getting Started”_-Abschnitt). Beschreiben Sie typische Workflows in
|
||
nachvollziehbaren Schritten: Eingabe vorbereiten, Software-Befehl/GUI-Aktion
|
||
ausführen, Ausgabe interpretieren. Ggf. können mehrere Anwendungsfälle
|
||
skizziert werden (z. B. _“Analyse eines einzelnen Briefes”_ vs.
|
||
_“Batch-Verarbeitung eines gesamten Korpus”_). Diese Beispiele sollten
|
||
realistisch und möglichst _repräsentativ für wissenschaftliche Anwendungen_
|
||
sein. Nutzen Sie gerne kleine Datensamples oder Defaults, damit Nutzer die
|
||
Beispielschritte direkt ausprobieren können. Idealerweise werden
|
||
Code-Beispiele mit ausgegebenen Resultaten gezeigt (z. B. in Form von
|
||
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
|
||
|
||
Da es sich um Forschungssoftware handelt, sollten Sie den _wissenschaftlichen
|
||
Kontext_ offenlegen. Das heißt, erklären Sie die grundlegenden Methoden,
|
||
Algorithmen oder Modelle, die in der Software umgesetzt sind, zumindest in
|
||
Überblicksform. Verweisen Sie auf _relevante Publikationen_ oder Theorien, damit
|
||
andere die wissenschaftliche Grundlage nachvollziehen können. Beispielsweise:
|
||
_“Die Implementierung folgt dem Algorithmus von Müller et al. (2019) zur
|
||
Netzwerkanalyse historischer Korrespondenz.”_ Halten Sie diesen Abschnitt aber
|
||
prägnant – Details gehören in die Forschungsarbeit selbst. Wichtig ist, dass die
|
||
Dokumentation den **Brückenschlag zwischen Code und Forschung** herstellt. Da
|
||
viele Wissenschaftler\*innen zentrale Aspekte lieber in ihren Artikeln
|
||
dokumentieren, sollte in der Software-Dokumentation zumindest eine
|
||
Zusammenfassung mit Querverweis erfolgen. So wissen Nutzer\*innen, unter welchen
|
||
Annahmen oder Theorien das Tool funktioniert. [Dieser Hintergrundteil
|
||
unterscheidet Forschungssoftware-Dokumentation von rein kommerzieller
|
||
Dokumentation: Es geht nicht nur um _wie_ man das Tool benutzt, sondern auch
|
||
_warum_ es so funktioniert (Stichwort Nachvollziehbarkeit).]{.aside}
|
||
|
||
### Bekannte Limitationen, Annahmen und Fehlermeldungen
|
||
|
||
Geben Sie ehrlich Auskunft über die _Grenzen der Software_. Welche Fälle werden
|
||
**nicht** abgedeckt? Welche Annahmen über die Daten oder Anwendungsszenarien
|
||
werden getroffen? Dokumentieren Sie bekannte Probleme oder Einschränkungen
|
||
(z. B. _“funktioniert nur für Deutschsprachige Texte”, “maximale Datenmenge 1
|
||
Mio. Datensätze, da Speicherbegrenzung”_). Solche Hinweise verhindern
|
||
Fehlanwendungen und sparen Nutzern Zeit. Falls es bekannte **Bugs oder
|
||
Workarounds** gibt, sollten diese ebenfalls (etwa in einer FAQ oder einem
|
||
Abschnitt "Bekannte Probleme") erwähnt werden. Eine transparente Auflistung von
|
||
Limitationen erhöht die Vertrauenswürdigkeit und hilft anderen, die Ergebnisse
|
||
richtig einzuordnen. Auch **aussagekräftige Fehlermeldungen** im Programm selbst
|
||
sind eine Form von Dokumentation: Sie sollten nicht nur kryptisch abbrechen,
|
||
sondern dem/der Anwender\*in idealerweise mitteilen, was schiefging und 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
|
||
|
||
Obwohl viele Digital-Humanities-Tools primär von Einzelpersonen genutzt werden,
|
||
sollte dennoch angegeben werden, wie andere ggf. _zur Software beitragen oder
|
||
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
|
||
Autor (E-Mail) gehört dazu. Ebenso können **Community Guidelines** skizziert
|
||
werden: etwa Codierstandards oder ein Verhaltenskodex, falls Beiträge erwartet
|
||
werden. Für kleinere Projekte reicht oft ein Satz wie _“Beiträge durch Pull
|
||
Requests sind willkommen; bei 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.]{.aside}
|
||
|
||
### Projekt-Metadaten (Lizenz, Zitation, Version)
|
||
|
||
Teil der Dokumentation sind auch formale Informationen, die im Repository leicht
|
||
zugänglich sein sollten. **Lizenzinformationen** klären die rechtlichen
|
||
Bedingungen der Nutzung und Weiterverbreitung. Es ist Best Practice, eine
|
||
**LICENSE-Datei** beizulegen, aber auch in der README kurz zu erwähnen, unter
|
||
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
|
||
Nachnutzung nicht zu behindern. Zudem sollte angegeben werden, wie die Software
|
||
**zitiert** werden kann (z. B. DOI, Paper-Referenz). Ein eigener Abschnitt
|
||
_“Zitation”_ oder eine CITATION-Datei beschreibt, welche Publikation oder
|
||
welcher DOI bei Verwendung der Software in wissenschaftlichen Arbeiten anzugeben
|
||
ist. Dies erhöht die akademische Sichtbarkeit und stellt sicher, dass
|
||
Autor\*innen Credits für ihre Software bekommen
|
||
[@SmithEtAl2016Softwarecitation]. Schließlich ist es sinnvoll, eine
|
||
**Versionsnummer** der Software zu nennen (idealerweise in README und im Tool
|
||
selbst), damit Nutzer wissen, auf welche Ausgabe sich die Dokumentation bezieht
|
||
– insbesondere, wenn es im Laufe der Zeit Aktualisierungen gibt. Diese Praxis
|
||
entspricht auch den ENDINGS-Prinzipien, die verlangen, dass jede veröffentlichte
|
||
Version eindeutig erkennbar ist und zitiert werden kann.
|
||
|
||
### Zusammenfassung der inhaltlichen Anforderungen
|
||
|
||
Zusammengefasst sollte die Dokumentation alle **W-Fragen** beantworten: _Was_
|
||
tut die Software, _warum_ wurde sie geschrieben (wissenschaftlicher Zweck),
|
||
_wer_ soll sie nutzen, _wie_ wird sie benutzt (Inputs, Outputs, Abläufe),
|
||
_womit_ läuft sie (Umgebung/Abhängigkeiten), _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
|
||
|
||
Für Forschende ohne viel Ressourcen muss die Dokumentation **einfach zugänglich,
|
||
leicht pflegbar und ohne Spezialsoftware** erstellbar sein. Daher empfiehlt es
|
||
sich, auf **leichte Formate** und eine klare Struktur zu setzen:
|
||
|
||
### `README.md` als zentrales Dokument
|
||
|
||
Die Hauptdokumentation sollte als README in Markdown-Format im Hauptverzeichnis
|
||
des Code-Repositoriums liegen. Dieses README fungiert als “Startseite” des
|
||
Projekts und enthält idealerweise eine komprimierte Übersicht aller wichtigen
|
||
Punkte: Zweck der Software, Kurzbeschreibung, Installation, kurzer
|
||
Nutzungsbeispiel, Kontakt/Lizenz. 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 – ein Prinzip, das auch von
|
||
ENDINGS[@EndingsPrinciples221] propagiert wird (Dokumentation soll statisch und
|
||
zusammen mit den Daten/Code abgelegt werden).
|
||
|
||
### Strukturierte Unterteilung in weitere Dateien/Abschnitte
|
||
|
||
::: {.column-margin}
|
||
|
||
```plain
|
||
example-project/
|
||
├── README.md
|
||
├── CONTRIBUTING.md (optional)
|
||
├── CHANGELOG.md (optional)
|
||
├── CITATION.md (oder CITATION.cff)
|
||
├── LICENSE
|
||
├── data/ (optional)
|
||
│ └── sample_data.csv
|
||
├── docs/ (optional)
|
||
│ ├── INSTALL.md
|
||
│ └── USAGE.md
|
||
├── examples/ (optional)
|
||
│ └── example_workflow.ipynb
|
||
└── src/
|
||
├── script.py
|
||
└── module/
|
||
└── helper.py
|
||
```
|
||
|
||
Beispielhafter Struktur eines Code-Repositories
|
||
|
||
:::
|
||
|
||
Sollte die Dokumentation umfangreicher sein, ist es sinnvoll, sie in logisch
|
||
getrennte Abschnitte aufzuteilen. Dies kann innerhalb der README durch
|
||
Überschriften geschehen oder durch **zusätzliche [Markdown][]-Dateien** im
|
||
Repository (z. B. eine `INSTALL.md` für ausführliche Installationshinweise, eine
|
||
`USAGE.md` oder `TUTORIAL.md` für detaillierte Benutzeranleitungen, eine
|
||
`CHANGELOG.md` für Changelog etc.). Eine gängige Struktur ist z. B.:
|
||
|
||
- `README.md` – Überblick (Ziel, Installation, kurzes Beispiel, Lizenz/Zitation)
|
||
- `docs/` Verzeichnis mit weiteren .md-Dateien für tiefergehende Dokumentation
|
||
(optional)
|
||
- `CONTRIBUTING.md` – Hinweise für Beiträger (falls relevant)
|
||
- `LICENSE` – Lizenztext
|
||
- `CITATION.cff` oder `CITATION.md` – wie zu zitieren.
|
||
|
||
Diese Dateien sollten konsistent formatiert und benannt sein, damit sie leicht
|
||
auffindbar sind. Sie kommen ohne spezielle Tools aus – ein einfacher Texteditor
|
||
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
|
||
|
||
Strukturieren Sie die Dokumentation mit klaren Überschriften und Listen, damit
|
||
Leser schnell die gesuchten Informationen finden. Eine **logische Gliederung**
|
||
hilft unterschiedlichen Nutzergruppen gezielt das Relevante zu finden. Für
|
||
längere Dokumente kann ein Inhaltsverzeichnis oder eine Abschnittsübersicht am
|
||
Anfang nützlich sein. [Markdown][] bietet z. B. automatische TOC-Generierung auf
|
||
manchen Plattformen. Achten Sie darauf, pro Abschnitt nur zusammenhängende
|
||
Informationen zu behandeln (z. B. alles zu Installation an einem Ort) und
|
||
Wiederholungen zu vermeiden. Das Mantra _"Don’t Repeat Yourself"_ gilt auch für
|
||
Dokumentation.
|
||
|
||
### Beispiele, Codeblöcke und ggf. Abbildungen einbinden
|
||
|
||
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
|
||
zu weiterführenden Ressourcen ein, oder binden Sie bei Bedarf Abbildungen ein
|
||
(etwa ein Diagramm der Datenpipeline, ein Screenshot der Benutzeroberfläche,
|
||
etc.). Achten Sie dabei auf Dateigrößen und Formate (Bilder als PNG/JPG,
|
||
Diagramme wenn möglich als SVG für Langlebigkeit). Falls Diagramme der
|
||
Architektur oder Workflow-Abbildungen hilfreich sind, können diese mit simplen
|
||
Mitteln erstellt werden (zur Not handgezeichnet und abfotografiert, besser
|
||
jedoch mit Tools wie [mermaid.js][] Diagrammen in [Markdown][] oder
|
||
[graphviz][]). 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
|
||
|
||
Insgesamt gilt: Die Dokumentation sollte
|
||
|
||
- im gleichen Repository leben wie der Code
|
||
- klar strukturiert und in einem einfach handhabbaren Format vorliegen
|
||
- ohne spezielle Umgebung lesbar sein
|
||
|
||
Dieses Prinzip entspricht auch den FAIR- und RSE-Richtlinien, die fordern,
|
||
Software (und deren Doku) _auffindbar_ und _zugänglich_ zu machen, ohne Hürden.
|
||
Eine **gut gepflegte** README in [Markdown][] erfüllt diese Anforderungen in den
|
||
meisten Fällen optimal.
|
||
|
||
## Die Dokumentation selbst
|
||
|
||
Gerade weil Forschende wenig Zeit haben, muss die Dokumentation **effizient**
|
||
gestaltet sein – sie soll alle wichtigen Informationen enthalten, aber auch
|
||
nicht unnötig ausschweifen. Für typische Forschungssoftware-Projekte in den
|
||
Geisteswissenschaften wird ein Umfang von _maximal ca. 10 Seiten_ (bei Bedarf
|
||
verteilt auf mehrere Dateien) als ausreichend erachtet. Dieser Richtwert
|
||
verhindert, dass die Doku zu einer unüberschaubaren Abhandlung wird, und zwingt
|
||
zur Fokussierung auf das Wesentliche. Wichtig ist der **Inhalt, nicht die
|
||
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
|
||
Hilfe der Doku das Tool zum Laufen bringen und ein einfaches Beispiel
|
||
ausführen?**]{.aside .principle}
|
||
|
||
### Umfang und Fokus der Dokumentation
|
||
|
||
Ein effizienter Umfang lässt sich erreichen, indem sie **alles, was für
|
||
Nachvollziehbarkeit und Wiederverwendung nötig ist dokumentieren, und alles
|
||
andere skippen**. Negativbeispiele umfassen:
|
||
|
||
- jeder interne Programmiertrick wird erläutert – Quellcode-Kommentare richten
|
||
sich an Entwickler, während die Nutzerdokumentation sich auf Nutzung und
|
||
Kontext beschränkt
|
||
- seitenlange Theorieabhandlungen (verweisen Sie stattdessen auf Papers)
|
||
- generische Erklärungen bekannter Technologien (man muss Git oder Python nicht
|
||
in der Doku erklären, sondern kann referenzieren)
|
||
|
||
Halten Sie auch die Sprache prägnant:
|
||
|
||
- kurze Absätze
|
||
- Listen
|
||
- und einfache Sätze
|
||
|
||
erhöhen die Lesbarkeit.
|
||
|
||
Fachtermini aus dem jeweiligen wissenschaftlichen Bereich dürfen verwendet
|
||
werden, aber erklären/verlinken Sie sie, falls die Zielnutzer sie evtl. nicht
|
||
kennen.
|
||
|
||
Die Obergrenze von \~10 Seiten ist ein Richtwert. Umfangreiche Projekte könnten
|
||
etwas mehr benötigen, sehr kleine Tools kommen mit einer Seite aus. Das Ziel
|
||
ist, dass ein interessierter Nutzer die Dokumentation in überschaubarer Zeit
|
||
durchsehen kann.
|
||
|
||
Ein guter Test ist: **Kann eine neue Person in < 1 Stunde mit Hilfe der Doku das
|
||
Tool zum Laufen bringen und ein einfaches Beispiel ausführen?**
|
||
|
||
- Wenn ja, ist der Detailgrad angemessen
|
||
- Wenn die Person hingegen nach 10 Seiten oder mehr als 1 Stunde immer noch
|
||
nicht weiß, wie sie loslegen soll, muss die Doku fokussierter werden.
|
||
|
||
Fügen Sie zur Not eine kurze _Übersicht/Zusammenfassung_ am Anfang ein, die das
|
||
Wichtigste in Kürze nennt – viele Leser entscheiden in wenigen Minuten, ob sie
|
||
eine Software weiter betrachten oder nicht, und hier zählt der erste Eindruck.
|
||
|
||
### Priorisierung bei Zeitmangel
|
||
|
||
Dieser Katalog adressiert primär die Nutzerdokumentation (für Endnutzer und für
|
||
die Autoren selbst, wenn sie das Tool später wieder anfassen).
|
||
Entwicklerdokumentation (z. B. detaillierte API-Dokumente, Code-Kommentare,
|
||
technische Architektur) kann separat gehalten werden, sofern nötig, um den
|
||
Hauptnutzerfluss nicht zu überfrachten.
|
||
|
||
#### Minimaldokumentation: kurze Kommentare
|
||
|
||
Beginnen Sie mit einer Minimaldokumentation, die alle Schlüsselaspekte abdeckt
|
||
(_“keine Dokumentation”_ ist keine Option). _Good Enough
|
||
Practices_[@WilsonEtAl2017Goodenoughpractices] empfehlen, als ersten Schritt
|
||
zumindest einen **kurzen erklärenden Kommentar am Anfang jedes Scripts** oder
|
||
eine README mit ein paar Sätzen zu erstellen. Diese Hürde ist niedrig und bringt
|
||
bereits Nutzen – selbst wenn (noch) keine ausführliche Handbuch-Doku existiert.
|
||
Später kann die Dokumentation erweitert werden, insbesondere wenn die Software
|
||
in Kooperation entsteht oder mehr Nutzer gewinnt. Es hat sich gezeigt, dass
|
||
ausführliche Dokumentation oft erst entsteht, wenn ein echter Bedarf (z. B.
|
||
durch externe Nutzer) vorhanden ist. Daher: zögern Sie nicht, zunächst _klein_
|
||
anzufangen, aber stellen Sie sicher, dass zumindest die kritischen Informationen
|
||
sofort verfügbar sind (lieber ein 2-seitiges README heute, als das perfekte
|
||
30-seitige Handbuch in zwei Jahren, das evtl. nie geschrieben wird).
|
||
|
||
#### Verlinkte Dokumentation ist auch Dokumentation
|
||
|
||
Nutzen Sie **Verweise und vorhandene Ressourcen**. Wenn z. B. Ihr Tool auf einem
|
||
komplizierten Setup (Datenbank, Webserver) aufbaut, brauchen Sie nicht jede
|
||
Installationsoption im Detail in Ihrer Doku zu reproduzieren – verlinken Sie auf
|
||
offizielle Installationsanleitungen dieser Abhängigkeiten, und nennen Sie nur
|
||
Ihre spezifischen Konfigurationen und verlinken sie auf die Dokumentation des
|
||
Setup-Elementes für alles weitere. Ebenso können Tutorials oder Papers, die
|
||
schon existieren, als weiterführende Links angegeben werden, anstatt Inhalte
|
||
redundant zu erklären. Das entlastet Ihre Dokumentation und hält sie schlank.
|
||
|
||
#### Fokus auf Nutzer\*innen - nicht Entwickler\*innen
|
||
|
||
Stellen Sie sich beim Schreiben der Doku die verschiedenen _Nutzerrollen_ vor:
|
||
**“Zukünftiges Ich”**, **Kolleg\*innen**, **Fachforscher anderer Disziplin** und
|
||
ggf. **Software-Entwickler, die den Code erweitern**. Jede dieser Gruppen möchte
|
||
bestimmte Dinge wissen.
|
||
|
||
_Forscher\*innen_ fragen:
|
||
|
||
- Was kann das Tool?
|
||
- Wie benutze ich es?
|
||
- In welchem Kontext steht es?
|
||
|
||
_Entwickler\*innen_ fragen:
|
||
|
||
- Wie kann ich beitragen?
|
||
- Wie funktioniert es unter der Haube?
|
||
|
||
Priorisieren Sie zunächst die erstgenannten (Anwender) – deshalb Fokus auf
|
||
Zweck, Nutzung und Ergebnisse in der Hauptdoku. Detailinfos für Entwickler
|
||
(z. B. Code-Struktur, To-do-Liste) können separat oder später ergänzt werden.
|
||
Für viele kleine Forschungssoftware-Projekte sind ausführliche Entwicklerdokus
|
||
ohnehin nicht nötig – hier reicht es, den Code gut zu kommentieren und eventuell
|
||
eine grobe Architekturübersicht bereitzustellen. Konzentrieren Sie die
|
||
Hauptdokumentation darauf, **das Nutzen und Verstehen der Software von außen**
|
||
zu ermöglichen.
|
||
|
||
#### Und anschließend?
|
||
|
||
Wenn der Zeitmangel vorüber ist[^als ob DAS je der Fall wäre -.-], sollte man
|
||
nach und nach das folgende Kapitel umsetzen.
|
||
|
||
## Was macht eine gute Dokumentation aus
|
||
|
||
### Nutzungshilfen außerhalb der Dokumentation
|
||
|
||
Falls Ihre Software ein **Command-Line Interface (CLI)** hat, stellen Sie
|
||
sicher, dass eine eingebaute Hilfe vorhanden ist (z. B. Ausgabe bei `--help`).
|
||
Viele Nutzer greifen zunächst darauf zurück. Dieses Hilfemenü sollte kurz
|
||
erläutern, welche Subkommandos oder Optionen existieren. Moderne CLI-Frameworks
|
||
generieren solche Hilfen oft automatisch aus Ihrem Code (z. B. [argparse][] in
|
||
Python erzeugen `--help`-Texte). Nutzen Sie das, um konsistente Infos zu
|
||
garantieren.
|
||
|
||
Für **GUI-Anwendungen** sollten Tooltips, Hilfetexte in der Oberfläche oder
|
||
zumindest ein kleiner _Help_-Abschnitt im Handbuch vorhanden sein. Diese
|
||
eingebetteten Hilfen ersetzen keine ausführliche Dokumentation, aber sie senken
|
||
die Schwelle für alltägliche Fragen.
|
||
|
||
### Prinzipien: FAIR und ENDINGS
|
||
|
||
Beachten Sie, dass dieser Anforderungskatalog in Einklang mit den Prinzipien des
|
||
**Research Software Engineering**[@citation-needed] und den
|
||
**ENDINGS-Prinzipien**[@EndingsPrinciples221] steht[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. ]{.aside}.
|
||
|
||
Gute Dokumentation bedeutet daher u.a.
|
||
|
||
- Reproduzierbarkeit (Installation, Daten, Beispiele),
|
||
- Offenheit (Lizenz, offene Formate) und
|
||
- Nachhaltigkeit (Versionierung, Langlebigkeit der Doku).
|
||
|
||
Indem Sie also diesem Anforderungskatalog folgen, berücksichtigen Sie
|
||
automatisch wichtige anerkannte Prinzipien für gute wissenschaftliche
|
||
Softwarepraxis.
|
||
|
||
### Kontinuierliche Verbesserung und Feedback
|
||
|
||
Dokumentation ist kein einmaliges Ereignis, sondern ein fortlaufender Prozess.
|
||
Best Practice sind daher insbesondere:
|
||
|
||
- früh Feedback von Testnutzer\*innen oder Kolleg\*innen einzuholen: Lassen Sie
|
||
jemanden die Anleitung befolgen und hören Sie auf Stolpersteine. Oft zeigen
|
||
sich Lücken erst im Praxistest ("Ich wusste nicht, was ich nach Schritt X tun
|
||
soll" etc.).
|
||
- Planen Sie Zeiten ein, die Dokumentation nachzuführen, insbesondere wenn sich
|
||
die Software ändert. Ein lebendiges Projekt wird vielleicht Release für
|
||
Release die Dokumentation erweitern (evtl. neue Tutorials, neue Module
|
||
dokumentieren). Spätestens zum Release-Zeitpunkt sollten diese auffallen und
|
||
ggf. als Issues adressiert werden.
|
||
- Nutzen Sie auch _Issues_ für Dokumentation: Wenn Nutzer Fragen stellen,
|
||
überlegen Sie, ob die Antwort in die offizielle Doku übernommen werden sollte.
|
||
So wächst die Dokumentation organisch entlang der tatsächlichen Bedürfnisse.
|
||
|
||
### Positiv- und Negativbeispiele studieren
|
||
|
||
Schlussendlich ist ein guter Weg, die eigene Dokumentation zu verbessern, ist
|
||
ein Blick auf Projekte mit exzellenter Doku. In der _[Journal of Open Source
|
||
Software (JOSS)][JOSS]_ oder [_Journal of Open Research Software (JORS)_][JORS]
|
||
werden oft Softwareartikel veröffentlicht, bei denen die zugehörigen
|
||
Repositorien vorbildliche READMEs und Wikis haben. Diese können als Vorlage
|
||
dienen.
|
||
|
||
Achten Sie darauf, wie diese Projekte ihre README strukturieren, welche
|
||
Abschnitte vorhanden sind und welche nicht. Viele erfolgreiche Projekte haben
|
||
z. B. eine ähnliche Reihenfolge: Introduction, Installation, Usage,
|
||
Contributing, License, Citation – ein Muster, das sich bewährt hat.
|
||
|
||
Ebenso gibt es von Initiativen wie der Software Sustainability Institute
|
||
Blogposts mit Best Practices und sogar Vorlagen (Templates) für Dokumentation.
|
||
|
||
Nutzen Sie solche Ressourcen; sie ersparen einem das Rad neu zu erfinden.
|
||
Allerdings: Adaptieren Sie sie auf Ihre Bedürfnisse – nicht jede Vorlage passt
|
||
1:1.
|
||
|
||
## (Teil-)automatisierte Dokumentationswerkzeuge
|
||
|
||
Die Dokumentationslast lässt sich durch den Einsatz geeigneter Werkzeuge
|
||
erheblich senken. Gerade Forschende, die alleine programmieren, können von
|
||
**(teil-)automatisierter Dokumentation** profitieren, um konsistente und
|
||
aktuelle Unterlagen zu erhalten, ohne alles von Hand schreiben zu müssen. Im
|
||
Folgenden werden einige Tools und Möglichkeiten vorgestellt – samt Empfehlungen,
|
||
_wann_ ihr Einsatz sinnvoll oder notwendig ist:
|
||
|
||
### Jupyter Notebooks und literate programming
|
||
|
||
Ein mächtiges Werkzeug – gerade in datengetriebenen Geisteswissenschaften – sind
|
||
**Jupyter Notebooks** bzw. **R Markdown Notebooks**
|
||
[@KluyverEtAl2016JupyterNotebookspublishing]. Diese erlauben es, _ausführbaren
|
||
Code mit erklärendem Text und Visualisierungen_ in einem Dokument zu vereinen.
|
||
Für Dokumentationszwecke können Notebooks zweierlei leisten:
|
||
|
||
1. als **Tutorials/Beispiel-Workflows**, die Nutzer interaktiv nachvollziehen
|
||
können, und
|
||
2. als **Reproduzierbarkeits-Dokumentation** für analytische Prozesse.
|
||
|
||
Wenn Ihre Forschungssoftware z. B. eine Bibliothek ist, könnten Sie ein Notebook
|
||
bereitstellen, das einen typischen Anwendungsfall durchspielt (inklusive
|
||
Daten-Loading, Aufruf der Funktionen, Darstellung der Ergebnisse).
|
||
|
||
Notebooks senken die Hürde, weil Nutzer direkt experimentieren können, und
|
||
fördern transparente Forschung, da Code, Ergebnisse und Beschreibung
|
||
zusammenfließen. Sie sind daher sinnvoll, **wenn der Hauptanwendungsfall die
|
||
Durchführung von Analysen oder Datenverarbeitungen ist**, die man Schritt für
|
||
Schritt demonstrieren kann.
|
||
|
||
::: {.callout-warning}
|
||
|
||
Notebooks erfordern allerdings eine lauffähige Umgebung – das heißt, Sie müssen
|
||
darauf achten, dass alle Abhängigkeiten im Notebook deklariert sind und die
|
||
Daten zugänglich sind. Es hat sich gezeigt, dass Notebooks aus Publikationen oft
|
||
nicht ohne Weiteres 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
|
||
Anweisungen im Notebook). Ggf. kann man Notebooks auch in reine Markdown/HTML
|
||
exportieren und dem Repo beilegen, damit zumindest statisch die Inhalte
|
||
einsehbar sind.
|
||
|
||
:::
|
||
|
||
#### Wann sollten Sie Notebooks nutzen?
|
||
|
||
Notebooks sind quasi Goldstandard, um wissenschaftliche Analysen nachvollziehbar
|
||
zu machen. In Projekten, wo es um Data Science Workflows oder interaktive
|
||
Exploration geht, sollten Notebooks stark erwogen werden, während für ein reines
|
||
Tool/Script eine gut geschriebene README mit Beispielausgabe ausreichend sein
|
||
kann.
|
||
|
||
### Sphinx/MkDocs/Doxygen (statische Dokumentationswebseiten)
|
||
|
||
Für umfangreichere Projekte oder solche mit eigener Website kann es sinnvoll
|
||
sein, eine **Dokumentationswebsite** zu generieren. Tools wie _[Sphinx][]_
|
||
(zusammen mit ReadTheDocs für Hosting) oder _[MkDocs][]_ erlauben es, aus
|
||
[Markdown][]/[reStructuredText][rst]-Dateien einen ansprechend formatierten
|
||
HTML-Dokumentationssatz zu bauen. Der Vorteil ist, dass man eine durchsuchbare,
|
||
verlinkte Doku bekommt, oft mit schönem Layout und zusätzlicher Navigation. Mit
|
||
_Continuous Integration_ lassen sich diese Seiten bei jedem Git-Push automatisch
|
||
aktualisieren. [Prinzip 2: **ab einer Codebasis `> einige tausend Zeilen` oder
|
||
`>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
|
||
sind[@EndingsPrinciples221] – d.h. sie funktionieren ohne Server-Backends und
|
||
bleiben auch offline nutzbar.
|
||
|
||
Solche Tools sind **sinnvoll, wenn die Dokumentation sehr groß oder öffentlich
|
||
weit verbreitet** ist – z. B. wenn Ihre Software von vielen genutzt wird und Sie
|
||
ein professionelles Auftreten wünschen, oder wenn Sie die Doku als PDF
|
||
veröffentlichen möchten. [In kleinen DH-Projekten ist es oft nicht nötig, extra
|
||
eine Webseite zu hosten; dennoch kann Sphinx auch lokal HTML/PDF erzeugen, was
|
||
man dem Repo beilegen kann.]{.aside}
|
||
|
||
#### Wann sollten Sie eine statische Website generieren?
|
||
|
||
**Verpflichtend** ist so ein Tool selten, höchstens wenn Förderprogramme oder
|
||
Journals ein dokumentationsseitiges HTML-Manual verlangen. Wenn Sie jedoch
|
||
planen, Ihre Software z. B. über Jahre zu pflegen und ggf. einem Journal wie
|
||
JOSS vorzustellen, dann erwartet die Community meist, dass zumindest eine
|
||
Sphinx/Doxygen-Doku für die API (s.u.) existiert.
|
||
|
||
### Docstrings und API-Dokumentationsgeneratoren
|
||
|
||
Nutzen Sie die Möglichkeit, Dokumentation _direkt im Quellcode_ unterzubringen,
|
||
z. B. in Form von **[Docstrings][Docstring]** (mehrzeilige Strings in
|
||
Funktionen/Klassen bei Python, [Roxygen][]-Kommentare in R,
|
||
[Javadoc][]-Kommentare in Java, etc.). Diese dienen doppelt: Zum einen
|
||
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
|
||
verarbeitet werden. Idealerweise dokumentieren Sie _jede wichtige **oder** von
|
||
außen sichtbare Funktion, Klasse oder Modul_ mit einem kurzen Docstring, der
|
||
Zweck, Parameter, Rückgaben und ggf. Beispiele enthält. Für kleine Scripte
|
||
genügen ggf. Modul- oder Abschnittskommentare.[Prinzip 3: **Benutzt jemand die
|
||
Software nur braucht es keine API-Dokumentationen; wird die Software aber
|
||
woanders eingebunden ist dieses angeraten.**]{.aside .principle}
|
||
|
||
Wichtig ist Konsistenz im Stil – halten Sie sich an Konventionen Ihres
|
||
Ökosystems (z. B. **[Google Style Guide](https://google.github.io/styleguide/)**
|
||
für Python Docstrings oder entsprechende Formatvorgaben für andere Sprachen).
|
||
Verlinken sie diese Styleguides in der README. Sogenannte Linting-Tools, wie
|
||
etwa [pylint][], können die Verwendung erzwingen.
|
||
|
||
Mit Tools, wie **[Sphinx][]**, **[Javadoc][]**, **[Doxygen][]**,
|
||
**[MkDocs][]**,**[pdoc][]** und vielen weiteren, können aus Docstrings
|
||
automatisiert Webseiten oder PDF-Handbücher generiert werden. Sie lesen z. B.
|
||
die Python-Docstrings und erzeuge daraus strukturiert eine Dokumentation; Häufig
|
||
kann über Erweiterungen auch dritte Dokumentation direkt eingebunden und
|
||
verlinkt werden.
|
||
|
||
Der Einsatz solcher Tools ist besonders dann sinnvoll, wenn Ihre
|
||
Forschungssoftware über eine _Programmierschnittstelle (API)_ verfügt, die von
|
||
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
|
||
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
|
||
|
||
[Prinzip 4: **Die beste Dokumentation ist die, die sich selbst
|
||
schreibt.**]{.aside .principle}
|
||
|
||
Eine Form der _Teil-Automatisierung_ ist es, die Dokumentation an den
|
||
Entwicklungs-Workflow zu koppeln. So sollte die Dokumentation im selben
|
||
Versionskontrollsystem (Git) liegen wie der Code, damit Änderungen synchron
|
||
nachverfolgt werden. Es empfiehlt sich, bei jedem größeren Code-Update zu
|
||
prüfen, ob die Doku noch stimmt (das kann man sich z. B. als Punkt in
|
||
Pull-Request-Reviews notieren oder per Issue-Template abfragen). Für Projekte
|
||
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.
|
||
Einige CI-Skripte generieren bei jedem Commit eine frische Doku (z. B. mittels
|
||
Sphinx) und veröffentlichen sie – so ist garantiert, dass _die aktuelle
|
||
Codeversion immer eine aktuelle Doku hat_. [Prinzip: **Dieses Level an
|
||
Automation ist für kleine Projekte evtl. zu viel, aber das Prinzip
|
||
“Dokumentation versionieren” ist allgemeingültig, um die Entwicklungshistorie
|
||
konsistent zu halten.**]{.aside}
|
||
|
||
## Best Practices, Vorlagen und Checklisten
|
||
|
||
Um zu entscheiden, _was_ dokumentiert wird (und was _nicht_), helfen etablierte
|
||
**Best Practices** sowie Vorlagen aus der Community. Im Folgenden sind einige
|
||
bewährte Richtlinien zusammengefasst.
|
||
|
||
### Checkliste für die Mindest-Dokumentation
|
||
|
||
Die folgenden Punkte fassen zusammen, was eine gute Dokumentation mindestens
|
||
enthalten sollte. Sie können auch als **Qualitäts-Checkliste** dienen, um Ihre
|
||
Dokumentation zu überprüfen:
|
||
|
||
1. **Zielklärung:** Ist der Zweck der Software klar benannt und der
|
||
wissenschaftliche _Need_ begründet? (Falls nein, ergänzen: _Warum existiert
|
||
dieses Tool?_)
|
||
2. **Installation & Voraussetzungen:** Sind alle Schritte, um die Software
|
||
lauffähig zu machen, dokumentiert (inkl. Dependencies, evtl. mit
|
||
Installationsbefehlen)? Ist ersichtlich, welche Umgebung nötig ist (OS,
|
||
Hardware)?
|
||
3. **Grundlegende Nutzung:** Gibt es eine Anleitung oder Beispiele, wie man die
|
||
Software verwendet (Eingabe -> Ausgaben)? Ist mindestens ein typischer
|
||
Workflow beschrieben, idealerweise mit Beispielinput und -output?
|
||
4. **Optionen & Schnittstellen:** Falls relevant – sind alle wichtigen
|
||
Funktionen, Befehlsoptionen oder API-Methoden dokumentiert? (Nicht unbedingt
|
||
jede intern, aber alles, was ein Nutzer aufrufen könnte). Für APIs: Sind
|
||
Parameter und Rückgaben erläutert?
|
||
5. **Validierung & Einschränkungen:** Werden Annahmen und Grenzen der Software
|
||
genannt? Weiß ein*e Nutzer*in, welche Fälle nicht abgedeckt sind oder worauf
|
||
zu achten ist (z. B. Datenqualität, maximale Größen)? Transparenz hier
|
||
verhindert Frustration.
|
||
6. **Hintergrund & Referenzen:** Sind die wichtigsten konzeptionellen
|
||
Hintergründe oder Referenzen angegeben? (Z. B. theoretische Grundlagen,
|
||
Algorithmen, Literaturverweise). Das muss kein Essay sein, aber ein paar
|
||
Sätze + Referenzen schaffen Vertrauen in die wissenschaftliche Fundierung.
|
||
7. **Kontakt & Weiterführung:** Ist angegeben, wie man Hilfe bekommt oder Fehler
|
||
melden kann (Issue-Tracker, E-Mail)? Gibt es Hinweise für Beiträge (falls
|
||
erwünscht) oder zumindest die Information, wer die Autor\*innen sind?
|
||
8. **Rechtliches & Zitation:** Liegt die Lizenz bei und wird sie genannt? Sind
|
||
Infos zum Zitieren der Software vorhanden (z. B. “Bitte zitieren Sie DOI
|
||
XYZ”)? Das stellt sicher, dass die Software nachnutzbar _und_ akademisch
|
||
kreditiert wird.
|
||
9. **Aktualität & Version:** Entspricht die Dokumentation der aktuellen
|
||
Softwareversion? (Check: Versionsnummern, Datumsangaben). Veraltete Doku kann
|
||
schlimmer sein als keine – planen Sie also ein, die Doku mit jedem Release
|
||
kurz zu überprüfen.
|
||
10. **Konsistenz & Stil:** Wird ein einheitlicher Ton und Stil durchgehalten?
|
||
(z. B. durchgehende Verwendung gleicher Begriffe für Konzepte, Sprache
|
||
entweder Deutsch oder Englisch einheitlich je nach Zielgruppe). Kleinliche
|
||
Fehler (Tippfehler, kaputte Links) sind auszumerzen, da sie Nutzer
|
||
abschrecken.
|
||
|
||
Diese Checkliste kann vor einem “Release” der Software durchgegangen werden,
|
||
ähnlich einem Review-Prozess (vgl.
|
||
[JOSS Review-Kriterien](https://joss.readthedocs.io/en/latest/review_checklist.html),
|
||
die viele dieser Punkte abdecken). Sie hilft zu entscheiden, was noch
|
||
dokumentiert werden muss und was eventuell weggelassen werden kann. **Alles, was
|
||
für die obigen Punkte nicht relevant ist, kann man tendenziell aus der
|
||
Hauptdokumentation herauslassen.** Beispielsweise interne
|
||
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
|
||
|
||
Die hier präsentierten Anforderungen und Empfehlungen bieten einen **Leitfaden
|
||
für die Dokumentation von Forschungssoftware** in den Digital Humanities. Sie
|
||
sind darauf ausgerichtet, mit überschaubarem Aufwand maximale
|
||
**Nachvollziehbarkeit, Langlebigkeit und Wiederverwendbarkeit** zu erreichen.
|
||
Indem zentrale Inhalte (Ziele, Inputs/Outputs, Hintergrund, etc.) klar
|
||
dokumentiert, ein nutzerfreundliches Format (README im Repo) gewählt, der Umfang
|
||
fokussiert gehalten und hilfreiche Tools eingesetzt werden, kann die
|
||
Dokumentation zur Stärke eines Projekts werden statt einem lästigen Anhängsel.
|
||
|
||
Eine gute Dokumentation _erzählt eine klare Geschichte_ über die Software,
|
||
anstatt den Leser mit irrelevanten Details zu verlieren. Mit den richtigen
|
||
Werkzeugen und Prinzipien an der Hand kann selbst unter Zeitdruck eine
|
||
qualitativ hochwertige Dokumentation entstehen – zur Freude aller, die mit der
|
||
Forschungssoftware arbeiten möchten.
|
||
|
||
Wissenschaftlich fundierte Best Practices – von _Ten Simple Rules for
|
||
Documenting Scientific Software_[@PrlicProcter2012TenSimpleRules] bis zu den
|
||
_ENDINGS-Principles_[@EndingsPrinciples221] – untermauern diesen Katalog. Die
|
||
Umsetzung dieser Richtlinien wird dazu beitragen, dass Forschungssoftware aus
|
||
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}
|
||
|
||
::: {.column-page-right}
|
||
|
||
Table: _Empfohlene Dokumentationselemente, Inhalte und Umfang._ Diese Übersicht
|
||
kann als Vorlage dienen, welche Komponenten ein Dokumentationspaket enthalten
|
||
sollte. Je nach Projekt können einige Elemente wegfallen oder kombiniert werden
|
||
– entscheidend ist, dass die Kerninformationen (siehe oben) nicht fehlen.
|
||
|
||
| **Dokuelement** | **Inhalt/Purpose** | **Format/Ort** | **Umfang** |
|
||
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------- | ------------------------------------- |
|
||
| **README (Hauptdoku)** | Zweck der Software; Kurzbeschreibung; Installationsanleitung; einfaches Nutzungsbeispiel; Lizenz- und Kontaktinfo | Markdown im Root des Repos (statisch versioniert) | 1–2 Seiten |
|
||
| **Eingabe/Ausgabe-Guide** | Beschreibung der erwarteten Inputs (Datenformat, Parameter) und generierten Outputs (Dateien, Berichte) inkl. Beispielen | Teil der README oder separate Datei (z.B. USAGE.md) | 1 Seite (mit Beispielen) |
|
||
| **Wissenschaftlicher Hintergrund** | Erläuterung der Methode, Theorie, Algorithmen; Verweise auf Literatur | README-Abschnitt "Hintergrund" oder separate Doku (BACKGROUND.md) | 0.5–1 Seite (plus Referenzen) |
|
||
| **Bekannte Limitationen** | Auflistung von Einschränkungen, Annahmen, bekannten Problemen; ggf. Workarounds | README-Abschnitt "Limitations" oder FAQ.md | 0.5 Seite |
|
||
| **Beispiel-Workflow (Tutorial)** | Schritt-für-Schritt Anleitung mit einem realistischen Anwendungsfall (ggf. mit Code und Screenshot) | Jupyter Notebook (`.ipynb`) im Repo `examples/` Ordner oder Markdown in docs/ | 1–3 Seiten / entsprechend Zellen |
|
||
| **API-Referenz** | Technische Dokumentation von Funktionen/Klassen für Entwickler\*innen | Automatisch generiert aus Docstrings (z.B. Sphinx in `docs/` Ordner, HTML/PDF Ausgabe) | Je nach Codegröße (ggf. umfangreich) |
|
||
| **CONTRIBUTING** | Anleitung für Beitragswillige: Code Style, Workflow, Tests, Kontakt | CONTRIBUTING.md im Repo | 0.5–1 Seite |
|
||
| **LICENSE** / **CITATION** | Rechtliche Infos (Lizenztext); Zitationsleitfaden (Bevorzugte Zitierweise, DOI) | Jeweils eigene Datei im Repo (Plain Text/Markdown) | Kurz (Standardtext bzw. Referenz) |
|
||
| **Release-Information** | Versionshinweise, Änderungsprotokoll (Changelog) | CHANGELOG.md oder Releases auf GitHub | fortlaufend pro Version (Stichpunkte) |
|
||
|
||
:::
|
||
|
||
## Referenz Websites/Services {.appendix}
|
||
|
||
- [GitHub][]: Seite mit sehr vielen Open-Source-Projekten, die git verwenden.
|
||
Gehört zu Microsoft
|
||
- [GitLab][]: Open-Source-Lösung für selbst gehostete Projektverwaltung (git,
|
||
issue-tracking, …). Community (kostenfrei; limitierte features) oder
|
||
Enterprise-Linzenz
|
||
- [JOSS][]: The Journal of Open Source Software is a developer friendly, open
|
||
access journal for research software packages.
|
||
- [JORS][]: The Journal of Open Research Software features peer reviewed
|
||
Software Metapapers describing research software with high reuse potential.
|
||
|
||
[GitHub]:
|
||
https://github.com
|
||
"Seite mit sehr vielen Open-Source-Projekten, die git verwenden. Gehört zu Microsoft"
|
||
[GitLab]:
|
||
https://gitlab.com
|
||
"Open-Source-Lösung für selbst gehostete Projektverwaltung (git, issue-tracking, …).
|
||
Community (kostenfrei; limitierte features) oder Enterprise-Linzenz"
|
||
[JOSS]: https://joss.theoj.org/ "The Journal of Open Source Software"
|
||
[JORS]:
|
||
https://openresearchsoftware.metajnl.com/
|
||
"The Journal of Open Research Software features peer reviewed Software Metapapers describing research software with high reuse potential."
|
||
|
||
## Referenz Software {.appendix}
|
||
|
||
- [git][]: Versionskontrollsystem
|
||
- [graphviz][]: Textuelle darstellung von Graphen; Standard-Unix-Tool; Auf
|
||
vielen Systemen verfügbar und rendert zu pdf/svg
|
||
- [Markdown][]: Mittlerweile DER Standard bei plaintext-Dokumenten
|
||
- [mermaid.js][]: Sprache für Diagramme; kann automatisiert (z.b. durch pandoc,
|
||
javascript im HTML, …) in Bilder gewandelt werden
|
||
- [pandoc][]: DER Konverter für Dokumente. Kann sehr viel in Markdown wandeln
|
||
und hieraus HTML/PDF u.ä. erstellen
|
||
- [pylint][]: Linting-Tool für Python. Formatiert Code und weist auf Probleme
|
||
(z.b. fehlende Dokumentation) hin.
|
||
- [rst][]: Alternative zu Markdown.
|
||
|
||
[argparse]: ...
|
||
[Sphinx]: ...
|
||
[MkDocs]: ...
|
||
[Doxygen]: ...
|
||
[Roxygen]: ...
|
||
[Javadoc]: ...
|
||
[pdoc]: ...
|
||
[Docstring]: ...
|
||
[git]: https://git-scm.com "Das de-facto Standard-Versionskontrollsystem"
|
||
[graphviz]:
|
||
https://graphviz.org/
|
||
"Textuelle darstellung von Graphen; Standard-Unix-Tool; Auf vielen Systemen verfügbar und rendert zu pdf/svg"
|
||
[Markdown]:
|
||
https://en.wikipedia.org/wiki/Markdown
|
||
"Mittlerweile DER Standard bei plaintext-Dokumenten"
|
||
[mermaid.js]:
|
||
https://mermaid.js.org/
|
||
"Sprache für Diagramme; kann automatisiert (z.b. durch pandoc, javascript im HTML, …) in Bilder gewandelt werden"
|
||
[pandoc]:
|
||
https://pandoc.org/MANUAL.html#pandocs-markdown
|
||
"DER Konverter für Dokumente. Kann sehr viel in Markdown
|
||
wandeln und hieraus HTML/PDF u.ä. erstellen"
|
||
[pylint]:
|
||
https://www.pylint.org/
|
||
"Linting-Tool für Python. Formatiert Code und weist auf Probleme (z.b. fehlende Dokumentation)
|
||
hin."
|
||
[rst]: https://en.wikipedia.org/wiki/ReStructuredText "Alternative zu Markdown."
|
||
|
||
## Bibliographie {.appendix}
|