Что такое feature toggle и какие виды существуют?
Что проверяют
Понимаете ли вы, что флаг добавляет продукту ещё одно измерение, и тестировать приходится оба состояния, а иногда их комбинации. Следом обычно спрашивают, как вы строите тест-план для фичи под флагом и что делать со старыми флагами.
Как отвечать
Feature toggle (feature flag) это условие в коде, которое включает или выключает функциональность по внешней настройке, без новой сборки и деплоя. Код обеих веток уже на проде, меняется только значение флага. Устоявшаяся классификация взята из статьи Пита Ходжсона на сайте Мартина Фаулера:
- release toggles: прячут недоделанную фичу, чтобы вливать код в основную ветку каждый день. Живут дни или недели и удаляются после релиза;
- experiment toggles: делят пользователей на группы для A/B-теста, решение принимается на каждый запрос по пользователю;
- ops toggles: операционные рубильники. Отключают тяжёлую функцию под нагрузкой или при сбое внешнего сервиса, некоторые живут годами как аварийный выключатель;
- permission toggles: открывают функцию части пользователей: бета-тестерам, сотрудникам, платному тарифу. Тоже долгоживущие.
Инструменты: LaunchDarkly, Unleash, Flagsmith, GrowthBook, а стандарт OpenFeature даёт единый API поверх любого из них. Нередко флаги живут и в собственной таблице настроек.
Что проверяет QA: фичу во включённом и выключенном состоянии, переключение флага на живой сессии, значение по умолчанию, если сервис флагов недоступен, и то, что выключенная фича не торчит наружу через API или прямую ссылку. Для нескольких связанных флагов нужна матрица комбинаций, хотя бы попарная. В автотестах флаг задают явно через окружение или подмену провайдера, а не полагаются на текущее значение на стенде.
Где спотыкаются
Называют release toggle инструментом A/B-тестов. Это разные виды: один про незаконченный код, другой про эксперимент на пользователях.
Тестируют только включённое состояние. Выключенное ломается чаще, потому что его никто не открывает до момента отката.
Не поднимают вопрос удаления. Флаг, который год включён у всех, это мёртвая ветка кода, и после её удаления тоже нужен регресс.