15 ноября 2017 2955
В жизни каждого проекта возникает такой момент, когда поднимается вопрос о рефакторинге. Технические специалисты хотят чего-то нового, модного и интересного в проекте. Бизнес требует новой функциональности быстрее и быстрее. Команда говорит о том, что тяжело вносить изменения, и требуется рефакторинг. Знакомая ситуация? 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

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

Разработка видеокурса «Angular. Продвинутый уровень» для ИТ-команды оператора связи

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

Новости
20 августа 2026

Спецпредложение на курсы по Astra Linux

Учебный центр IBS, авторизованный учебный центр «Группы Астра», объявляет о специальной цене на официальные курсы по операционной системе Astra Linux Special Edition 1.8.

Новости
17 августа 2026

ИИ-агенты в ERP-системах: каковы глобальные тренды и каким путем идет Россия

Ведущие ERP-вендоры переводят ИИ в режим автономных операций. В России этот сценарий пока не реализуется: западные вендоры ушли, облачные ИИ-релизы недоступны, регуляторы требуют переходить на суверенный контур и локальные LLM. О развитии рынка и стратегиях для бизнеса — в материале IT-World.

Новости
11 августа 2026

Саммари вебинара «ИИ-инструменты в работе архитектора ПО»

Дмитрий Овчаренко, технический директор с 15-летним опытом в архитектуре ПО, на сквозном примере стартапа — платформы для кондитеров — показал, как ИИ помогает архитектору ускорить работу на всех этапах: от чистого листа до готовых артефактов для команды.

Новости
07 августа 2026

Контроль качества ИИ-систем: от теории к практике

На результаты внедрения искусственного интеллекта в компаниях влияет сложный комплекс факторов. Для получения эффективного решения необходим контроль его качества и устранение узких мест на протяжении всей работы над проектом. О том, как этого добиться, рассказали заместитель директора центра перспективных разработок IBS Денис Воденеев и старший аналитик группы Data Science IBS Илья Гайдуков.

Новости
05 августа 2026

Саммари вебинара «Искусственный интеллект для бизнес-аналитика. Автоматизация для усиления экспертизы»

Максим Охманюк, эксперт с 25-летним опытом в IT, бизнес-анализе и управлении проектами, разобрал, как ИИ становится инструментом усиления аналитика, а не его заменой.

Новости
31 июля 2026

Как мы проектировали систему оценки ИТ-персонала для федерального ритейлера

В Учебном центре IBS мы разрабатываем методологию оценки персонала под задачи конкретного клиента. В крупной федеральной розничной сети с десятками ИТ-ролей и разрозненными критериями уровней специалистов это потребовало создания единой системы с нуля. Рассказываем, как это было.

28 июля 2026

Будущее разработки ПО: от кода к оркестрации агентов

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

Новости
23 июля 2026

IBS запускает независимую сертификацию для тестировщиков ПО

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

21 июля 2026

Внедрение BI-систем: почему проект может не дать результатов

Реализация системы бизнес-аналитики (BI) может пройти технически гладко, но не принести ожидаемого эффекта компании. Причина обычно не в самой платформе, а в организации работы над проектом. Начальник отдела витрин данных и аналитики IBS Анна Филиппова поделилась взглядом на то, почему возникают такие ситуации и как их избежать.

17 июля 2026

Саммари вебинара «Проектирование высоконагруженной системы на примере агрегатора авиабилетов»

Алексей Додонов, эксперт с 20-летним опытом в ИТ, на сквозном кейсе разобрал эволюцию архитектуры стартапа по продаже авиабилетов — от монолита до распределённой системы, и как команда решала проблемы производительности на каждом этапе.

16 июля 2026

Бесплатный вебинар «Результативный ИИ в бизнесе: как внедрять безопасно, измеримо и с реальной пользой»

Искусственный интеллект — это уже не просто тренд, а рабочий инструмент. Но как перейти от пилотов и экспериментов к системному процессу с понятными метриками и управляемыми рисками?

Новости
03 июля 2026

ИИ в бизнесе: почему экономия на зарплате не всегда равна прибыли

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

Жизнь компании
18 июня 2026

Саммари вебинара «Техсобес на Java: как системный подход и работа с ИИ превращают стресс в оффер»

Владимир Низов, технический директор с 10-летним стажем и эксперт Учебного центра IBS, рассказал, почему кандидаты проваливают технические интервью и как этого избежать. Отдельно разобрал работу с ИИ. Главное: заучивать тысячи страниц не нужно. Достаточно освоить индексный подход и единый паттерн системного дизайна. А ИИ воспринимать как инструмент с чёткими ограничениями.

Новости
09 июня 2026

Опыт развертывания корпоративной/ведомственной ИИ-инфраструктуры

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

Новости
02 июня 2026

«Аниматор с провалами памяти»: 6 ограничений ИИ, которые не дают вам писать качественный код

Вы когда-нибудь просили ИИ написать метод на Spring Boot, получали красивый, идеально отформатированный код, а он не работал? Потом вы копали глубже и находили, что нейросеть использовала RestTemplate вместо WebClient, забыла про @Transactional, а в методе с @PreUpdate пыталась изменить данные, которые уже ушли в SQL. И вы думали: «Ну, нейросеть же глупая». Нет. Не глупая. Она просто пишет код не как человек.

Новости
28 мая 2026

Роль и место России в мировой гонке в сфере ИИ

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

Новости
21 мая 2026

Систематизация ИИ-компетенций: курсы под роли, карты эффективности и модули в комплексных программах

Учебный центр IBS систематизировал подход к развитию навыков работы с искусственным интеллектом. Хаотичное использование нейросетей, как показала практика, не даёт измеримого эффекта. Новое направление построено так, чтобы ИИ решал конкретные бизнес-задачи, а не просто ускорял рутину.

Новости
18 мая 2026

Как защитить бизнес и данные при внедрении ИИ

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

Новости
13 мая 2026

Искусственный архитектор: как нейросети справляются с проектированием ПО

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

Новости
24 апреля 2026

Нужна помощь? Оставьте заявку, и мы свяжемся с вами в ближайшее время

Согласен получать на e-mail информационные рассылки о новостях Учебного центра IBS
Корпоративное обучение Бесплатные семинары Оценка персонала Сертификация О нас Стать тренером Блог Личный кабинет
Пользователь только что записался на курс ""
Спасибо!
Форма отправлена успешно.