Получите бесплатно 4 курса для лёгкого старта работы в IT
Получить курсы бесплатно
ГлавнаяБлогЧто такое рефакторинг кода и когда он нуже
Рейтинг популярности языков программирования
8 816
Время чтения: 15 минут

Что такое рефакторинг кода и когда он нуже

8 816
Время чтения: 15 минут
Сохранить статью:
Сохранить статью:

В статье рассказывается:

  1. Что такое рефакторинг программного кода
  2. Рефакторинг на примере простой аналогии
  3. Проблемы рефакторинга
  4. Целесообразность применения рефакторинга
  5. Правила рефакторинга
  6. Когда не стоит заниматься рефакторингом кода
  7. Оценка эффективности рефакторинга
  8. Пройди тест и узнай, какая сфера тебе подходит:
    айти, дизайн или маркетинг.
    Бесплатно от Geekbrains

Рефакторинг кода – это ни в коем случае не его глубокая оптимизация, как считают многие. Этот процесс можно сравнить с «причесыванием», наведением лоска. То есть без него программа будет работать, но сам код может быть малопонятен, следовательно, его будет сложно оптимизировать при необходимости.

Можно ли обойтись без этого? Конечно, можно. Особенно если речь идет о каких-то локальных разработках, НЕ глобальных продуктах. Рефакторинг – это такая штука, которой не стоит пренебрегать, но и переусердствовать не рекомендуется. Подробнее о том, для чего нужен рефакторинг, как это работает, вы узнаете из нашего материала.

Что такое рефакторинг программного кода

Для разработчиков переписывать раз за разом и свои, и чужие коды – привычное дело. Ничего нового в код не добавляется, не исправляется. Но для чего тогда это нужно?

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

Что такое рефакторинг программного кода
Что такое рефакторинг программного кода

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

На форумах вроде StackOverflow вопрос о том «Что такое рефакторинг?» обсуждается довольно часто. И это неудивительно, потому что его задают не только новички, но и разработчики со стажем.

На подобных форумах для объяснения понятия рефакторинг кода обращаются к книге Мартина Фаулера «Refactoring: Improving the Design of Existing Code». Определение тут приводится такое (цитата):

«Рефакторинг – это контролируемая техника совершенствования структуры существующего кода. Суть рефакторинга заключается во внесении серии мелких изменения (с сохранением функциональности приложения), каждое из которых «слишком мелкое, чтобы тратить на него время». Тем не менее эффект от внесения всех этих изменений достаточно ощутимый».

Для осуществления рефакторинга рекомендует применять пошаговый подход, чтобы избежать возможных ошибок. А сами пользователи StackOverflow подсказывают, что не лишним будет проводить юнит-тест буквально после каждого внесенного изменения. Кто-то уверяет, что это не так уж важно, и данные две операции не особо взаимосвязаны. Но опытные программисты при каждом удобном случае применяют тестирование, на каком бы этапе разработки или модификации ПО они ни находились.

Узнай, какие ИТ - профессии
входят в ТОП-30 с доходом
от 210 000 ₽/мес
Павел Симонов - исполнительный директор Geekbrains
Павел Симонов
Исполнительный директор Geekbrains
Команда GeekBrains совместно с международными специалистами по развитию карьеры подготовили материалы, которые помогут вам начать путь к профессии мечты.
Подборка содержит только самые востребованные и высокооплачиваемые специальности и направления в IT-сфере. 86% наших учеников с помощью данных материалов определились с карьерной целью на ближайшее будущее!

Скачивайте и используйте уже сегодня:

Павел Симонов - исполнительный директор Geekbrains
Павел Симонов
Исполнительный директор Geekbrains
pdf иконка

Топ-30 самых востребованных и высокооплачиваемых профессий 2023

Поможет разобраться в актуальной ситуации на рынке труда

doc иконка

Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка

Только проверенные нейросети с доступом из России и свободным использованием

pdf иконка

ТОП-100 площадок для поиска работы от GeekBrains

Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽

pdf 3,7mb
doc 1,7mb
Уже скачали 27783 pdf иконка

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

  • переписывание кода;
  • дебаггинг (устранение ошибок);
  • улучшение функционала;
  • оптимизация ПО.
Простое переписывание бывает необходимо в качестве тренировок или когда разрабатывается абсолютно новое ПО.

Дебаггинг – это выявление и устранение ошибок. Причем тут не ставится цель упростить код, главное – добиться нормальной работы программы, убрать найденные ошибки и не допустить новых.

