Безопасный рефакторинг
рефакторинг — это изменение структуры кода без изменения его поведения. Тесты — главная страховка.
Почему это важно: Без тестов рефакторинг превращается в ремонт самолёта в полёте: одно неверное движение — и продакшен падает.
Главная идея
Маленькие шаги, зелёные тесты после каждого, и постоянная возможность откатиться.
Как это выглядит на практике
- Перед началом — убедиться, что есть тесты, покрывающие нужное поведение.
- Сделать минимальное изменение (например, выделить переменную).
- Запустить тесты. Если зелёные — закоммитить.
- Повторять, пока структура не станет такой, как нужно.
Что происходит под капотом
- Extract Method — выделить часть кода в отдельную функцию.
- Inline Variable — встроить переменную, если она не добавляет ясности.
- Rename — переименовать переменную/функцию/класс.
- Move — переместить функцию или поле в другой класс.
- Replace Conditional with Polymorphism — заменить большой if на полиморфизм.
Типичные ошибки и заблуждения
- Ошибка: рефакторить без тестов. Это уже не рефакторинг, а лотерея.
- Ошибка: смешивать рефакторинг и фичу в одном PR. Сложно ревьюить, легко сломать.
- Ошибка: 'переписать с нуля'. Чаще приводит к катастрофе и потере знаний.
- Ошибка: рефакторить ради рефакторинга. Должна быть цель: ясность, скорость или будущая фича.
Ключевые выводы
- Маленькие шаги + зелёные тесты.
- Рефакторинг и фичи — в разных коммитах.
- Цель важнее процесса.
- IDE умеет делать рефакторинги безопасно — пользуйтесь.
Термины урока
Strangler Fig — постепенная замена легаси новым кодом.
Test harness — тестовая обвязка для безопасного рефакторинга.
Characterization tests — тесты, фиксирующие текущее поведение легаси.
Mikado Method — пошаговый план крупного рефакторинга.
Связь с работой backend-разработчика
В backend рефакторинг живой системы требует тестов и фич-флагов. Иначе один деплой может стоить компании репутации.
Мини-разбор реальной ситуации
Команда хотела переписать модуль рассылок. Вместо переписывания применили Strangler Fig: за 3 месяца постепенно заменили 80% кода без единого инцидента.
Что запомнить
- Без тестов нет рефакторинга.
- Маленькие шаги.
- Strangler лучше, чем переписывание.
Итог
Безопасный рефакторинг — это дисциплина маленьких шагов, а не подвиг.
Комментарии к уроку
Войдите, чтобы оставить комментарий.
Пока нет комментариев — будьте первым.