Недавно я встретился с ошибкой в приложении, которое я принял от другого разработчика. Я отладил по причине, и более чем час спустя я понял, что проблемой не был код, производящий исключение, но некоторый код, выполненный перед этим возвратом неправильные данные. Если я погрузился в это, я встретился со следующим:
try {
...
} catch (XYException e){}
Если бы Исключение было бы распространено (изменение, я сделал), я нашел бы причину ошибок через несколько минут, поскольку stacktrace указал на меня на проблему. Таким образом, как я могу убедить других разработчиков никогда не ловить и игнорировать исключения таким образом?
Простое практическое правило: ловите исключения тогда и только тогда, когда у вас есть осмысленный способ обращения с ними . Делайте все, что вам нужно на рабочем месте, чтобы распространить это простое правило.
Используя такие инструменты, как PMD, вы даже можете применить это в среде разработки всех ваших разработчиков. EmptyCatchBlock
(первое правило основных правил) - это правило, которое делает именно то, что вам нужно. У вас есть еще несколько готовых правил для исключений , если вам нужен лучший контроль над обработкой исключений.
Тем не менее, по моему опыту, принудительное использование таких инструментов, как PMD, никогда не заменяет надлежащие методы разработки и обучение разработчиков.
Точно так же, как вы убеждаете других разработчиков следовать любым передовым методам. Этот конкретный антипаттерн является довольно распространенным (и чрезвычайно болезненным!), Но есть бесчисленное множество других примеров плохого кодирования, которые, вероятно, хотя бы в некоторой степени распространены среди членов вашей команды.
В порядке сложности начала работы вот несколько рекомендаций, которые я видел эффективно использовавшимися в прошлом:
Простой момент - пусть ведущий разработчик объявит это. Поймать исключение и проглотить его без причины равносильно саботажу и должно привести к рекурсии против разработчика (т. Е. Поговорить в nHR о его отношении).
Как сказал Юваль, ловите исключения только в том случае, если вы действительно делаете что-то разумное. позвольте вещам всплыть, если вы не знаете, что и как с ними справиться. ВОЗМОЖНО обернуть их другими исключениями, ЕСЛИ ожидается (т.е. DAL может генерировать исключение DataLayerException, чтобы более высокие уровни могли обрабатывать все это за одну попытку / уловку, но он не справился бы с чем-то неожиданным).
это нелепый способ поймать исключения и проглотить их.
Укажите на эту ссылку http://www.ibm.com/developerworks/library/j-jtp05254.html статья, в которой объясняется, когда ставить галочку или снимать отметку, либо бросать, либо ловить :)
Затрачивайте время на соответствующего разработчика или соответствующий модуль, а не на себя или свой собственный модуль.
Для этого есть несколько хитрых способов (каждый из которых является предметом обсуждения)
RuntimeException
вашего приложения. Таким образом, в вашем приложении нет try / catch, и вы можете легко увидеть (на уровне потока), какая проблема прервала поток. К сожалению, это не повлияло на разработчика, написавшего этот блок кода именно для того, чтобы избавиться от исключения, которым он не удосужился управлять. logger.log (Level.WARN, «здесь что-то пошло не так», e)
), позволяя пользователю не беспокоиться об управлении исключениями, однако имея достаточно хороший код. Одна приятная особенность отладчика VS.Net, которая мне нравится, заключается в том, что вы можете указать ему, что он прерывается при возникновении любого исключения. Это не то, что вы включаете постоянно, но может помочь, когда вы пытаетесь выследить конкретную ошибку. Интересно, существует ли такая же функция для Java, поскольку это среда, очень похожая на .Net. Однако я думаю, что эта проблема больше проявляется в Java, чем в .Net, потому что Java требует, чтобы вы обрабатывали исключения или, по крайней мере, отмечали, что ваш метод генерирует то же исключение (AFAIK). Итак, если вам нужно с этим справиться, многие плохие разработчики просто проглотят это, потому что не знают, как с этим справиться или что с этим делать.
Ничто из этого не поможет вам удержать плохих разработчиков от плохих поступков. Я думаю, что лучшее, что вы можете сделать, - это проводить обзоры кода. Поощряйте коллег просматривать список проверок, чтобы убедиться, что все сделано правильно. С хорошей системой управления версиями это можно сделать довольно легко. Человеческий глаз может уловить то, чего не могут сделать компьютеры. Компьютер сможет удалить пустой блок catch, но люди могут отловить гораздо больше антипаттернов.
Заголовок не соответствует примеру. В примере исключение не игнорируется, а обрабатывается неприятным образом (это иногда называют проглатыванием исключений). Для лечения этой конкретной болезни я рекомендую статический анализ кода и сокращение бонусов/зарплаты.
Запустите BadHumour:
Добавьте тихое критическое исключение в код, которое вызывает приложение закрывается, и
пусть они сидят и плачут, пытаясь найти его в течение часа - Затем обучите
End BadHumour
Простое правило: Используйте исключения для исключительных обстоятельств. Все остальное - глупость и расточительство. Сравните проглатывание исключений с поеданием бритвенных лезвий в конфетной глазури. Сейчас они могут быть приятными на вкус, но подождите, пока они начнут перевариваться. (Тестовая система кодирования против живой системы отладки)