Третий пункт может подразумевать улучшение читаемости кода. Но вообще, это не главное. Куда важнее сделать ПО максимально удобным для пользователей.

А вот оптимизацию чаще всего ошибочно и называют рефакторингом программного кода. Причина отчасти в том, что обе эти операции часто выполняются одновременно. Но целью оптимизации является улучшение производительности ПО, однако код при этом может стать ещё более громоздким.

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

Рефакторинг на примере простой аналогии

Чтобы лучше понять, что такое рефакторинг кода программного обеспечения, можно провести простую аналогию с чем-то более привычным. Пусть, например, вы открыли кафе. Для начала оборудовали кухню, наняли повара, составили несложное меню (что-то такое, что можно подавать, разогрев в микроволновке). И саму микроволновку тоже установили, рядом —еще какие-либо посудные стеллажи.

Через пару месяцев вы уже смогли купить электро-духовку, чтобы самим печь булочки. Конечно, для её подключения пришлось протянуть провода и еще разместить рядом стойку для подносов и противней. Работать стало не так удобно, стойка заняла часть свободного места, а через провода нужно постоянно переступать.

Рефакторинг на примере простой аналогии
Рефакторинг на примере простой аналогии

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

И тут за дело берется проектировщик кухонь и чертит новый план расположения всех предметов.

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

Дарим скидку от 60%
на обучение «Инженер-программист» до 21 апреля
Уже через 9 месяцев сможете устроиться на работу с доходом от 150 000 рублей
Забронировать скидку

Рефакторинг кода программного обеспечения – это такая его проработка, после которой он становится более читаемым, упрощается его поддержка, но при этом сохраняется функциональность.

Проблемы рефакторинга

Изначально понятие рефакторинга (refactoring) сформировалось применительно к Smalltalk, а потом уже концепция постепенно распространилась среди сторонников других языков программирования. Собственно, рефакторинг — это уже неотъемлемый элемент процесса разработки структуры приложений (framework development). Речь идет именно о рефакторинге, когда структурщики работают над иерархией классов и сокращением кодов.

Грамотные специалисты понимают, что слёту хорошую структуру не создать, она совершенствуется в ходе работы, как говорится «на опыте». И еще они знают, что чаще речь идет об улучшении читаемости и модификации старого кода (а не о создании нового). Вот тут и вступает в силу рефакторинг, применимый и для всего ПО, и отдельно для структур (frameworks).

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

Только до 22.04
Скачай подборку материалов, чтобы гарантированно найти работу в IT за 14 дней
Список документов:
ТОП-100 площадок для поиска работы от GeekBrains
20 профессий 2023 года, с доходом от 150 000 рублей
Чек-лист «Как успешно пройти собеседование»
Чтобы получить файл, укажите e-mail:
Введите e-mail, чтобы получить доступ к документам
Подтвердите, что вы не робот,
указав номер телефона:
Введите телефон, чтобы получить доступ к документам
Уже скачали 52300

Вы залезаете в код, видите, где и что можно подправить, проникаете всё глубже, делаете всё больше изменений, пока не оказываетесь в ситуации, когда назад дороги уже нет. Именно поэтому рефакторинг нужно проводить систематически. В книге «Design Patterns» говорится, что в проектных моделях указываются и цели для рефакторинга. Но тут мало обозначить объект (цель) для преобразований, важно еще выполнить их так, чтобы после этого ПО продолжило корректно работать.

Целесообразность применения рефакторинга

Рефакторинг бывает двух вариантов: запланированный либо проводящийся по мере надобности.

Плановый – это тот, для которого в цикле разработки изначально заложено необходимое время. К примеру, он будет выполняться раз в полгода, или после каждых четырех спринтов.

Крупные компании часто создают специальные группы, работа которых состоит исключительно в рефакторинге старых кодов (легаси-кода в больших фирмах обычно много). После этого они становятся более понятными и простыми в использовании для других сотрудников.

Второй вариант – рефакторинг по мере надобности. Это когда необходимо внести в код новые возможности, но они плохо интегрируются со старыми. Тогда приходится их пересматривать и реорганизовывать.

Правила рефакторинга

