Продвинутый

Работа с легаси-кодом

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

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

Работа с легаси-кодом

легаси — это код без тестов, который страшно менять. Чтобы его улучшить, нужны особые приёмы.

Почему это важно: Большая часть работы backend-разработчика — это поддержка существующих систем, а не green field.

Главная идея

Сначала сделать код тестируемым, затем покрыть характеризующими тестами, и только потом начинать менять структуру.

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

  1. Найти 'шов' (seam) — место, где можно вклиниться без изменения поведения.
  2. Через шов внедрить заглушку или фейк зависимости.
  3. Написать характеризующие тесты на текущее поведение.
  4. Под защитой тестов начать аккуратный рефакторинг.

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

  • Seam — точка, где поведение можно менять без правки кода.
  • Sprout Method/Class — новый функционал добавляется рядом, а не внутрь легаси.
  • Wrap Method — оборачиваем старый метод новым, чтобы добавить поведение.
  • Anti-corruption layer — слой, изолирующий легаси от нового кода.

Типичные ошибки и заблуждения

  • Ошибка: 'легаси надо снести'. Чаще выгоднее улучшать постепенно.
  • Ошибка: 'тесты потом'. Без тестов любое изменение опасно.
  • Ошибка: трогать всё подряд. Лучше менять только то, что мешает текущей задаче.
  • Ошибка: документировать вместо рефакторинга. Документация устаревает, код — нет.

Ключевые выводы

  • Легаси — это не приговор, а условия задачи.
  • Сначала тесты, потом изменения.
  • Sprout/Wrap позволяют добавлять функционал безопасно.
  • Цель — не идеальный код, а контролируемые изменения.

Термины урока

Legacy code — по Фезерсу, код без тестов.
Working Effectively with Legacy Code — каноническая книга Майкла Фезерса.
Characterization test — тест, фиксирующий текущее поведение, даже если оно странное.
Big ball of mud — антипаттерн, описывающий хаотичную архитектуру.

Связь с работой backend-разработчика

Работа с легаси — повседневная реальность backend. Умение делать её безопасно — конкурентное преимущество.

Мини-разбор реальной ситуации

Сервис биллинга 8 лет никто не трогал. Команда написала характеризующие тесты на 5 ключевых сценариев, после чего смогла за месяц добавить новый тариф без регрессий.

Что запомнить

  • Легаси = код без тестов.
  • Швы — ваши друзья.
  • Sprout > переписывание.

Итог

Работа с легаси — это про дисциплину, а не про героизм.

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

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

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