Veltos.Tech

Разработка

Рефакторинг

Также называют: рефакторинг кода, переработка кода

Определение

Рефакторинг — изменение внутренней структуры кода без изменения его внешнего поведения: функциональность до и после одинакова, меняются читаемость, связанность и стоимость следующей доработки, а результат подтверждается тестами и регрессом.

Определяющее условие — неизменность поведения. Если после работы приложение стало делать что-то новое, это уже не рефакторинг, а разработка, и оценивать её нужно иначе. Отсюда и главное техническое требование: до начала должны существовать тесты или хотя бы воспроизводимый сценарий проверки, иначе доказать, что поведение не изменилось, нечем. Типовые операции — вынести повторяющийся фрагмент в функцию, разделить класс, взявший на себя четыре обязанности, убрать неиспользуемый код, привести схему данных в соответствие с реальными сценариями.

Продавать рефакторинг заказчику «за чистоту кода» бесполезно и, честно говоря, неправильно. Разговор ведётся в терминах последствий: эта переработка нужна, чтобы добавление нового типа доставки перестало занимать две недели вместо двух дней; эта — чтобы релиз можно было выкатывать в рабочее время, не собирая всю команду; эта — чтобы подключение второго склада вообще стало возможным. У рефакторинга должна быть цель, привязанная к ближайшим задачам из бэклога, иначе он превращается в бесконечное улучшение ради улучшения.

Ловушек две. Первая — «большой рефакторинг» отдельной веткой на три месяца: пока команда переписывает, продуктовая разработка идёт в основной ветке, и слияние в конце превращается в отдельный проект с собственными рисками. Гораздо безопаснее мелкими шагами, каждый из которых доезжает до продакшена. Вторая — рефакторинг вместо решения. Если архитектура принципиально не подходит под задачу, косметическая перестановка модулей не поможет: нужно либо менять архитектуру осознанно, либо признать, что систему проще заменить.

Смежные термины

Услуги по теме

Почитать подробнее

Нужна помощь с этим на практике?

Мы не только объясняем термины, но и делаем это руками. Опишите задачу — разберём и пришлём смету по этапам.