Monthly Archives: April 2017

Fehlerbehandlung ist doch quatsch

Da stöbert man durch die aktuellen Artikel auf Nachrichten-Seiten und schwupps wundert man sich über die Fehler in der Fehlerbehandlung die viele Programmierer gerne machen.

Auch wenn ich grundsätzlich natürlich verstehen kann warum man die Fehlerausgabe, in diesem Beispiel in PHP, aktiviert so ist doch immer die Frage warum auf dem Produktivsystem und nicht in einem “identischen” Testsystem (Also einem Testsystem mit der gleichen Version und fast identischen Konfiguration).

Denn allein dadurch lassen sich schon solche Probleme wie in dem verlinkten Artikel beschrieben sicher umgehen.

Aber noch viel schlimmer als die von dem Autor des Artikels begangenen Fehler finde ich persönlich die Empfehlungen und Anmerkungen in den Kommentaren. Das geht von der Bezeichnung des Autors als “Unwissenden” bis hin zum “Bashing” der gewählten Programmiersprache.

Dabei ist die Lösung für dieses Problem doch ganz simpel.

Wenn ich mit der Programmierung einer neuen Software anfange, dann gehört zu den wesentlichen Grundsatzüberlegungen doch sowieso die Frage:

Wie gehe ich mit Fehlern um?

Im Rahmen dieser Frage fange ich regelmäßig meine Projekte damit an eine für den expliziten Fall angemessene Fehlerbehandlung zu basteln.

Allgemein

Jeder Programmierer fängt irgendwann einmal klein an. Lernen ist im Leben das A und O. In der Programmierung lernt man häufig durch Fehler, aber eben auch in den meisten anderen Lebenslagen. So heißt doch der bekannte Spruch: “Aus Fehlern lernt man.”

Aber wie finden wir die Fehler in der Programmierung und vor allem wann finden wir diese?

Beispiel PHP

Da in dem oben erwähnten Artikel explizit von PHP die Rede ist und auch die Kommentare darauf abzielen, werde ich mich vorerst auch nur mit dieser Sprache auseinandersetzen.

Ich selbst habe damals mit PHP/HTML/CSS/JavaScript angefangen, vor allem da man schnell sichtbare Ergebnisse erhält. (Was vermutlich ganz nebenbei auch der Grund für das faible von vielen Neulingen für PHP sein könnte)

Meine ersten Webseiten hatten damals natürlich auch viele Fehler und auch heute mache ich durchaus nicht selten einen Fehler und so manchen von diesen habe ich eventuell auch bis heute nicht gefunden. (Wenn man einen Fehler nicht findet, existiert er dann überhaupt?)

Aber was machen wir mit Fehlern die man finden kann und wo lassen wir diese Ausgeben?

In PHP gibt es dafür eine relativ gelungene Lösung auch ohne die php.ini anzupassen so dass alle Fehler in den Error-Log geschrieben werden.  Denn diese Error-Log-Lösung ist bei den meisten Webhostern leider nicht so einfach, man hat häufig keinen Zugriff auf die Logs und wenn dann häufig nur auf Anfrage. Aber bevor ich mich über die Error-Log-Politik der Webhoster auslasse liefere ich doch lieber eine Lösung die unabhängig vom Hoster ist.

Das Stichwort in PHP lautet set_error_handler, denn diese kleine aber feine Funktion ermöglicht es dem Programmierer seine eigene Fehlerbehandlung für die meisten Laufzeitfehler zu entwickeln. Somit ist es möglich, selbst wenn kein Zugriff auf die PHP-Error-Logs besteht, eigene Error-Logs in Produktivsystemen zu erstellen, aber noch viel wichtiger lässt sich auf diese Weise in der Entwicklung auch die Ausgabe der Fehler optimieren.

Für eine Entwicklungsumgebung freut man sich vermutlich wenn die Fehler gesammelt an einer Stelle in dem genutzten Template erscheint, in einem Produktivsystem ist es wohl wünschenswerter in einer Datei. (Die gleiche Idee steckt übrigens hinter display_errors aber leider nicht so schön einfach anpassbar)

Auch das Übermitteln dieser Fehler an den Entwickler lässt sich damit sehr einfach realisieren. (Sofern man kein Mail-Limit durch den Hoster hat, oder der Entwickler eine eigene Error-Reporting-Möglichkeit, z.B. mittels Webseite, implementiert hat)

Außerdem lässt sich dies mittels einer einfachen Konfiguration (Dateibasiert, Datenbankbasiert, wie auch immer man Konfigurationen speichern mag) nach belieben einstellen, denn der Entwickler ist ab diesem Zeitpunkt Herr der Ausgabe.

Ist es nicht das was eigentlich wünschenswert ist? Der Entwickler der Software bestimmt wie die Fehler an wen übermittelt werden. Erinnert mich stark an die Variante die in vielen anderen Programmiersprachen ebenfalls genutzt wird. Ist PHP doch gar nicht der große böse Buhmann was das Debugging angeht?

Fazit

Ich persönlich bin der Ansicht, dass in keinem Fall die Programmiersprache dafür herhalten muss wenn die Programmierer sich einfach nicht genug auskennen.

Mit dieser Aussage spreche ich sowohl die Programmierer an die Hinweise übersehen und/oder ignorieren, als auch diejenigen die eine Programmiersprache schlechter reden als sie eigentlich ist. PHP kann viel und macht genau das was der Programmierer verlangt, wenn man sich damit auseinandersetzt. Aber das gleiche gilt auch für Java, C++, C# und jegliche anderen Programmiersprachen.

Auch wenn in vielen Programmiersprachen der Compiler schon die ersten Fehler findet, so ist es doch meist dem Entwickler überlassen wie er Laufzeitfehler behandelt.

PS

Falls jemand Interesse haben sollte, in einem meiner Projekte habe ich eine simple Variante der Fehlerbehandlung in PHP implementiert mittels set_error_handler. Zu finden ist diese online auf Github.