15 ноября 2017 2628
В жизни каждого проекта возникает такой момент, когда поднимается вопрос о рефакторинге. Технические специалисты хотят чего-то нового, модного и интересного в проекте. Бизнес требует новой функциональности быстрее и быстрее. Команда говорит о том, что тяжело вносить изменения, и требуется рефакторинг. Знакомая ситуация? Cегодня только об этом и ни на байт о блокчейн.

В жизни каждого проекта возникает такой момент, когда поднимается вопрос о рефакторинге. Технические специалисты хотят чего-то нового, модного и интересного в проекте. Бизнес требует новой функциональности быстрее и быстрее. Команда говорит о том, что тяжело вносить изменения, и требуется рефакторинг. Знакомая ситуация? Cегодня только об этом и ни на байт о блокчейн.

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

Действительно ли он нам необходим, или “Пчелы против меда”

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

После этого стоит посмотреть на то, сколько времени инженеры тратят на поддержку существующего решения и внедрение новых фич. Может оказаться так, что существующая система плохо расширяема, данные по трудозатратам можно получить из JIRA/Redmine/TeamCity/TFS. Еще хорошо бы проверить, как владелец продукта вносит изменения, не меняются ли user story. В этом случае потребуется рефакторинг процесса работы, процедур, связанных с обработкой Change Requests.

Что нам даст рефакторинг, или “Где деньги, Зин?”

При совершении договоренности о рефакторинге необходимо договориться о том, что будет сделано. Стоит получить список конкретных “ценностей”, которые будут получены после рефакторинга. Они должны быть измеримы в каких-то единицах, например: 
  • время обработки заказа будет сокращено на x минут;
  • время на внедрение новой фичи будет понижено в 2 раза;
  • рефакторинг даст возможность делать A/B тестирование, а это приведет к дополнительным продажам;
  • даст возможность поддерживать больше клиентов, а следовательно – больше заказов.
На данном этапе стоит собрать те преимущества, что будут понятны бизнес-заказчику.

Какие будут последствия, или “Разработчик ни в чем не виноват”

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

Для того чтобы понизить сайд-эффекты, лучше попросить разработчиков сопроводить рефакторинг набором unit- и автоматизированных тестов, в том числе интеграционных, - это может послужить дополнительной работой, однако добавит дополнительный уровень контроля, а также останется в системе в виде дополнительного улучшения для заказчика ;)

Для того чтобы обезопасить команду от ненужной работы по вечерам/в ночи для вывода хот фикса, стоит также прогнать цикл регрессионного тестирования в полном объеме, провести ряд exploratory testing сессий. Это даст возможность выявить интересные дефекты :)

В итоге мы должны понять:
  • что может быть “задето” в результате рефакторинга;
  • как мы будем проверять работоспособность системы;
  • какие тесты/результаты будут предоставлены в качестве доказательств, что все в целости и сохранности;
  • какие рекомендации будут предоставлены отделу контроля качества от программистов;
  • как мы проверим то, что “старые” пользователи не пострадают.

Как сделать так, чтобы рефакторинг в последующем не требовался, или “Нормально делай, нормально будет”

Очень часто руководители спрашивают, а можно ли сразу разработать систему без багов? Конечно же можно, только это потребует больше времени. За годы участия в разработке программных продуктов я заметил, что в большинстве случаев разработка идет эволюционным путем, если посмотреть на историю развития ОС от одного очень крупного производителя, можно заметить, что успехом сопровождается только каждая вторая.

  Так или иначе, от ошибок не уйти, но можно воздействовать на их количество, для этого стоит принять набор мер, чтобы понизить их количество:
  • использовать unit- и автоматизированное тестирование;
  • внедрить BDD;
  • уменьшить размер фич, вносить и публиковать изменения меньшего размера, а следовательно, упрощать систему;
  • заниматься рефакторингом :) меньшего размера, на постоянной основе, подобно ежедневной домашней уборке;
  • требовать от команды технической ответственности за разрабатываемую систему;
  • давать доступ к измененной/новой фиче ограниченному ряду лиц, но не всей аудитории сразу же - позволит выявить проблемы гораздо раньше;
  • начать использовать унифицированные архитектурные подходы для того, чтобы понизить разнообразие технических решений;
  • ввести и наладить процедуру технического надзора перед созданием новой фичи / внесением изменений, производить архитектурное ревью и контроль решений, фиксировать результаты и собирать рекомендации;
  • ввести сбор метрик по complexity, code quality и отслеживать эти показатели.
