В какой-то момент, каждый из нас сталкивается с ошибками при написании кода. Собственно, процесс разработки в том и состоит. При возникновении ошибки, вы теряетесь и не понимаете, как ее исправить. Но ошибки появляются даже у самых опытных разработчиков. Все мы люди, в конце концов.
Главное — учиться на своих ошибках и избегать их повторений, развивая свои навыки программирования и отладки. Основные ошибки при написании кода делятся на логические и синтаксические. Некоторые из них проявляются в исключениях или падениях программ, а некоторые можно обнаружить только в процессе использования ПО.
Ниже опишем некоторые ошибки, допускаемые разработчиками
Вы не выводите сообщения об ошибке
Если при падении программы не появляется диагностического сообщения об ошибке, ситуация может показаться вам безвыходной. В таком случае первое, что нужно сделать — это определить: падает ли программа при запуске или во время работы. Для этого вы можете добавить вывод программы, включая все ошибки, в терминал.
Если сообщение об ошибке не появляется, то программа, скорее всего, падает при запуске. Причинами этого могут быть зависимость от другой программы или проблемы со сборкой.
Если выведенное сообщение появляется, то для обнаружения ошибки необходимо сузить место поиска. Наиболее эффективным методом является добавление вывода сообщений об ошибке постепенно по всему коду до тех пор, пока ошибка не будет выявлена. Затем остается посмотреть, какие сообщения появляются.
Вы не читаете сообщения об ошибке
Сообщение об исключениях во фронтэнде обычно отображается в UI, либо на консоли разработчика. Иногда эти сообщения можно увидеть в бэкенде с помощью терминала или логов. В независимости от места возникновения ошибок, разработчики — новички пугаются появления сообщений об ошибке и, не читая, быстро их закрывают.
В этом и заключается главная причина долгой отладки у многих разработчиков. Чтобы ускорить процесс, первым делом необходимо внимательно прочитать сообщение об ошибке, переварить его и тщательно изучить проблему.
Вы не читаете системные логи
Некоторые программы генерируют лог-файлы или пишут журнал регистрации событий, в которых часто бывает полезная информация. Даже если проблема не описывается точно, то, по крайне мере, вы увидите либо предупреждение, либо сообщение об ошибке, либо сообщение об успешном завершении операции, которые покажут, что произошло до появления ошибки.
Трассировка отображает последовательность выполнения команд и данные.
Отладка в режиме трассировки может значительно облегчить и ускорить процесс обнаружения ошибок. Журналы трассировки позволяют легко отслеживать последовательность выполнения команд во время работы приложения.
Вы сразу пишите большой участок кода
Многие разработчики сначала пишут огромные участки кода, и только затем тестируют их. Время для нахождения багов возрастает пропорционально объему измененного кода. Следует создавать и тестировать добавочные изменения как можно чаще, чтобы не тратить время зря на написание большого участка кода, который впоследствии не заработает.
Обычно я даже провожу рефакторинг для упрощения написанного кода.
Вы не используете автоматизированное тестирование
Unit и end-to-end тестирования также позволяют обнаружить потенциальные ошибки. Одной из причин того, почему исполняемый код не работает, является рефакторинг кода c низким уровнем тестового покрытия. Другими словами, это значит, что не все изменения были автоматически протестированы.
Вы не пользуетесь методом исключения
Если не получается найти основную причину возникновения ошибки, можно прибегнуть к методу исключения. Закомментировав новые блоки кода, проверяем, исчезла ли ошибка. Через исключение блоков кода можно найти примерное расположение проблемы.
Простое неверное предположение может помешать найти баги, поэтому, сформулировав определенную гипотезу, попытайтесь логически доказать ее или опровергнуть.
Вы бездумно копируете части кода со StackOverflow
Часто разработчики, не вникая в суть кода, копируют его со StackOverflow, что приводит ко множеству негативных последствий. Во избежание проблем необходимо четко понимать, из каких команд состоит ваш код приложения.
Со мной часто бывает так, что пока я пытаюсь точнее сформулировать вопрос, чтобы задать его в StackOverflow, мне на ум внезапно приходит решение моей проблемы!
Похожая ситуация иногда случается, когда я разговариваю с другим членом команды и сам отвечаю на свой вопрос. Такое происходит из-за того, что мы заставляем себя обдумывать решение проблемы.
Вы обходитесь всего одной идеей для решения проблемы
На мой взгляд, одним из лучших методов отладки является неоднократный пересмотр своего решения и в некоторых ситуациях стоит переписать определенные функции заново.
Вы не используете метод поиска с возвращением
Определив примерное местоположение ошибок, можно проследить в стеке вызовов все переменные и ожидаемые значения. Этот способ поможет найти непокрытые участки программы, в которых команды работают не так, как предполагалось.
Вы не пользуетесь отладчиком
Наконец, лучшее, что вы можете сделать — это научиться пользоваться отладчиком. Все IDE включают в себя мощные отладчики, которые работают примерно одинаково: они позволяют программно остановить приложение, как при запуске, так и в процессе его выполнения.
Кроме того, существует множество иных полезных отладочных инструментов.
Перевод статьи Nick Karnik: How to Improve Your Debugging Skills