Dano mi „możliwość” uratowania kilku projektów, a kadra kierownicza zastąpiła cały zespół programistów, ponieważ aplikacja zawierała zbyt wiele błędów, a użytkownicy byli zmęczeni problemami i rozbieganiem się. Wszystkie te podstawy kodu miały scentralizowane zarządzanie błędami na poziomie aplikacji, jak opisuje to najlepsza głosowana odpowiedź. Jeśli ta odpowiedź jest najlepszą praktyką, dlaczego nie zadziałała i nie pozwoliła poprzedniemu zespołowi programistów rozwiązać problemów? Może czasem to nie działa? Powyższe odpowiedzi nie wspominają, jak długo deweloperzy spędzają na rozwiązywaniu pojedynczych problemów. Jeśli kluczową miarą jest czas na rozwiązanie problemów, lepszym rozwiązaniem jest kodowanie przy użyciu bloków try..catch.
Jak mój zespół naprawił problemy bez znaczącej zmiany interfejsu? Proste, każda metoda została oprzyrządowana z blokadą try..catch, a wszystko było rejestrowane w punkcie błędu z nazwą metody, wartości parametrów metody połączonych w ciąg przekazywany wraz z komunikatem o błędzie, komunikacie o błędzie, nazwie aplikacji, dacie, i wersja. Dzięki tym informacjom programiści mogą uruchamiać analizy błędów, aby zidentyfikować wyjątek, który występuje najczęściej! Lub przestrzeń nazw o największej liczbie błędów. Może także sprawdzić, czy błąd występujący w module jest poprawnie obsługiwany i nie jest spowodowany wieloma przyczynami.
Inną zaletą tego rozwiązania jest to, że programiści mogą ustawić jeden punkt przerwania w metodzie rejestrowania błędów, a jednym punktem przerwania i jednym kliknięciem przycisku debugowania „step out” są w metodzie, która zakończyła się niepowodzeniem z pełnym dostępem do faktycznego obiekty w punkcie awarii, wygodnie dostępne w bezpośrednim oknie. Ułatwia to debugowanie i umożliwia przeciąganie wykonania z powrotem na początek metody w celu zduplikowania problemu w celu znalezienia dokładnej linii. Czy scentralizowana obsługa wyjątków pozwala deweloperowi zreplikować wyjątek w 30 sekund? Nie.
Stwierdzenie „Metoda powinna wychwycić wyjątek tylko wtedy, gdy może sobie z tym poradzić w rozsądny sposób”. Oznacza to, że programiści mogą przewidzieć lub napotkają każdy błąd, który może wystąpić przed wydaniem. Gdyby tak było na najwyższym poziomie, obsługa wyjątków aplikacji nie byłaby potrzebna i nie byłoby rynku elastycznego wyszukiwania i przechowywania danych.
Takie podejście pozwala również programistom znajdować i naprawiać sporadyczne problemy w produkcji! Czy chcesz debugować bez debugera w produkcji? A może wolisz odbierać połączenia i otrzymywać e-maile od zdenerwowanych użytkowników? Pozwala to naprawić problemy, zanim ktokolwiek się dowie, bez konieczności wysyłania wiadomości e-mail, wiadomości błyskawicznych lub usługi Slack ze wsparciem, ponieważ wszystko, co jest potrzebne do rozwiązania problemu, znajduje się właśnie tam. 95% problemów nigdy nie musi być powielanych.
Aby działać poprawnie, należy go połączyć ze scentralizowanym rejestrowaniem, które może przechwytywać przestrzeń nazw / moduł, nazwę klasy, metodę, dane wejściowe oraz komunikat o błędzie i przechowywać w bazie danych, aby można je było agregować w celu wyróżnienia, która metoda najbardziej zawodzi, dzięki czemu może być naprawione jako pierwsze.
Czasami programiści wybierają wyjątki w górę stosu z bloku catch, ale takie podejście jest 100 razy wolniejsze niż normalny kod, który nie rzuca. Preferowane jest przechwytywanie i zwalnianie z rejestrowaniem.
Technikę tę wykorzystano do szybkiego ustabilizowania aplikacji, która co godzinę nie działała u większości użytkowników w firmie z listy Fortune 500 opracowanej przez 12 deweloperów w ciągu 2 lat. Korzystając z tego 3000 różnych wyjątków zidentyfikowano, naprawiono, przetestowano i wdrożono w ciągu 4 miesięcy. Średnio poprawia się to co 15 minut średnio przez 4 miesiące.
Zgadzam się, że nie jest fajnie wpisywać wszystkiego, co potrzebne do instrumentowania kodu i wolę nie patrzeć na powtarzalny kod, ale dodanie 4 linii kodu do każdej metody jest tego warte na dłuższą metę.