По моему опыту, от рефакторинга уйти не удастся, однако можно понизить “масштабы бедствия от него” :) внедрением выше перечисленных процедур. 


Если все таки переписывать, то какой план, или “Огласите весь список”

После того как разрешение на рефакторинг получено, необходимо у команды попросить:
  • список того, что будет сделано, запросить список конкретных измеряемых метрик, которые будут качественно улучшены;
  • архитектурное предложение/эскиз, что должно быть получено;
  • график выполнения работ;
  • список рисков;
  • тактику работы с рисками;
  • план, если рефакторинг не удастся завершить, да, именно план, когда все пропало.
Отдельно хочу выделить то, что от команды можно потребовать произвести рефакторинг таким образом, чтобы его можно было вывести в боевую систему в незаконченном виде и это никак не повлияло на систему. В этом случае инженеры будут ответственнее относиться к работе.

Из рекомендаций по производству рефакторинга могу посоветовать:
  • разбивайте код на отдельные слои;
  • следуйте архитектуре;
  • старайтесь писать компоненты/системы компактно и взаимозаменяемо;
  • понижайте связанность систем;
  • пишите как можно больше тестов;
  • стремитесь к связанности систем в соответствии с общими “протоколами/интерфейсами”.

P.S.:

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

Большое путешествие начинается с первого шага, а модернизация системы с маленьких побед с простыми и понятными улучшениями :) 

Не срезайте углы, не делайте хаков, вам с ними еще жить :)

Удачи и приятной разработки, ваш Капитан Очевидность :)

shutterstock_493900087.jpg

Последние статьи в блоге

Осенний апдейт карьеры: от -30% до -50% на курсы ноября!

Только сейчас: скидки от 30% до 50%* на ноябрьские курсы для тех, кто хочет быть на шаг впереди в IT. Практические программы помогут укрепить ключевые навыки и выйти на новый уровень профессиональной зрелости. Успейте подать заявку, чтобы воспользоваться предложением.

Новости
23 октября 2025

Как одновременно заварить кофе для 10 000 сотрудников — и еще 7 неожиданных вопросов архитектору ПО

Как убедить заказчика отказаться от Excel, зачем архитектору опыт кодинга и почему эволюция ПО похожа на эволюцию живых существ?

Новости
21 октября 2025

Как живые вебинары повышают эффективность ИТ-обучения

ИТ-рынок сегодня меняется стремительнее, чем когда-либо: появляются новые технологии, фреймворки и подходы.

Новости
06 октября 2025

ИИ в разработке ПО: преимущество или риск

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

Новости
24 сентября 2025

Чему нас учит ИИ: как стать идеальным сотрудником

Сейчас чаще говорят об этике использования ИИ — как не получить плагиат или не доверить слишком много, но при этом редко задумываются о другой стороне медали: этична ли наша работа?

Новости
12 сентября 2025

Как ИИ действительно влияет на продуктивность разработчика: неожиданные выводы из исследований

За последние пару лет у многих разработчиков в редакторах и IDE поселились новые «напарники» — всевозможные ИИ-инструменты. Обещания были впечатляющие: меньше рутины, быстрее релизы, код пишется почти сам. Но когда первые восторги улеглись и появились системные исследования, стало ясно: эффект от ИИ далеко не такой однозначный. Где-то он действительно ускоряет работу команд на 20%, а где-то, наоборот, тормозит опытных инженеров. И вот парадокс: даже там, где выигрыш в скорости очевиден, бизнес не всегда чувствует, что проекты двигаются быстрее.

