Средний

Безопасный рефакторинг

Урок 4 из 5 в курсе Чистый код и рефакторинг

Содержание курса (4/5)

Безопасный рефакторинг

рефакторинг — это изменение структуры кода без изменения его поведения. Тесты — главная страховка.

Почему это важно: Без тестов рефакторинг превращается в ремонт самолёта в полёте: одно неверное движение — и продакшен падает.

Главная идея

Маленькие шаги, зелёные тесты после каждого, и постоянная возможность откатиться.

Как это выглядит на практике

  1. Перед началом — убедиться, что есть тесты, покрывающие нужное поведение.
  2. Сделать минимальное изменение (например, выделить переменную).
  3. Запустить тесты. Если зелёные — закоммитить.
  4. Повторять, пока структура не станет такой, как нужно.

Что происходит под капотом

  • 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 лучше, чем переписывание.

Итог

Безопасный рефакторинг — это дисциплина маленьких шагов, а не подвиг.

Комментарии к уроку

Войдите, чтобы оставить комментарий.

Пока нет комментариев — будьте первым.