В статье рассказывается:
- Что такое рефакторинг программного кода
- Рефакторинг на примере простой аналогии
- Проблемы рефакторинга
- Целесообразность применения рефакторинга
- Правила рефакторинга
- Когда не стоит заниматься рефакторингом кода
- Оценка эффективности рефакторинга
-
Пройди тест и узнай, какая сфера тебе подходит:
айти, дизайн или маркетинг.Бесплатно от Geekbrains
Рефакторинг кода – это ни в коем случае не его глубокая оптимизация, как считают многие. Этот процесс можно сравнить с «причесыванием», наведением лоска. То есть без него программа будет работать, но сам код может быть малопонятен, следовательно, его будет сложно оптимизировать при необходимости.
Можно ли обойтись без этого? Конечно, можно. Особенно если речь идет о каких-то локальных разработках, НЕ глобальных продуктах. Рефакторинг – это такая штука, которой не стоит пренебрегать, но и переусердствовать не рекомендуется. Подробнее о том, для чего нужен рефакторинг, как это работает, вы узнаете из нашего материала.
Что такое рефакторинг программного кода
Для разработчиков переписывать раз за разом и свои, и чужие коды – привычное дело. Ничего нового в код не добавляется, не исправляется. Но для чего тогда это нужно?
По сути рефакторинг – это упрощение и улучшение уже существующего кода. Имеется в виду упрощение не функциональных возможностей с целью предотвращения ошибок и повышения производительности ПО, а придание коду более приятного внешнего вида. То есть, убираются лишние нагромождения, отчетливее становятся видны все функции и их взаимосвязи, в целом улучшается визуальное восприятие программы.
Любой программист вам скажет, что одно из главных качеств кода – это его лаконичность. Так вот именно благодаря рефакторингу этого удается достичь.
На форумах вроде StackOverflow вопрос о том «Что такое рефакторинг?» обсуждается довольно часто. И это неудивительно, потому что его задают не только новички, но и разработчики со стажем.
На подобных форумах для объяснения понятия рефакторинг кода обращаются к книге Мартина Фаулера «Refactoring: Improving the Design of Existing Code». Определение тут приводится такое (цитата):
«Рефакторинг – это контролируемая техника совершенствования структуры существующего кода. Суть рефакторинга заключается во внесении серии мелких изменения (с сохранением функциональности приложения), каждое из которых «слишком мелкое, чтобы тратить на него время». Тем не менее эффект от внесения всех этих изменений достаточно ощутимый».
Для осуществления рефакторинга рекомендует применять пошаговый подход, чтобы избежать возможных ошибок. А сами пользователи StackOverflow подсказывают, что не лишним будет проводить юнит-тест буквально после каждого внесенного изменения. Кто-то уверяет, что это не так уж важно, и данные две операции не особо взаимосвязаны. Но опытные программисты при каждом удобном случае применяют тестирование, на каком бы этапе разработки или модификации ПО они ни находились.
входят в ТОП-30 с доходом
от 210 000 ₽/мес
Скачивайте и используйте уже сегодня:
Топ-30 самых востребованных и высокооплачиваемых профессий 2023
Поможет разобраться в актуальной ситуации на рынке труда
Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка
Только проверенные нейросети с доступом из России и свободным использованием
ТОП-100 площадок для поиска работы от GeekBrains
Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽
Если не особо вникать в терминологию, то можно принять за рефакторинг кода ряд других операций, которые в чем-то имеют схожесть с самим рефакторингом. Это:
- переписывание кода;
- дебаггинг (устранение ошибок);
- улучшение функционала;
- оптимизация ПО.
Дебаггинг – это выявление и устранение ошибок. Причем тут не ставится цель упростить код, главное – добиться нормальной работы программы, убрать найденные ошибки и не допустить новых.
Третий пункт может подразумевать улучшение читаемости кода. Но вообще, это не главное. Куда важнее сделать ПО максимально удобным для пользователей.
А вот оптимизацию чаще всего ошибочно и называют рефакторингом программного кода. Причина отчасти в том, что обе эти операции часто выполняются одновременно. Но целью оптимизации является улучшение производительности ПО, однако код при этом может стать ещё более громоздким.
Все перечисленные операции – это не рефакторинг. И каждая из них может выполняться по отдельности (чаще всего так и бывает), исключая случаи, когда из-за неверно написанного кода ПО работает некорректно.
Рефакторинг на примере простой аналогии
Чтобы лучше понять, что такое рефакторинг кода программного обеспечения, можно провести простую аналогию с чем-то более привычным. Пусть, например, вы открыли кафе. Для начала оборудовали кухню, наняли повара, составили несложное меню (что-то такое, что можно подавать, разогрев в микроволновке). И саму микроволновку тоже установили, рядом —еще какие-либо посудные стеллажи.
Через пару месяцев вы уже смогли купить электро-духовку, чтобы самим печь булочки. Конечно, для её подключения пришлось протянуть провода и еще разместить рядом стойку для подносов и противней. Работать стало не так удобно, стойка заняла часть свободного места, а через провода нужно постоянно переступать.
Через несколько недель вы приобрели тестомешалку и фритюрницу (проводов и шкафов, стеллажей с полками, естественно, добавилось). Плюс наняли еще одного повара. Картина на кухне стала такой: всюду провода, теснота, готовить неудобно. Площадь позволяет установить еще две плиты, однако бардак здесь такой, что и одну никак не втиснуть.
И тут за дело берется проектировщик кухонь и чертит новый план расположения всех предметов.
Скачать файлБуквально за неделю кухня изменилась до неузнаваемости. Все расставлено компактно, провода скрыты, стойки с оборудованием не закрывают проходы. Причем посетители ничего этого не видят и не знают, меню осталось прежним, потому что оптимизация затронула лишь процессы. Собственно, в этом и есть суть рефакторинга: все изменения, упрощающие дальнейшую работу, происходят внутри, а внешне это никак не заметно.
на обучение «Инженер-программист» до 29 декабря
Рефакторинг кода программного обеспечения – это такая его проработка, после которой он становится более читаемым, упрощается его поддержка, но при этом сохраняется функциональность.
Проблемы рефакторинга
Изначально понятие рефакторинга (refactoring) сформировалось применительно к Smalltalk, а потом уже концепция постепенно распространилась среди сторонников других языков программирования. Собственно, рефакторинг — это уже неотъемлемый элемент процесса разработки структуры приложений (framework development). Речь идет именно о рефакторинге, когда структурщики работают над иерархией классов и сокращением кодов.
Связаны ли с рефакторингом какие-либо риски? Да, они есть. Дело в том, что анализу и рефакторингу подвергается чистый, уже работающий код, и по ходу дела в нем могут появиться ошибки, на поиск которых потом придется потратить целые дни, а то и недели. Еще хуже, когда рефакторинг проводится бессистемно и без соблюдения формальностей.
Вы залезаете в код, видите, где и что можно подправить, проникаете всё глубже, делаете всё больше изменений, пока не оказываетесь в ситуации, когда назад дороги уже нет. Именно поэтому рефакторинг нужно проводить систематически. В книге «Design Patterns» говорится, что в проектных моделях указываются и цели для рефакторинга. Но тут мало обозначить объект (цель) для преобразований, важно еще выполнить их так, чтобы после этого ПО продолжило корректно работать.
Целесообразность применения рефакторинга
Рефакторинг бывает двух вариантов: запланированный либо проводящийся по мере надобности.
Плановый – это тот, для которого в цикле разработки изначально заложено необходимое время. К примеру, он будет выполняться раз в полгода, или после каждых четырех спринтов.
Второй вариант – рефакторинг по мере надобности. Это когда необходимо внести в код новые возможности, но они плохо интегрируются со старыми. Тогда приходится их пересматривать и реорганизовывать.
Правила рефакторинга
Как правильно сделать рефакторинг кода?
- Когда в программу требуется внедрить новый функционал, а структура старого кода не позволяет это сделать, нужно выполнить рефакторинг программы. То есть, привести её в такой вид, при котором внесение изменений станет возможным и максимально простым.
- Прежде чем приступать к рефакторингу, проверьте, что у вас есть набор надежных, самопроверяющихся (это важно) тестов.
- В ходе рефакторинга программа пересматривается и подправляется постепенно, пошагово, так, чтобы любые ошибки легко обнаруживались.
- Даже новичок напишет код, понятный компьютеру. А вот создать код, понятный другим людям, сможет лишь грамотный разработчик.
Читайте также!
Какие бы методы рефакторинга кода вы не применяли, тут очень важно соблюдение следующего ритма: тест, небольшие изменения, тест, небольшие изменения, тест, небольшие изменения и т.д. При таком подходе вы справитесь с задачей быстро и получите на выходе надежный результат.
Когда не стоит заниматься рефакторингом кода
Иногда без рефакторинга и вовсе можно обойтись. Чаще всего – это когда программу нужно от начала до конца переписать заново. Встречаются такие путаные коды, что проще разработать с нуля новый, чем вникать в старый.
Как понять, что код следует переписать? Это нужно сделать, если он «не хочет» корректно работать. То есть, тестирование показывает большое количество ошибок, при котором ни о какой устойчивости кода говорить уже не приходится. А вот если код работает вполне нормально, тогда можно подумать и о рефакторинге.
Ещё рефакторинг нецелесообразен, когда проект уже близок к завершению. Рефакторинг даст улучшение производительности только после того, как работа над проектом закончится (то есть, далеко не сразу). Например, Уорд Каннингем (Ward Cunningham) говорит, что незаконченный рефакторинг похож на залезание в долги.
Когда компания берет кредит, она должна вернуть банку не только полученные деньги, но еще и проценты. То есть, если код слишком сложный – это будут дополнительные расходы на обслуживание, введение расширений. А рефакторинг позволяет справляться с выплатой части долгов.
Но когда подходит дата завершения проекта, можно воздержаться от рефакторинга (по причине нехватки времени). По некоторым проектам, например, было видно, что рефакторинг дает повышение производительности труда. А как только наблюдается нехватка времени – значит пора проводить рефакторинг.
Оценка эффективности рефакторинга
Анализ и рефакторинг сделан успешно, если в результате вы имеете чистый, простой и понятный код.
К примеру, если количество покупателей в программе обозначено буквой Z, то лучше вместо неё поставить customerCount. Так код будет выглядеть яснее, и выполняемые в нём операции – тоже.
Размеры функций, методов и классов тоже имеют значения. Если функция не влезает целиком в экран, то её нужно разбить на две части, тогда код будет легче читаться.
Еще один способ упростить код – все функции собрать в самостоятельный файл, а потом уже ввести его в программу.
Стоит еще раз повторить, что рефакторинг – это не оптимизация программного кода. Цель оптимизации – ускорение работы и повышение эффективности, а рефакторинг делается для того, чтобы код выглядел понятнее.
Получается, что без него можно и обойтись, однако работа при этом будет усложняться и усложняться. Представьте, что вы никогда в жизни не наводите порядок на своем рабочем столе. В какой-то момент на нем соберутся внушительные завалы, которые будут вам очень мешать. А если команда большая, то именно рефакторинг помогает не тормозить процесс разработки.
Без рефакторинга можно обойтись лишь в случаях, когда речь идет о маленьких, почти не меняющихся (или меняющихся очень медленно) продуктах.
Спасибо, интересно было прочитать
Харош