Содержание
Рефакторинг кода — определение понятия
Рефакторинг (в переводе «переработка») кода — это процедура «чистки», совершенствования кода и устранения его недостатков, целью которой является оптимизация качества написанной на нем программы. В процессе рефакторинга код становится более понятным, поддерживаемым и структурированным. Это приводит к возрастанию производительности программы и уменьшению ее сложности без изменения функционального поведения, работоспособности и стабильности.
Модифицируется плохо читаемый, технически устаревший или трудный в поддержке код. Убираются излишества и нагромождения, функции и их взаимосвязи становятся четче видны. Процесс рефакторинга упрощает сопровождение кода, обеспечивает возможность его модификации и масштабируемости.
Важно не путать рефакторинг с оптимизацией программы или дебаггингом. У этих процессов разные цели. Оптимизация проводится ради улучшения производительности программы, а дебаггинг — для устранения ошибок в ее работе. При этом код может стать еще более громоздким, хаотичным и нечитаемым — поскольку его улучшение не является приоритетным при оптимизации и дебаггинге. Все эти процедуры можно совмещать и выполнять параллельно, однако практика показывает, что для достижения приемлемого качества требуется уделить внимание каждому из процессов отдельно.
Функции и цели рефакторинга
Отказ от модальности
Под отказом от модальности подразумевается функция автоматического преобразования модальных методов и участков кода на асинхронные аналоги.
В ранних версиях программ на платформе «1С:Предприятие» использовались модальные окна для ввода пользователем информации с целью запуска дальнейшей цепочки действий. При отображении модального окна и вплоть до его закрытия блокировался весь остальной интерфейс программы. С появлением веб-клиента и переходом на мобильные платформы выяснилось, что модальные окна вызывают множество проблем и неудобств, зачастую неразрешимых — в частности, отсутствие поддержки модальных окон и их блокировка в браузерах. В результате был разработан механизм, позволяющий преобразовывать модальные вызовы в асинхронные процедуры как автоматически, так и вручную.
В конфигураторе 1С механизм преобразования модальных фрагментов кода был объединен с функцией рефакторинга исходя из тех соображений, что без рефакторинга отказ от модальности недостаточно эффективен.
Предусмотрена возможность проанализировать и преобразовать модальные вызовы не только отдельно, но и во всей конфигурации целиком.
Общие средства рефакторинга
Рефакторинг синхронных вызовов
Большая часть кода 1С — синхронная, выполняемая последовательно. Однако, когда с кодом 1С взаимодействуют извне — например, пользователь, веб-сервис, файловая подсистема, операционная система — платформа приостанавливает выполнение кода до завершения внешнего действия. Для повышения скорости работы появились асинхронные аналоги, не блокирующие выполнение кода.
Посредством рефакторинга можно быстро преобразовать синхронные вызовы в асинхронные. Так выглядит процедура с использованием синхронных методов в конфигураторе:
Вызовете меню «Рефакторинг → Нерекомендуемые синхронные вызовы», пункт «Преобразовать вызовы модуля». Все синхронные вызовы в модуле будут изменены на асинхронные, и при необходимости будет создана цепочка процедур обработчиков ожидания:
Если нужно преобразовать только один отдельный метод в асинхронный, выделите его и в меню «Рефакторинг → Нерекомендуемые синхронные вызовы» выберите пункт «Преобразовать вызов», далее при необходимости измените имя обработчика оповещения.
Любой участок кода без ключевого слова «Возврат» можно выделить при помощи меню «Рефакторинг» в отдельный метод. Платформа автоматически анализирует используемые переменные и предлагает процедуру или функцию. Подобным образом можно переименовывать метод сразу во всех модулях, где он вызывается, а также создавать обработку оповещений.
Для оформления комментариев к методу достаточно воспользоваться пунктом меню «Рефакторинг → СоздатьОписаниеПроцедуры» или «СоздатьОписаниеФункции». Получится заготовка комментария, которую можно заполнить, дополнив описание и прописав типы параметров, и он корректно отобразится в контекстной подсказке при вызове метода:
Когда стоит заниматься рефакторингом
Рефакторинг может быть ситуативным или запланированным. В первом случае его проводят в определенных обстоятельствах: после добавления внушительного фрагмента кода, перед включением в проект нового разработчика, по результатам тестирования или из-за увеличившихся трудозатрат программистов.
Остановимся на варианте, когда рефакторинг включен в план работы над проектом. Практика показывает, что плановый рефакторинг проводится более комплексно и качественно, чем спонтанный и вынужденный. Это объясняется, в первую очередь, тем, что под него выделено время и другие ресурсы.
Итак, когда целесообразно произвести рефакторинг:
-
Перед стартом нового спринта в период проведения регрессионного тестирования.
-
Перед добавлением новой функциональности.
-
По заранее утвержденному плану — например, после каждых трех спринтов.
-
В периоды низкой активности на проекте, когда у команды есть ресурсы внимательно отнестись к процессу рефакторинга, уделив время изучению кода, написанию тестов и документированию внесенных изменений.
Дополнительным аргументом за регулярность рефакторинга выступает тот факт, что при переработке небольших участков кода вероятность возникновения ошибок гораздо ниже, чем при масштабных и радикальных преобразованиях. На небольшом фрагменте гораздо легче отследить изменения и при необходимости осуществить откат.
Плановый процесс рефакторинга проходит через несколько этапов:
- Определение участков кода, требующих проверки и структуризации, посредством тестирования, код-ревью или использования статических анализаторов.
- Обеспечение кода набором модульных, функциональных или интеграционных тестов, позволяющих контролировать отсутствие изменения функциональности и других нарушений в ходе рефакторинга.
- Последовательный процесс рефакторинга, осуществляемый небольшими «порциями»: удаление дубликатов, «мёртвого» кода, избыточных комментариев, переименование переменных, разбиение больших функций на меньшие, улучшение структуры условных операторов, применение принципов SOLID.
- Тестирование после каждого изменения для подтверждения корректности работы кода.
- Документирование существенных изменений в системе контроля версий.
- Код-ревью с другими участниками команды.
- Слияние прошедшего рефакторинг кода с основной веткой.
- Мониторинг поведения программы на предмет соблюдения функциональности, производительности, стабильности и других ключевых метрик ее работы.
Если не выполнять рефакторинг регулярно, велики риски откладывания «на потом», в результате чего замусоренность и нелогичность кода могут вырасти как снежный ком.
При бессистемном рефакторинге, когда разработчики сходу модифицируют большой объем кода, велики риски дойти до точки невозврата, обнаружить частичное обрушение функционала программы и долго разбираться с последствиями.
Помощь в рефакторинге кода от специалистов компании Первый Бит
Специалисты компании «Первый Бит» окажут необходимую помощь в рефакторинге кода как на регулярной основе, так и разово. Мы используем весь спектр современных технологий автоматизации, при этом осуществляя контроль и анализ вручную, отслеживая и обеспечивая соблюдение качества выполнения всех процессов.
Произведя обследование, мы выберем наиболее подходящие методологии и инструменты для проведения рефакторинга, создадим и проведем тесты, убедимся в успешности преобразований. Наши специалисты — профессионалы, имеющие годы опыта в качестве разработчиков, тестировщиков, системных архитекторов.