Улучшаем навыки отладки ПО — несколько советов
От переводчика. Отладка ПО для многих кодеров — скучное и рутинное занятие. Но все же обойтись без дебагинга просто невозможно. Этот пост — перевод оригинальной статьи Ника Карника, в которой он делится собственными наблюдениями об ошибках и недочетах в отладке, которые встречаются не только у начинающих программистов, но и у профи.
Все мы пишем код, который иногда, к сожалению, отказывается работать. Это нормально, просто часть процесса разработки. Если программа выдает ошибку, иногда вы просто не знаете, что делать дальше и как ее исправить. Не переживайте — все проблемы решаются, а ошибки бывают даже у самых опытных кодеров.
Skillbox рекомендует: Практический годовой курс «PHP-разработчик с нуля до PRO».
Напоминаем: для всех читателей «Хабра» — скидка 10 000 рублей при записи на любой курс Skillbox по промокоду «Хабр».
Для того, чтобы ошибок было меньше, необходимо развивать навыки как программирования, так и отладки.
Сами они разделяются на два типа — логические и синтаксические.
Самые распространенные ошибки разработчиков
Отсутствие сообщений об ошибках
Один из наиболее сложных сценариев — когда приложение падает, а сообщений о причине случившегося нет. Для того, чтобы иметь возможность исправить проблему в коде, нужно понять, возникает она во время запуска или уже в процессе работы. Вы можете узнать это, добавив логирование сообщений приложения в начале кода.
Если лога нет, наиболее вероятно, что программа падает во время загрузки, еще до того, как что-то начинает писаться в лог.
Если у вас есть журнал сообщений, пройдите по нему и найдите возможную причину краша. Для того, чтобы сузить круг поиска, стоит сделать так, чтобы программа писала в лог основные события в процессе своей работы. В этом случае проблему будет проще найти.
«Фобия» сообщений об ошибках
Если мы говорим о frontend, то ошибки обычно показываются либо в самом приложении, в пользовательском интерфейсе, либо в консоли разработчика. Иногда сообщения можно увидеть в backend при помощи терминала или в журнале событий. Вне зависимости от типа ошибок новички пугаются таких сообщений и даже не читают их.
Это главная причина, почему у некоторых разработчиков отладка занимает столько времени.
Первым делом необходимо изучить ошибку, разобрав все самым тщательным образом.
Нежелание изучать системные логи
Некоторые программы пишут лог-файлы или же генерируют журнал событий. Все это — просто кладезь полезной информации. Если точного указания на причину ошибки в журнале событий найти не удалось, попробуйте поискать сообщения об отказе или, наоборот, успешном запуске чего-либо (модуля, сервиса).Это поможет разобраться с причиной появления ошибки.
Отсутствие журнала трассировки
Трассировка помогает отслеживать процесс работы программы и работу с данными. Запись трассировочных сообщений во время работы ПО упрощает процесс дебагинга. Журнал трассировки — простой путь изучить процесс работы вашего приложения.
Неумение работать поэтапно
Многие разработчики пишут большие куски кода, после чего компилируют и тестируют их в составе приложения. Но стоит помнить, что время поиска багов в коде пропорционально его объему.
Если изменений много, на поиск внезапно появившейся проблемы придется потратить кучу времени. Лучше всего работать поэтапно. Вносить небольшие изменения, компилировать код, тестировать приложение — и потом все это повторять. Когда вы внедряете изменения небольшими итерациями, это в итоге ускоряет процесс создания приложения. Если что-то не работает, вы сможете быстро понять, почему.
После написания своего кода я часто провожу его ревизию для упрощения написанного.
Нежелание выполнять автоматическое тестирование
Модульные тесты (unit-tests) и сквозная автоматизация тестирования (end-to-end test) позволяют выявлять потенциальные ошибки по мере их появления. Одна из причин возникновения ошибок заключается в том, что разработчики выполняют рефакторинг кода до проведения его тщательной проверки, то есть изменения не тестируются автоматически.
Неумение работать с методом исключения
Если вы не можете определить основную причину своей проблемы, нужно использовать метод исключения. Вы можете закомментировать новые блоки кода, чтобы проверить, исчезнет ли ошибка. Это неплохо помогает диагностировать проблему.
В процессе отладки вы можете сформировать определенную гипотезу и попытаться доказать или опровергнуть ее, используя предложенный выше метод.
Копипаст со StackOverflow
Часто разработчики копипастят код со StackOverflow, не имея четкого представления о том, что именно делает скопированный участок. Такие действия имеют ряд негативных последствий, часть из которых — неявные. Обязательно обращайте внимание на то, что вы добавляете, старайтесь понять, за выполнение каких функций отвечает участок вставленного кода.
Кстати, частенько, когда я задаю вопрос на StackOverflow, чуть позже сам на него и отвечаю, поскольку в процессе написания обдумываю проблему.
То же случается и во время обсуждения проблемы в составе своей команды. Вы сами находите решение на свой вопрос, просто потому что размышляете над причиной проблемы.
Нежелание повторно проинспектировать код
Одним из наиболее успешных методов дебагинга, которые я знаю, является изучение вашего кода — снова и снова. В некоторых случаях помогает написание участка кода с нуля.
Неспособность отследить вызовы функций
Иногда также помогает изучение вызовов функций в вашем приложении. Нужно просто проверить переменные и их ожидаемые значения. В процессе вы сможете найти проблемные места в вашей программе, которые и приводят к ее странному поведению.
Незнание отладчика
Вам обязательно нужно научиться использовать отладчик. Это лучшая инвестиция времени. Все IDE поставляются с мощными инструментами отладки, которые работают примерно одинаково. Изучайте эти инструменты — и вы решите большинство своих проблем при написании кода.
Skillbox рекомендует: