Fehlermeldung
Kurz: Eine Nachricht, die ein System bei einem aufgetretenen Problem zurückgibt, um dessen Ursache zu benennen — im Netzwerkkontext z. B. eine ICMP-Meldung wie Destination Unreachable.
Genauer: Gute Fehlermeldungen sind spezifisch genug, um die Problemdiagnose zu beschleunigen, statt nur ein generisches “Fehler aufgetreten” auszugeben. Netzwerkprotokolle standardisieren Fehlermeldungen bewusst (feste Typnummern/Statuscodes), damit sie maschinell auswertbar und über Hersteller-/Systemgrenzen hinweg konsistent interpretierbar sind.
Im Detail
Die drei Grundanforderungen
Gute Fehlermeldungen erfüllen typischerweise drei Anforderungen: Sie benennen, WAS schiefgelaufen ist (nicht nur ein generisches “Fehler aufgetreten”), WO im System das Problem auftrat (welche Komponente, welcher Verarbeitungsschritt), und idealerweise auch, WARUM bzw. was als Nächstes zu tun ist, um das Problem zu beheben. Netzwerkprotokolle setzen das bewusst über feste, dokumentierte Codes statt frei formulierten Text um — jede ICMP-Fehlermeldung hat eine feste Typ- und Subcode-Nummer (siehe Destination Unreachable), jeder HTTP-Fehler einen dreistelligen Statuscode (404 = nicht gefunden, 500 = interner Serverfehler usw.), jeder SMTP-Fehler einen dreistelligen numerischen Code nach ähnlichem Muster. Der Vorteil gegenüber reinem Freitext: Programmcode kann zuverlässig auf eine feste Fehlernummer reagieren, ohne eine Textnachricht in irgendeiner Sprache (die sich zudem zwischen Softwareversionen ändern kann) parsen und interpretieren zu müssen.
Struktur von Statuscodes
Viele Protokolle gruppieren ihre Codes zusätzlich in aussagekräftige Kategorien, sodass sich selbst ein unbekannter, spezifischer Code grob einordnen lässt: Bei HTTP beginnen Client-Fehler mit “4” (der Anfragende hat etwas falsch gemacht, z. B. 404 Not Found), Server-Fehler mit “5” (das Problem liegt beim Server selbst, z. B. 500 Internal Server Error), Erfolg mit “2” (200 OK). Diese grobe Kategorisierung erlaubt es, auch bei einem bislang unbekannten Statuscode sofort die grundsätzliche Fehlerklasse zu erkennen, ohne die exakte Bedeutung jedes einzelnen Codes auswendig kennen zu müssen.
Menschen- vs. maschinenlesbare Fehlermeldungen
Ein wichtiger Unterschied besteht zwischen Fehlermeldungen, die primär für Menschen gedacht sind (ausführlich, erklärend, oft mit konkreter Handlungsempfehlung — “Bitte überprüfen Sie Ihre Internetverbindung und versuchen Sie es erneut”) und solchen, die primär für andere Systeme gedacht sind (kompakt, standardisiert, streng maschinenlesbar, ohne jede Ambiguität). In der Problemdiagnose begegnen einem meist zuerst die zweite Sorte (ein reiner Statuscode, ein ICMP-Typ, eine Fehlernummer in einem Log), und erst beim genaueren Hinsehen — in ausführlicheren Logs, mit Analyse-Tools wie Wireshark, oder in einer für Endnutzer aufbereiteten Oberfläche — die ausführlichere, für Menschen verständlich formulierte Variante. Gute Systeme übersetzen intern konsequent zwischen beiden: Ein interner Fehlercode wird geloggt und für Debugging genutzt, während dem Endnutzer eine freundlichere, allgemein verständliche Nachricht angezeigt wird, die trotzdem indirekt auf den internen Code verweist (z. B. über eine sichtbare Fehler-ID, die Support-Mitarbeiter dann im Log nachschlagen können).
Fallstrick: zu generische Fehlermeldungen
Ein häufiger Designfehler in eigener Software ist das Verschlucken oder Übergeneralisieren von Fehlerinformation — z. B. ein Catch-Block, der jeden möglichen Fehler pauschal als “Ein Fehler ist aufgetreten” ausgibt, ohne die eigentliche, ursprüngliche Fehlerursache irgendwo (zumindest im Log) festzuhalten. Das erschwert die spätere Fehlersuche erheblich, weil die eigentlich vorhandene, präzisere Information unwiederbringlich verloren geht.
Siehe auch: Meldung, ICMP-Typen, Destination Unreachable, Problemdiagnose