Чек-лист самопроверки
Проверьте себя после статей 1–4 и итогов. Вопросы с пометкой ↗ углубляются в других разделах энциклопедии (инфраструктура, тестирование, архитектура) — здесь достаточно общего понимания связи.
Отвечайте вслух или письменно, своими словами — не копируйте определения. Если ответ длиннее одного предложения и содержит пример из практики («у нас монолит, вынесли auth через Nginx») — вы усвоили тему. Под каждым блоком есть развёрнутые подсказки в раскрывающихся секциях.
Определения и оценка состояния
Опора: статья 1
- В чём разница между «легаси как наследие» и «легаси по Фезерсу»?
- Чем «тихое» легаси отличается от «кричащего»?
- Назовите пять признаков легаси-модуля без привязки к возрасту кода.
- Что такое управляемое легаси и почему его не обязательно переписывать?
- Когда код считается критическим наследием, а не просто старым?
- Как технический долг связан с удорожанием правок в легаси? ↗ Методология PO
- Какие риски легаси для бизнеса (простой, данные, комплаенс)?
- Почему «нет комментариев» — слабый признак, а «комментарий противоречит коду» — сильный?
Понимание системы
Опора: статья 2
- Какие этапы реверс-инжиниринга вы выполните перед первой правкой?
- Что можно извлечь из
git log/git blameв обрезанном репозитории? - Зачем интервью с поддержкой, если есть исходники?
- Какие четыре типа диаграмм полезны для легаси и зачем каждый?
- Чем статический анализ бинарника отличается от динамического?
- Что зафиксировать в документе перед изменением критичного модуля?
Безопасные изменения
Опора: статья 3
- Почему Фезерс говорит: «сначала тест, потом рефакторинг»?
- Что делает характеризующий тест и чем он отличается от «правильного» unit-теста?
- Что такое шов (seam)? Приведите пример object seam.
- Для чего приёмы Sprout, Wrap и Scratch?
- Как работает метод Mikado при сильной связанности?
- Почему flaky-тест опаснее отсутствия теста?
- На каких уровнях (unit / integration / API) вы защитите легаси без доступа к внутренностям?
- В чём разница рефакторинга и переписывания модуля «с нуля» в одном PR?
Стратегии модернизации
Опора: статья 4
- Опишите паттерн Strangler Fig и роль маршрутизатора. ↗ design/2125
- Что такое Anti-Corruption Layer и где он стоит относительно легаси?
- Чем clean room отличается от dirty room в процессе замены системы?
- Когда полный rewrite оправдан? Назовите четыре критерия из статьи.
- Что такое «защитный слой» на границе с внешним легаси-вендором?
- Перечислите шаги универсального цикла работы с легаси (от оценки риска до фиксации знаний).
- Как балансировать срочные баги и погашение техдолга в одном спринте?
- Какие навыки нужны разработчику для легаси (техника + расследование + коммуникация)?
- Как в команде формировать уважение к наследию, а не культуру «всё старое — мусор»?
Связь с другими темами энциклопедии
В этом разделе только обзор; детали — в специализированных главах.
- Как документирование и ADR снижают риск при смене авторов? ↗ Техническое письмо
- Зачем код-ревью в легаси-проекте фокусироваться на тестах и границах изменения?
- Как анализ зависимостей помогает выбрать первый модуль для Strangler?
- Что такое обратная совместимость API при выносе сервиса из монолита?
- Зачем при интеграции с легаси-API может понадобиться контрактное тестирование? ↗ тестирование / микросервисы
- Как виртуализация или контейнер помогают изолировать старое окружение для эксперимента? ↗ инфраструктура
- Почему автоматизация деплоя легаси начинается с воспроизводимой сборки, а не с «полного CI за неделю»?
- Как оценить стоимость владения легаси и нового решения (TCO на пальцах)?
- В чём особенность легаси в госсекторе (регламенты, длительные контракты)?
Быстрые ориентиры (если застряли на вопросе)
1–8: определения — развёрнутые ответы
1. Наследие — вы не контролируете происхождение и контекст кода (чужой стек, ушедшие авторы). По Фезерсу — нет тестов, менять страшно. Оба вместе — максимальная цена правки.
2. Тихое — редко падает, но команда боится трогать. Кричащее — часто падает, обходы руками, видно в метриках и тикетах.
3. Пять признаков без «просто старый»: нет тестов; непонятные зависимости; ручной деплой; магические константы; расхождение комментария и кода; отсутствие владельца модуля.
4. Управляемое легаси: есть карта, тесты на критичном, CI. Переписывать необязательно — достаточно эволюции.
5. Критическое: нет исходников, нет истории в git, жёсткая связанность, вендор закрыл продукт.
6. Техдолг — каждая следующая фича в «грязном» модуле стоит дольше (↗ методология).
7. Риски для бизнеса: простой, утечка данных, штрафы регулятора, невозможность нанять людей под COBOL.
8. «Нет комментариев» бывает у свежего кода. «Комментарий говорит одно, код другое» — сигнал, что знание потеряно или лгут документы.
9–14: понимание системы
9. Реверс: собрать артефакты → статический/динамический анализ → гипотеза → документ → только потом правка.
10. git log — когда и зачем меняли; blame — кто писал строку (если история не обрезана).
11. Исходники не объясняют почему бизнес выбрал странное правило; поддержка помнит инциденты.
12. Четыре диаграммы: компоненты (кто с кем), последовательность (один сценарий), развёртывание (серверы), ER (данные).
13. Статический — без запуска (структура). Динамический — с запуском (логи, трассировка).
14. Зафиксировать: входы/выходы модуля, зависимости, риски, план отката, владелец.
15–21: тесты и рефакторинг
15. Фезерс: без теста вы меняете поведение вслепую; тест — страховка перед рефакторингом.
16. Characterization фиксирует как сейчас; «правильный» unit-тест проверяет как должно быть по спецификации.
17. Seam — место подмены: интерфейс, параметр, наследник, конфиг. Object seam — подмена объекта-зависимости.
18. Sprout — новый код сбоку; Wrap — обёртка вокруг старого; Scratch — переписать кусок с тестами, старое удалить.
19. Mikado: попытка → список блокеров → снять блокеры мелкими PR → снова попытка.
20. Flaky то проходит, то нет — команда перестаёт верить CI и игнорирует красные сборки.
21. Без исходников — API/e2e/контрактные тесты с фикстурами; unit — где есть швы.
22. Рефакторинг — поведение то же; переписывание в одном PR — новое поведение, высокий риск.
23–31: стратегии и команда
23. Strangler: маршрутизатор направляет часть URL в новый сервис; остальное — в монолит; доля растёт.
24. ACL стоит между вашим доменом и легаси; переводит DTO/XML в ваши типы.
25. Dirty room изучает старое и пишет спецификацию; clean room пишет новое только по спецификации.
26. Rewrite: тупик стека/ОС; лицензия; дешевле восстановить знания нельзя; цели бизнеса иначе недостижимы.
27. Защитный слой у вендора: таймауты, circuit breaker, логи, контрактные тесты на вашей стороне.
28. Семь шагов цикла из статьи 4: риск → инвентаризация → анализ → тесты → правка → наблюдаемость → знания.
29. Срочный баг — минимальный фикс + тест; долг — доля спринта или поток; фича в легаси-модуле — время на шов.
30. Техника (git, тесты, отладка) + расследование (логи, гипотезы) + коммуникация (вопросы без обвинений).
31. Уважение: code review без «всё старое — мусор»; признание скрытых контрактов; параное чтение легаси.
32–40: связь с другими темами
32. ADR и документация сохраняют почему решили так — смена авторов менее болезненна.
33. В легаси ревью смотрит: есть ли тест, не размазана ли граница изменения, не протекла ли модель легаси.
34. Граф зависимостей показывает модуль с малым «веером» — хороший кандидат для первого Strangler.
35. Обратная совместимость API — старые клиенты работают без срочного обновления при выносе сервиса.
36. Контрактные тесты ловят расхождение вашего клиента и реального ответа легаси-API.
37. Контейнер/VM поднимает старое окружение (Java 8, старая ОС) для эксперимента без риска для прода.
38. CI начинают с воспроизводимой сборки одной командой; потом тесты, потом деплой.
39. TCO: стоимость сопровождения легаси (люди, простои, лицензии) сравнивают со стоимостью миграции во времени.
40. Госсектор: регламенты, длительные контракты, «странный» код может быть следствием аудита.
Если больше половины вопросов без ответа — вернитесь к статье 1 или к той, что указана в подзаголовке блока.
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Два смысла термина, признаки «тихого» и «кричащего» наследия, управляемое и критическое легаси, связь с техдолгом. Реверс-инжиниринг, восстановление контекста из git и людей, диаграммы, анализ бинарников. Рефакторинг, characterization tests, швы (seams), приёмы Фезерса, Mikado, защита от регресса. Стратегии модернизации легаси для новичков: Strangler Fig, ACL, clean room, цикл из семи шагов, shadow-прогон, инструменты и критерии полного rewrite. Итоги раздела «Легаси-код» для новичков: два смысла термина, типы наследия, три опоры (понять, безопасно менять, модернизировать), правила команды и мини-словарь.Что такое легаси и как его узнать
Понимание легаси-системы
Безопасные изменения в легаси
Стратегии модернизации легаси
Итоги