Современные профессии Онлайн-интенсив 26.09 в 18:00 мск
Выберите профессию будущего в ИТ, дизайне, маркетинге и управлении проектами
Кнопка закрыть топ-бар
ГлавнаяБлогЧто такое рефакторинг кода и когда он нуже
Рейтинг популярности языков программирования
5 801
Время чтения: 15 минут

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Александр Сагун
Александр Сагун
Исполнительный
директор Geekbrains
pdf иконка

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

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

doc иконка

Подборка 50+ ресурсов об IT-сфере

Только лучшие телеграм-каналы, каналы Youtube, подкасты, форумы и многое другое для того, чтобы узнавать новое про IT

pdf иконка

ТОП 50+ сервисов и приложений от Geekbrains

Безопасные и надежные программы для работы в наши дни

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

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

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

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

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

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

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

Только до 29.09
Как за 3 часа
разбираться в IT
лучше, чем 90%
новичков и выйти на
доход в 200 000 ₽?
Приглашаем вас на бесплатный онлайн-интенсив «Путь в IT»! За несколько часов эксперты GeekBrains разберутся, как устроена сфера информационных технологий, как в нее попасть и развиваться.
Александр Волчек CEO GeekBrains

Интенсив «Путь в IT» поможет:

  • За 3 часа разбираться в IT лучше, чем 90% новичков.
  • Понять, что действительно ждет IT-индустрию в ближайшие 10 лет.
  • Узнать как по шагам c нуля выйти на доход в 200 000 ₽ в IT.
При регистрации вы получите в подарок:
pdf иконка

«Колесо компетенций»

Тест, в котором вы оцениваете свои качества и узнаете, какая профессия в IT подходит именно вам

doc иконка

«Критические ошибки, которые могут разрушить карьеру»

Собрали 7 типичных ошибок, четвертую должен знать каждый!

pdf иконка

Тест "Есть ли у вас синдром самозванца?"

Мини-тест из 11 вопросов поможет вам увидеть своего внутреннего критика

Хотите сделать первый шаг и погрузиться в мир информационных технологий? Регистрируйтесь и смотрите интенсив:
Только до 29 сентября
Осталось 17 мест

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Оцените статью
Рейтинг: 5
( голосов 3 )
Поделиться статьей
Добавить комментарий

  1. Аноним

    Харош

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

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

    Ответить
Забрать
гарантированный
подарок

Получите бесплатно подборку файлов от GeekBrains:

Осталось 17 мест

Поздравляем! Вы выиграли 2-х дневный интенсив "Путь в IT". Чтобы закрепить подарок и получить к нему доступ, заполните информацию в открывшемся окне

×
Петр Озеров
Петр Озеров печатает ...