Ich bekam die "Gelegenheit", mehrere Projekte zu retten, und die Führungskräfte ersetzten das gesamte Entwicklungsteam, weil die App zu viele Fehler hatte und die Benutzer die Probleme leid waren. Diese Code-Basen hatten alle eine zentrale Fehlerbehandlung auf App-Ebene, wie es die am höchsten bewertete Antwort beschreibt. Wenn diese Antwort die beste Praxis ist, warum hat sie nicht funktioniert und dem vorherigen Entwicklungsteam erlaubt, die Probleme zu lösen? Vielleicht funktioniert es manchmal nicht? Die obigen Antworten erwähnen nicht, wie lange Entwickler damit verbringen, einzelne Probleme zu beheben. Wenn die Zeit zur Fehlerbehebung das wichtigste Kriterium ist, ist es eine bessere Praxis, Code mit try..catch-Blöcken zu instrumentieren.
Wie hat mein Team die Probleme behoben, ohne das UI signifikant zu verändern? Ganz einfach, jede Methode wurde mit try..catch-Blöcken instrumentiert und alles wurde am Fehlerpunkt protokolliert, mit dem Methodennamen, den Methodenparameterwerten, die zu einem als Zeichenkette übergeben werden zusammen mit der Fehlermeldung, der Fehlermeldung, dem App-Namen, dem Datum und der Version. Mit diesen Informationen können Entwickler Analysen der Fehler durchführen, um die Ausnahme zu identifizieren, die am häufigsten auftritt! Oder der Namespace mit der höchsten Anzahl von Fehlern. Es kann auch validieren, dass ein Fehler, der in einem Modul auftritt, ordnungsgemäß behandelt wird und nicht durch mehrere Gründe verursacht wird.
Ein weiterer großer Vorteil dabei ist, dass die Entwickler einen Haltepunkt in der Fehlerprotokollierungsmethode setzen können und mit einem einzigen Klick auf die Schaltfläche "Ausführen" zum Fehlerzeitpunkt auf die Methode zugreifen können, wobei die eigentlichen Objekte im sofort verfügbaren Fenster erscheinen. Dies macht das Debuggen sehr einfach und ermöglicht es, die Ausführung zurück zum Start der Methode zu ziehen, um das Problem zu duplizieren und die genaue Zeile zu finden. Erlaubt die zentrale Ausnahmehandhabung einem Entwickler, eine Ausnahme in 30 Sekunden zu replizieren? Nein.
Die Aussage "Eine Methode sollte nur eine Ausnahme abfangen, wenn sie in irgendeiner vernünftigen Weise damit umgehen kann." Dies impliziert, dass Entwickler jeden Fehler vor der Veröffentlichung vorhersagen können oder auf ihn stoßen werden. Wenn dies der Fall wäre, bräuchte man keinen Top-Level-App-Ausnahmehandler und es gäbe keinen Markt für Elastic Search und Logstash.
Diese Methode ermöglicht es Entwicklern auch, intermittierende Probleme in der Produktion zu finden und zu beheben! Möchten Sie in der Produktion ohne Debugger debuggen? Oder würden Sie lieber Anrufe entgegennehmen und E-Mails von verärgerten Benutzern erhalten? Dies ermöglicht es Ihnen, Probleme zu beheben, bevor es jemand anderes bemerkt, ohne dass Sie E-Mails, IM oder Slack-Support benötigen, da alles Notwendige zur Fehlerbehebung sofort verfügbar ist. 95% der Probleme müssen nie reproduziert werden.
Um richtig zu funktionieren, muss diese Methode mit einer zentralisierten Protokollierung kombiniert werden, die den Namespace/Modul, den Klassennamen, die Methode, die Eingaben und die Fehlermeldung erfassen und in einer Datenbank speichern kann, damit sie aggregiert werden kann, um hervorzuheben, welche Methode am häufigsten fehlschlägt, damit sie zuerst behoben werden kann.
Manchmal entscheiden sich Entwickler dafür, Ausnahmen von einem Catch-Block aus dem Stapel herauszuwerfen, aber dieser Ansatz ist 100 Mal langsamer als normaler Code, der nicht wirft. Abfangen und freigeben mit Protokollierung wird bevorzugt.
Diese Technik wurde verwendet, um eine App schnell zu stabilisieren, die bei den meisten Benutzern in einem Fortune-500-Unternehmen alle Stunden versagte, entwickelt von 12 Entwicklern über 2 Jahre. Mit diesem Ansatz wurden 3000 verschiedene Ausnahmen identifiziert, behoben, getestet und innerhalb von 4 Monaten bereitgestellt. Das macht durchschnittlich alle 15 Minuten eine Behebung über 4 Monate hinweg.
Ich stimme zu, dass es keine Freude bereitet, alles zu tippen, was zur Codierungsinstrumentierung erforderlich ist, und ich ziehe es vor, den wiederholten Code nicht anzusehen, aber das Hinzufügen von 4 Zeilen Code zu jeder Methode lohnt sich langfristig.