Новости
08 сентября 2025

Сквозная логика: от бизнес-процесса к реализации без потерь

Главный принцип работы с проектной документацией — поддерживать её связность и актуальность. Любая, даже самая детальная схема (BPMN, Use Case, C4), мгновенно теряет ценность, если она конфликтует с другой. Узнаёте? Сначала все силы бросают на «личный кабинет», но после пары спринтов главным внезапно становятся «возвраты». В результате возникает опасный разрыв: цели проекта, реализуемый функционал и схемы, которые должны их описывать, живут своей жизнью. Документация превращается в «мёртвые зоны», которые больше не отражают реальность.

29 августа 2025

Заказная разработка ПО в IBS: безопасная разработка и доставка

В этой статье начальник отдела DevOps компании IBS Артур Галеев расскажет об опыте внедрения принципов безопасной разработки, используемых инструментах и нормативных актах, на которые стоит опираться.

Новости
26 августа 2025

Сертификация ИТ-специалистов: точная оценка ваших компетенций

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

Новости
22 августа 2025

Группа компаний IBS запускает национальную сертификацию для бизнес-аналитиков

Центр сертификации IBS запускает новую систему оценки квалификации бизнес-аналитиков, которая сочетает международные стандарты c особенностями российского рынка. Программа ориентирована на теоретическую базу и прикладные навыки, необходимые в работе бизнес-аналитика в современных ИТ- и цифровых проектах.

Жизнь компании
20 августа 2025

От разработчика к тренеру: как превратить экспертизу в стабильный доход

Часто к преподаванию переходят после достижения «карьерного потолка»: на уровне сеньора процессы отлажены, и новые вызовы исчезают. Однако вместо того чтобы долго преподавать за символическую плату, можно сосредоточиться на создании системного заработка. Разберём реальные способы: от коучинга до запуска курсов.

Новости
13 августа 2025

Установка и настройка брокера сообщений Kafka на Windows

Цель задания: научиться устанавливать и настраивать Apache Kafka на операционной системе Windows, а также выполнять базовые операции с топиками и сообщениями.

21 июля 2025

Почему Python? Полный разбор Python vs Java в ML

«Когда 9 из 10 курсов по машинному обучению используют Python — это не случайность. Это результат десятилетия эволюции инструментов, сообщества и образовательной экосистемы».

21 июля 2025

Что должен знать и уметь архитектор ПО в 2025 году

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

21 июля 2025

Памятка по документированию архитектурных решений

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

Новости
18 июля 2025

Летняя акция: учитесь онлайн с выгодой, не выходя из отпуска! До конца августа второй курс со скидкой 50%

Проведите лето с пользой для карьеры – второй курс со скидкой 50%!

09 июля 2025

5 курсов июля со скидкой 30%

Друзья, у нас остались последние места на курсах, которые стартуют в июле. Сейчас есть возможность записаться на обучение со скидкой 30%!

Новости
04 июля 2025

Карьерный трек аналитика: от базы к экспертизе

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

27 июня 2025

Почему именно сейчас стоит учиться на бизнес-аналитика уровня Middle. «Руководство BABOK» в подарок участникам программы!

Вы в ИТ, вам за 30. Вроде бы всё хорошо — есть работа, скиллы, стабильность. Но в воздухе — тревожность. Проекты замораживаются. Бизнес урезает бюджеты. От ИТ ждут не просто задач, а конкретного влияния на прибыль.

25 июня 2025

Уничтожит ли ИИ-генератор кода профессию разработчика?

С появлением ИИ-инструментов, а также в связи недавним анонсом Canva Code, который генерирует код за пару кликов, многие задумались: не станут ли такие инструмент угрозой для разработчиков? Давайте разберемся, есть ли здесь реальные риски, или это все же преувеличения.

23 июня 2025

Не нашли, что искали? — Просто напишите, и мы поможем

Корпоративное обучение Оценка персонала Сертификация О нас Стань тренером Блог
Пользователь только что записался на курс ""
Спасибо!
Форма отправлена успешно.