Рефакторинг кода

Рефакторинг кода

15 июля 2021

Капитальный ремонт или перепланировку хоть раз в жизни, пожалуй, делал каждый. Трубы и проводка изнашиваются, отделочные материалы и предметы интерьера устаревают, расположение комнат перестает быть удобным. Рефакторинг сравним с капитальным ремонтом и предполагает перепроектирование и исправление кода. Меняется внутренняя структура программы, в то время как поведение остается прежним.

Рефакторинг кода часто требуется, потому что:

  1. первая версия была сделана на скорую руку или «как можно дешевле»;
  2. появилась новая версия компилятора или библиотек;
  3. прошлые программисты могли допускать архитектурные ошибки;
  4. по мере эксплуатации становится понятно, что нужны новые функции.
Восклицательный знак в заштрихованном круге

Низкокачественный код отличается громоздкостью и нечитаемостью, хранением паролей в cookies, сложностью URL, именованием переменных на разных языках.

Рефакторинг исправляет.

01 Разнородный стиль именования переменных, методов, классов.
02 Дублирование кода.
03 Длинные методы и классы.
04 Перегруженный список параметров функций и методов.
05 Длинные блоки ветвления.
06 Магические значения.
07 Использование непонятных аббревиатур.
08 Жесткое кодирование допущений.
09 Чрезмерное конфигурирование.
10 Запутанный код.
11 Чрезмерное количество уровней абстракции.
12 Чрезмерную взаимозависимость классов друг от друга.
13 Отсутствие проверки входных данных.
14 Перегрузку классов и компонентов разнородным функционалом.
15 Чрезмерную обобщенность кода.
16 Хранение временных значений в полях.
17 Классы-посредники.
18 Недостаток изоляции классов.
19 Неуместное наследование классов.
20 Наследование вместо делегирования.
21 Логику вне классов предметной области.
22 Прямые вызовы между далеко расположенными частями системы.
23 Неиспользуемый код.
24 Потребление центрального процессора на ожидание.
25 Некорректное распараллеливание задач или не использование потоков.
26 Отдельную ветвь кода для частных случаев.
27 Самописный код вместо использования библиотеки.
28 Недостаточное комментирование кода или чрезмерное комментирование очевидных участков.

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