Переключатель функций в разработке программного обеспечения предоставляет альтернативу поддержанию нескольких ветвей функций в исходном коде . Условие в коде включает или отключает функцию во время выполнения . В гибких настройках переключатель используется в производстве для включения функции по требованию для некоторых или всех пользователей. Таким образом, переключатели функций действительно облегчают частый выпуск . Продвинутые стратегии развертывания, такие как канареечное развертывание и A/B-тестирование , проще в использовании. [1] [2]
Непрерывная поставка поддерживается переключателями функций, даже если новые релизы не развертываются в производстве непрерывно . Функция интегрируется в основную ветвь еще до ее завершения. Версия развертывается в тестовой среде один раз, переключатель позволяет включить функцию и протестировать ее. Циклы интеграции программного обеспечения становятся короче, и может быть предоставлена версия, готовая к запуску в производство. [3]
Третье применение техники — позволить разработчикам выпустить версию продукта с незавершенными функциями. Эти незавершенные функции скрыты (переключаются), чтобы они не отображались в пользовательском интерфейсе . Требуется меньше усилий для объединения функций в продуктивную ветку и из нее, и, следовательно, допускается множество небольших инкрементных версий программного обеспечения . [4]
Переключатель функций также называется переключателем функций , флагом функций , воротами функций , флипперами функций или условными функциями .
Переключатели функций по сути являются переменными , которые используются внутри условных операторов . Таким образом, блоки внутри этих условных операторов могут быть включены или выключены в зависимости от значения переключателя функций. Это позволяет разработчикам контролировать поток своего программного обеспечения и обходить функции, которые не готовы к развертыванию. Блок кода за переменной времени выполнения обычно все еще присутствует и может быть условно выполнен, иногда в пределах того же жизненного цикла приложения; блок кода за директивой препроцессора или закомментированный не будет исполняемым. Подход с флагами функций может использовать любой из этих методов для разделения путей кода на разных этапах разработки.
Основное применение переключателей функций — избежать конфликта, который может возникнуть при слиянии изменений в программном обеспечении в последний момент перед выпуском, хотя это может привести к долгу переключения . Долг переключения возникает из-за мертвого кода, присутствующего в программном обеспечении после того, как функция была включена навсегда, и создает накладные расходы. Эту часть кода следует удалять осторожно, чтобы не нарушить другие части кода.
Существует два основных типа переключения функций. Один из них — переключатель выпуска, который разработчик решает либо сохранить, либо удалить перед выпуском продукта в зависимости от его работы. Другой — переключатель бизнеса, который сохраняется, поскольку удовлетворяет иному использованию по сравнению со старым кодом.
Переключение функций можно использовать в следующих сценариях: [1]
Переключатели функций можно сохранить как: [5]
Группы функций состоят из переключателей функций, которые работают вместе. Это позволяет разработчику легко управлять набором связанных переключателей. [6]
Канареечный релиз (или канареечный запуск или канареечное развертывание) позволяет разработчикам иметь функции, постепенно тестируемые небольшой группой разработчиков. Флаги функций, как альтернативный способ выполнения канареечных запусков [7], и позволяют нацеливаться по географическим местоположениям или даже атрибутам пользователя. [8] Если производительность функции неудовлетворительна, то ее можно откатить без каких-либо неблагоприятных последствий. [9] Он назван в честь использования канареек для предупреждения шахтеров о токсичных газах ( канарейка шахтера ).
Мартин Фаулер утверждает, что переключатель выпуска, особый тип переключателя функций, «должен быть вашим последним выбором, когда вы имеете дело с запуском функций в производство». Вместо этого лучше разбить функцию на более мелкие части, каждую из которых можно реализовать и безопасно ввести в выпущенный продукт, не вызывая других проблем. [2]
Переключение функций используется многими крупными веб-сайтами, включая Flickr, [10] Disqus, [11] Etsy, [12] Reddit, [13] Gmail [14] и Netflix, [15], а также таким программным обеспечением, как Google Chrome Canary или Microsoft Office. [16]
{{cite web}}
: CS1 maint: numeric names: authors list (link)