Как правильно сделать рефакторинг кода?

  • Когда в программу требуется внедрить новый функционал, а структура старого кода не позволяет это сделать, нужно выполнить рефакторинг программы. То есть, привести её в такой вид, при котором внесение изменений станет возможным и максимально простым.
  • Прежде чем приступать к рефакторингу, проверьте, что у вас есть набор надежных, самопроверяющихся (это важно) тестов.
  • В ходе рефакторинга программа пересматривается и подправляется постепенно, пошагово, так, чтобы любые ошибки легко обнаруживались.
  • Даже новичок напишет код, понятный компьютеру. А вот создать код, понятный другим людям, сможет лишь грамотный разработчик.

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

Когда не стоит заниматься рефакторингом кода

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

Как понять, что код следует переписать? Это нужно сделать, если он «не хочет» корректно работать. То есть, тестирование показывает большое количество ошибок, при котором ни о какой устойчивости кода говорить уже не приходится. А вот если код работает вполне нормально, тогда можно подумать и о рефакторинге.

Когда не стоит заниматься рефакторингом кода
Когда не стоит заниматься рефакторингом кода

Ещё рефакторинг нецелесообразен, когда проект уже близок к завершению. Рефакторинг даст улучшение производительности только после того, как работа над проектом закончится (то есть, далеко не сразу). Например, Уорд Каннингем (Ward Cunningham) говорит, что незаконченный рефакторинг похож на залезание в долги.

Когда компания берет кредит, она должна вернуть банку не только полученные деньги, но еще и проценты. То есть, если код слишком сложный – это будут дополнительные расходы на обслуживание, введение расширений. А рефакторинг позволяет справляться с выплатой части долгов.

Но когда подходит дата завершения проекта, можно воздержаться от рефакторинга (по причине нехватки времени). По некоторым проектам, например, было видно, что рефакторинг дает повышение производительности труда. А как только наблюдается нехватка времени – значит пора проводить рефакторинг.

Оценка эффективности рефакторинга

Анализ и рефакторинг сделан успешно, если в результате вы имеете чистый, простой и понятный код.

К примеру, если количество покупателей в программе обозначено буквой Z, то лучше вместо неё поставить customerCount. Так код будет выглядеть яснее, и выполняемые в нём операции – тоже.

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

Размеры функций, методов и классов тоже имеют значения. Если функция не влезает целиком в экран, то её нужно разбить на две части, тогда код будет легче читаться.

Еще один способ упростить код – все функции собрать в самостоятельный файл, а потом уже ввести его в программу.

Оценка эффективности рефакторинга
Оценка эффективности рефакторинга

Стоит еще раз повторить, что рефакторинг – это не оптимизация программного кода. Цель оптимизации – ускорение работы и повышение эффективности, а рефакторинг делается для того, чтобы код выглядел понятнее.

Получается, что без него можно и обойтись, однако работа при этом будет усложняться и усложняться. Представьте, что вы никогда в жизни не наводите порядок на своем рабочем столе. В какой-то момент на нем соберутся внушительные завалы, которые будут вам очень мешать. А если команда большая, то именно рефакторинг помогает не тормозить процесс разработки.

Без рефакторинга можно обойтись лишь в случаях, когда речь идет о маленьких, почти не меняющихся (или меняющихся очень медленно) продуктах.

Ищете идеальный старт в мире IT? Познакомьтесь с основами программирования, базами данных, системами аналитики и многим другим. Научитесь основам машинного обучения и глубокого обучения, созданию нейронных сетей и анализу данных с интенсивным курсом разработчика искусственного интеллекта. В будущем ваше умение создавать умные и интуитивно понятные решения поможет улучшить мир.
Оцените статью
Рейтинг: 5
( голосов 5 )
Поделиться статьей
Добавить комментарий

Сортировать:
По дате публикации
По рейтингу
  1. Аноним

    Спасибо, интересно было прочитать

    1
    1
    Ответить
  2. Аноним

    Харош

    0
    0
    Ответить
До конца акции осталось
0 дней 00:00:00
Дарим скидку 64% на обучение «Разработчик»
  • Получите новую профессию с гарантией трудоустройства
  • Начните учиться бесплатно, 3 месяца обучения в подарок
Забронировать скидку на обучение
Забрать подарок

Получите подробную стратегию для новичков на 2023 год, как с нуля выйти на доход 200 000 ₽ за 7 месяцев

Подарки от Geekbrains из закрытой базы:
Осталось 17 мест

Поздравляем!
Вы выиграли 4 курса по IT-профессиям.
Дождитесь звонка нашего менеджера для уточнения деталей

Иван Степанин
Иван Степанин печатает ...