Kompilett
Ein Kompilett ist lauffähiges Minimalbeispiel, also eine minimale und oft kompilierbare Übersetzungseinheit (also ein Quelltext, ein Programm in einer Programmiersprache), die ein zu diskutierendes Problem zeigt. Das Wort ist eine Verbindung von „kompilierbar“ und „komplett“.
Aus einem Kompilett soll alles Überflüssige entfernt worden sein, weil dies die Lesbarkeit und Verständlichkeit erhöht und dadurch die Antworten wahrscheinlicher werden. Überflüssig ist alles, das nicht unbedingt nötig ist, um das Problem zu sehen.
Andererseits soll in einem Kompilett alles Nötige enthalten sein, so daß es ohne weiteres in eine Datei kopiert und verwendet (also gegebenenfalls kompiliert) werden kann.
Falls das Problem ein Laufzeiteffekt ist, sollte das Kompilett ohne weitere Veränderungen übersetzt werden können, ohne daß dabei Fehler angezeigt werden (nach Möglichkeit sollten auch keine Warnungen angezeigt werden).
Falls das Problem in einer bestimmten Warnung oder Fehlermeldung beim Übersetzen besteht, dann sollte das Kompilett diese Fehlermeldung oder Warnung hervorrufen und ansonsten möglichst wenig andere Fehlermeldungen und Warnungen.
Details
- Bei einem Fehlverhalten zur Laufzeit sollte beschrieben werden, was das erwünschte (richtige) Verhalten ist und was das beobachtete (tatsächliche) Verhalten ist. Beide Beschreibungen sollten explizit mit „erwünschtes Verhalten“ und „beobachtetes Verhalten“ betitelt werden.
- Eventuelle Fehlermeldungen des Compilers oder Programms sollten möglichst unverändert (kopiert) beigegeben werden. Sehr lange Fehlerberichte können dabei aber gekürzt werden (meist sind die ersten Meldungen wichtiger als die folgenden).
- Die verwendete Version der Implementation der Programmiersprache und des Betriebssystems sollte möglichst genau angegeben werden.
- Kommandozeilen zum Aufruf von Übersetzer und Ausführer sollten dann angegeben werden, wenn sie für das Nachvollziehen das Effekts wichtig sind.
- Nötigenfalls sollten bei interaktiven Programmen die Eingaben und Bedienabläufe zum Reproduzieren des Fehlers beschrieben werden, wenn der Fehler nur nach bestimmten Bedienschritten auftritt.
- Wenn Bezüge auf Bibliotheken außerhalb der Standardbibliothek der verwendeten Programmiersprache unvermeidlich sind, dann sollten die benötigten Bibliotheken mit Bezugsquellen genau und vollständig angegeben werden.
- Falls weitere Dateien benötigt werden, sollten diese soweit wie möglich von dem Kompilett selber am Anfang des Laufs erzeugt werden („Kompilettarchiv“). So können auch binäre Dateien am Anfang der Programmausführung durch einen sie generierenden Quelltext erzeugt werden. Auch diese Dateien sollten so klein wie möglich sein.
- Falls die Ausgaben von Zeichen in Zusammenhang mit einer bestimmten Codierung diskutiert werden sollen, sollte die Ausgabe in eine Datei gelenkt und eine hexadezimale Wiedergabe des Dateiinhalts mitgeteilt werden. Falls es um die Ausgabe von Zeichen in einer Konsole geht, sollte die von dieser Konsole verwendete Codierung ermittelt und mitgeteilt werden. Die Kodierungseinstellungen aller verwendeten Programme (wie Quelltexteditor und Übersetzer [Compiler]) sollten auch mitgeteilt werden.
- Falls Meldungen sich auf bestimmte Zeilennummern beziehen sollte darauf geachtet werden, daß der Quelltext beim Versenden als Kompilett nicht so umformatiert wird, daß sich die Zeilennummern ändern und daß deutlich erkennbar ist, wo die Zeile 1 des Quelltextes ist. Falls es unvermeidlich ist, daß ein Quelltext länger als 40 Zeilen ist, sollten die in der Fehlermeldung genannten Zeilen durch einen Kommentar, wie beispielsweise »/* Zeile 82 */« gekennzeichnet werden, falls sie nicht schon durch ein Zitat in der Fehlermeldung eindeutig identifiziert werden können. Zeilennummern sollten aber nicht so hinzugefügt werden, daß der Quelltext dann nicht mehr kompilierbar ist.
Java
- Damit das Kompilett als eine einzige Quelldatei übersetzt werden kann, sollten möglichst alle Klassendeklarationen (außer der main -Klasse) ohne »public« vorkommen.
Bezeichnungen
- Alternative deutschsprachige Bezeichnungen für „Kompilett“: „lauffähiges Minimalbeispiel“.
- Englische Bezeichnungen für „Kompilett“: “SSCCE ” – “short self-contained correct compilable example ”, “MWE ” - “minimal working example ” und “ME ” - “minimal example ”.