Введение

В компьютерном программировании скрытие ошибок (или проглощение ошибок) - это практика обнаружения ошибки или исключения, а затем продолжения без регистрации, обработки или сообщения об ошибке другим частям программного обеспечения. Такой способ обработки ошибок считается плохой практикой и антимоделью в компьютерном программировании. В языках с поддержкой обработки исключений эта практика называется проглощением исключений. Ошибки и исключения имеют несколько целей: Помочь разработчикам программного обеспечения отслеживать и понимать проблемы, которые возникают при запуске пользователем программного обеспечения, в сочетании с системой ведения журналов Предоставлять полезную информацию пользователю программного обеспечения, в сочетании с значимыми сообщениями об ошибках, кодами ошибок или типами ошибок, отображаемыми в пользовательском интерфейсе, в виде консольных сообщений или в виде данных, возвращаемых из API (в зависимости от типа программного обеспечения и типа пользователя). Указывают, что нормальная работа не может продолжаться, поэтому программное обеспечение может использовать альтернативные способы выполнения требуемой задачи или прервать операцию. Когда ошибки проглочены, эти цели не могут быть достигнуты. Информация об ошибке теряется, что делает очень трудно отследить проблемы. В зависимости от того, как реализовано программное обеспечение, оно может вызвать непреднамеренные побочные эффекты, которые вызывают другие ошибки, дестабилизируя систему. Без информации о первопричине проблемы очень трудно понять, что происходит не так или как это исправить.

Причины

Наиболее распространенной причиной поглощения ошибок является отсутствие хороших инструментов и процессов ведения журналов, когда разработчик создает программное обеспечение. Когда сталкивается с ошибкой, которая не может быть легко обработана, если разработчик имеет хорошие инструменты для ведения журналов, ведение журнала неожиданной ошибки не стоит разработчику никакого времени или усилий. Регистрация ошибки должна быть простой (один вызов метода), быстрой (без влияния на производительность приложения), безопасной (не вызывает никаких ошибок или исключений) и гарантирует сохранение всей информации, путем записи типа ошибки и любых соответствующих данных, связанных с ней, стек-трейс ошибки (чтобы разработчик мог точно определить, где произошла ошибка и какие инструкции привели к ней) и временная метка ошибки.

Управляющие временными исключениями

В языках с проверенными исключениями все исключения, выдвинутые в методе, должны быть перечислены в подписи этого метода. При создании прототипов и внедрении программного обеспечения код часто меняется, что означает, что тип исключений, которые могут быть подняты в методе, также часто меняется. Принуждение корректировать подпись метода каждый раз, когда что-то меняется, замедляет разработку и может быть разочаровывающим, поэтому принятие исключений в качестве временной меры при внесении больших изменений в код является привлекательным. Этот временный код обработки исключений может оказаться в выпущенной базе кода. Даже в языках без проверенных исключений может происходить добавление временных обработчиков исключений при проведении больших изменений кода для ускорения прототипирования, что может привести к поглощению ошибок.

Предотвращение аварий

В ситуациях, когда программное обеспечение не должно сбиваться по какой-либо причине, проглощение ошибок - это практика, в которую программист может легко попасть. Например, плагин, который работает внутри другого приложения, должен обрабатывать все ошибки и исключения таким образом, чтобы не сбивать приложение, в котором он встроен. Поймание ошибок и исключений - это модель, в которую легко попасть, когда пытаешься предотвратить сбои любой ценой, и когда вы сочетаете это с плохими инструментами ведения журналов, может произойти поглощение ошибок.

Скрытие сложности от пользователей

При демонстрации ошибок пользователям важно превратить загадочные технические ошибки в сообщения, которые объясняют, что произошло и какие действия пользователь может предпринять, если таковые имеются, чтобы исправить проблему. При выполнении этого перевода технических ошибок в значимые сообщения пользователя, конкретные ошибки часто группируются в более общие ошибки, и этот процесс может привести к сообщения пользователя становится настолько бесполезным, что пользователь не знает, что пошло не так или как исправить это. Что касается пользователя, ошибка была проглочена.