Fehlerbehandlung in Computerprogrammen
Programme können durch vielfältige Einflüsse aus dem Tritt gebracht werden:
- ungültige Eingabe
- Datenbankproblem
- Netzwerkstörung
- unentdeckter Programmierfehler
- ...
Wenn bei der Programmierung solche Fehlersituationen außer Acht gelassen werden, kann alles Mögliche passieren:
- Programm beendet sich abrupt – alle ungespeicherten Eingaben sind verloren.
- Serverausfall
- Am Monatsende bucht das Programm beim Kontoabschluss ein paar Cent zu viel – keiner weiß, woher diese Cent kommen.
Besser:
- Fehler abfangen
- aussagekräftige Fehlermeldungen
- Logfiles
- Auf Webservern finde ich es sehr hilfreich, mir im Fehlerfall eine E-
Mail schicken zu lassen: Wenn etwas Unerwartetes passiert, bin ich damit schnell und umfassend informiert.
Die Fehlerbehandlung umfasst häufig mehr Programmzeilen als der Code, der im Normalfall ausgeführt wird. Aber der Aufwand zahlt sich aus, wenn man dadurch die Fehlersuche erleichtert und robuste Software erhält.
Kritik
Nicht alle teilen meine Begeisterung für eine gute Fehlerbehandlung. Was ich in meiner Berufspraxis zu hören bekam:
- "Wir sollten die Fehler lieber an der Wurzel bekämpfen, sodass sie gar nicht mehr auftreten." – Es wäre naiv, zu glauben, alle Fehler finden zu können und dass Fehlerbehandlung daher überflüssig ist.
- "Unerwartete Fehlersituationen zu erkennen, ist äußerst schwierig." – Falsch: Oft reicht es schon, ohnehin anfallende Fehlermeldungen nicht zu verwerfen bzw. die Rückmeldungen von Funktionen auf einen Fehlerstatus zu überprüfen.
- "Da kann gar kein Fehler passieren." – Ich weiß nicht, wie oft ich schon etwas gesehen habe, das "gar nicht passieren kann".
- "Die Logfiles schaut ohnehin keiner durch." – Braucht auch keiner, solange alles perfekt funktioniert. Aber wenn ein rätselhafter Fehler aufzuklären ist, sind die Logfiles Gold wert.
- "Fehlerbehandlung macht den Programmcode unübersichtlich." – Dieser Einwand ist leider nicht ganz von der Hand zu weisen und vermutlich der wahre Grund, wieso sich viele Programmierer so gegen Fehlerbehandlung wehren.
Ich habe eine Komponente geschrieben, mit der ein Webserver Inhalte von einem anderen Server laden kann, und wenn das Laden fehlschlägt, liefert die Komponente die letzte gute Kopie aus einem Zwischenspeicher (Cache). Ohne Logging und Fehlerbehandlung wäre das eine sehr einfache Sache, aber weil ich möglichst alle Situationen abfangen und Funktionen zur Überwachung haben wollte, sind es über 1000 Zeilen Code geworden!