Приходилось ли разбираться в чужом коде и исправлять баги
Что проверяют
Есть ли у вас процесс или вы правите чужой код наугад. За вопросом стоит реальность любой продуктовой команды: большая часть времени уходит не на новые возможности, а на код, который писали не вы.
Как отвечать
Опишите последовательность, а не героизм.
- Воспроизвести. Пока нет стабильного сценария, чинить нечего. Уточняем браузер, размер экрана, роль пользователя, данные, состояние кэша. Если баг плавающий, ищем условие: гонка запросов, устаревшее состояние, конкретная локаль.
- Локализовать.
git logиgit blameпо файлу, при нуждеgit bisectпо релизам. В браузере точка останова с условием, вкладка сети, профилировщик библиотеки представления, чтобы увидеть лишние перерисовки. В проде помогает сборщик ошибок с картами исходников и привязкой к версии. - Понять замысел. Читаем не только сломанный компонент, но и того, кто им управляет: откуда приходит состояние, кто владеет данными, какие есть побочные эффекты.
- Починить минимально и закрыть тестом. Тест должен падать до правки и проходить после. Рефакторинг соседнего кода выносим отдельным коммитом, чтобы саму правку было видно.
Хорошо добавить, что после себя вы оставляете короткий комментарий о причине там, где грабли неочевидны, иначе следующий человек снова «упростит» это место.
Где спотыкаются
Начинают с переписывания. Компонент кажется кривым, его сносят, и баг переезжает в новую реализацию вместе с непонятым требованием. Странная строчка в чужом коде чаще всего закрывает какой-то забытый случай, и выясняется это уже после релиза.
Чинят симптом. Задержка таймером, чтобы данные успели прийти, случайный ключ в списке ради перерисовки, повышенная важность стиля поверх чужого правила, пустой перехват исключения. Всё это возвращается через месяц в худшем виде.
Приносят правку в три строки внутри дифа на тысячу, потому что по дороге прогнали форматирование и подняли зависимость. Такое нечем проверять на ревью. И отдельно про тон: валить вину на автора кода не стоит, про ушедшего коллегу достаточно сказать, что контекста не осталось.