Найти в Дзене

Работа с ошибками в коде. Как быстро фиксить баги?

Если вы работаете в большом проекте, где много программистов пишут много кода, то часто сталкиваетесь с "неизвестным" для вас кодом. Необходимо потратить определенное кол-во времени чтобы понять и разобраться что там все таки написал другой программист. Но у вас этого времени нет, потому-что на production появились серьезные ошибки, и требуется сейчас их исправить.
Оглавление

Если вы работаете в большом проекте, где много программистов пишут много кода, то часто сталкиваетесь с "неизвестным" для вас кодом. Необходимо потратить определенное количество времени чтобы понять и разобраться что там все таки написал другой программист. Но у вас этого времени нет, потому что на production появились серьезные ошибки, и требуется сейчас их исправить.

Введение в реальность

В идеальном мире можно тимлид, понимая специфику ошибки, назначает ее исправление программисту, который ранее делал данный функционал. И скорее всего проблема с вероятностью 80% решится быстро и production получит свои исправления в коде.

Но это в идеальном мире!

А если представить, что программист занят, либо он в отпуске, либо заболел. Код он писал 2-3 месяца назад, поэтому может и сам не помнить. Проект большой, кода много, а самое главное логики и функционала. И тут teamlead решил поставить задачу именно на вас. Что вы будете делать? Сроки минимальные и ошибку нужно исправить качественно, чтобы коллеги были счастливы и проект работал дальше хорошо.

Я посмотрел ошибку, открываю код

Перед вами много кода и логики. Много классов и функций. В общих чертах должно быть понятно что происходит, но вам нужно найти конкретное место.

Линейный поиск без деления кода
Линейный поиск без деления кода

Если вы не знаете природы возникновения ошибки, или логи показывают не всю информацию, самое простое, это начать "дебажить" данный код, например, с помощью точек остановы, обычным выводом логов каждой функции, которая у вас вызывается. И после возникновения ошибки, последний лог даст вам понять, до какого места код выполнился. Следовательно, можно понять причину и природу ошибки, посмотреть код определенного метода и уже в нем повторить те же действия с логом.

Но так же есть способ более эффективный. Напоминаю, что кода много, следовательно, данный метод требует времени, ведь придется каждую строку логировать. Данный процесс можно ускорить.

Линейный поиск с делением кода
Линейный поиск с делением кода

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

Итог

Если кода много, лучше использовать метод "деления кода", чтобы ускорить процесс поиска.

Так же, существует программирование с помощью тестирования. С использованием специальных тестов, которые постоянно проверяют ваш код на правильность выполнения вашей логики (Unit tests), но об этом в следующих статьях.

Подписывайся чтобы не пропустить следующие статьи и ставь лайк, если понравилось.