Есть ли легаси код на Python
Что проверяют
Умеете ли вы работать с кодом, который написали не вы и который нельзя просто переписать. Интервьюер хочет понять, есть ли у вас метод, а не жалобы на прошлых авторов. Следом обычно спрашивают, с чего вы начнёте правку модуля без тестов и документации.
Как отвечать
Дайте рабочее определение: легаси это код, который страшно менять, чаще всего потому, что у него нет тестов. Возраст и версия языка вторичны.
Затем опишите свою последовательность:
- зафиксировать поведение: характеризационные тесты на
pytest, которые записывают, что код делает сейчас, даже если это похоже на баг. Для внешних API подойдут записанные ответы черезvcrpyилиresponses; - добавить страховку: подсказки типов и постепенное включение
mypyпо модулям, линтерruff, покрытие черезcoverage.py, чтобы видеть, какой код тесты реально задевают; - менять маленькими шагами: рефакторинг без смены поведения отдельными коммитами, а крупные куски заменять по схеме «душитель» (strangler fig), когда новый код постепенно перехватывает вызовы старого;
- обновить окружение: Python 2.7 не поддерживается с 2020 года, ветки 3.9 и старше тоже остались без исправлений безопасности. Синтаксис помогает осовременить
pyupgrade, зависимости фиксируются вpyproject.tomlс lock-файлом.
Приведите свой пример: какой проект, что именно было «легаси», с чего начали, что удалось и что осталось. Если такого опыта нет, расскажите, как бы вы подошли к задаче, и сошлитесь на меньший масштаб: доработанный чужой скрипт, обновление зависимостей в учебном проекте.
Где спотыкаются
Предлагают всё переписать с нуля. Это дорого, долго и теряет бизнес-логику, которую никто не задокументировал, но на которую опираются пользователи.
Начинают рефакторинг без тестов и заодно молча «чинят» странное старое поведение. Иногда на этот баг завязан соседний сервис, и исправление ломает прод.
Обещают, что переход на Python 3 сам по себе ускорил проект. Выигрыш по скорости зависит от версии и нагрузки, а главная причина миграции в поддержке языка и библиотек.