Мені було надано "можливість" врятувати кілька проектів, і керівники замінили всю команду розробників, оскільки у додатку було занадто багато помилок, і користувачі втомилися від проблем і обходу. Усі ці кодові бази мали централізоване поводження з помилками на рівні програми, як описано вгорі голосованої відповіді. Якщо ця відповідь є найкращою практикою, чому вона не працювала і не дозволяла попередній команді розробників вирішувати проблеми? Можливо, іноді це не працює? У відповідях вище не згадується, скільки часу розробники витрачають на виправлення окремих проблем. Якщо час для вирішення проблем є ключовою метрикою, то інструментальний код із блоками try..catch є кращою практикою.
Як моя команда усунула проблеми, не змінивши інтерфейсу користувача? Простий, кожен метод оснащений try..catch заблоковано, і все реєструвалось у місці відмови разом із назвою методу, значеннями параметрів методу, об'єднаними в рядок, що передається разом із повідомленням про помилку, повідомлення про помилку, ім'я програми, дату, та версія. За допомогою цієї інформації розробники можуть запустити аналітику щодо помилок, щоб виявити виняток, який трапляється найбільше! Або простір імен з найбільшою кількістю помилок. Він також може підтвердити, що помилка, яка виникає в модулі, належним чином обробляється і не викликається кількома причинами.
Ще однією перевагою цього є те, що розробники можуть встановити одну точку розриву в методі реєстрації помилок, і з однією точкою розриву та одним натисканням кнопки налагодження «вийти» вони перебувають у методі, який не вдався з повним доступом до фактичного об'єкти в місці відмови, зручно доступні в безпосередньому вікні. Це дозволяє дуже легко налагоджувати і дозволяє перетягувати виконання назад до початку методу для дублювання проблеми, щоб знайти точну лінію. Чи дозволяє централізоване управління винятками розробнику копіювати виняток за 30 секунд? Ні.
Заява "Метод повинен виловлювати виключення лише тоді, коли він може впоратися з ним якось розумним чином". Це означає, що розробники можуть передбачити або зустріти кожну помилку, яка може статися до випуску. Якби це правда вищого рівня, обробник винятків додатків не знадобився б і не було б ринку для еластичного пошуку та реєстрації даних.
Такий підхід також дозволяє розробникам знаходити та виправляти періодичні проблеми у виробництві! Чи хотіли б ви налагоджувати без налагодження у виробництві? Або ви віддаєте перевагу телефонувати та отримувати електронні листи від засмучених користувачів? Це дозволяє виправляти проблеми до того, як хтось інший знає, і без необхідності надсилати електронну пошту, чат чи Slack за допомогою підтримки, оскільки все, що потрібно для виправлення проблеми, є саме там. 95% питань ніколи не потрібно відтворювати.
Для належної роботи його потрібно поєднувати з централізованим журналом, який може захоплювати простір імен / модуль, назву класу, метод, входи та повідомлення про помилку та зберігати в базі даних, щоб можна було агрегувати, щоб виділити, який метод не вдається найбільше, щоб він міг бути виправлено першим.
Іноді розробники вирішують викидати винятки до стека з блоку лову, але такий підхід у 100 разів повільніше, ніж звичайний код, який не кидає. Переважний вилов і випуск із веденням журналу.
Ця методика була використана для швидкої стабілізації програми, яка виходила з ладу щогодини для більшості користувачів у компанії Fortune 500, розробленій 12 розробниками протягом 2 років. За допомогою цього 3000 різних винятків було визначено, виправлено, протестовано та розгорнуто за 4 місяці. Це в середньому виправляється кожні 15 хвилин в середньому протягом 4 місяців.
Я погоджуюся, що не цікаво вводити все необхідне для інструментації коду, і я вважаю за краще не дивитися на повторюваний код, але додавати 4 рядки коду до кожного методу варто в перспективі.