Введение в А/Б-тестирование. Frontend, backend, server

Содержание

  1. Зачем нужны А/Б-тесты
  2. Какие технологические элементы нужны для проведения А/Б-тестов
    1. Сплит-система
      1. Работающие на клиенте
      2. Работающие на сервере
    2. Cookie
    3. Трекинг-поведения и подсчёт результатов
  3. Роли backend, frontend и сервера в проведении А/Б-тестов в web-приложении
    1. Роль backend/web-server (apache/nginx/…)
    2. Frontend

Вступление

Йо-йо! За несколько лет моей работы появилось очень много А/Б-тестов. Такое изменение связано с моим переходом в более крупную компанию и в более серьезные проекты, ошибка в которых может привести к большим финансовым потерям.

Когда я только начал проводить А/Б-тесты, у меня было много вопросов. Эти вопросы я задавал более опытным коллегам, которые делились со мной всем что знали сами. Уже довольно долгое время я самостоятельно организую техническую сторону проведения А/Б-тестов.

В данной статье хочу поделиться опытом с теми техническим специалистами, которые ещё никогда не проводили А/Б. Думаю, что эта статья станет чем-то между “А/Б для чайников” и “getting started”. Надеюсь, что материал будет для вас полезным. В этой статье я буду говорить о А/Б в контексте web-приложения (или сайте если так понятнее). Также это в полной мере будет соответствовать и для мобильных приложений (с учетом их специфики), и для проведения А/Б в экзотических средах (например tg-боты), всё будет зависеть от способов сбора аналитики.

Зачем нужны А/Б-тесты

В процессе нашей деятельности мы непрерывно стремимся улучшить наши финансовые показатели. Например, хотим, чтобы пользователи совершили больше покупок на нашем сайте или оформили больше подписок.

Для достижения данной цели выдвигаем гипотезы и изменяем наш продукт (web-приложение в данной статье). Однако мы не можем на 100% быть уверенными, что то, что мы придумали будет приносить нам больше профита. Могут существовать нюансы, которые мы упустили или вовсе не знали о них.

В случае если наше изменение негативное, то мы можем получить значительное ухудшение финансовых результатов. Чтобы избежать больших финансовых потерь как раз используют А/Б-тесты.

А каким путём это происходит?! А/Б-тест делает так, чтобы изменение появилось лишь у части пользователей.

Итог: А/Б-тесты используют для минимизации возможных финансовых потерь, в связи с изменением продукта, путём предоставления изменённого продукта только части пользователей.

Какие технологические элементы нужны для проведения А/Б-тестов

Для проведения А/Б-теста в web-приложении нужны следующие технологические элементы:

  • Само приложение (сайт)
  • Сплит-система
  • Cookie
  • Система трекинга поведения (веб-аналитики) и система подсчета финансовых результатов

Сплит-система

Для проведения А/Б необходимо разделить пользователей на две группы (А и Б, но названия могут быть иными). Для этого разделения и нужна сплит-система. По сути это некоторая программа (код, сервис), которая помещает пользователя в ту или иную группу (выборку) на основании некоторой конфигурации.

В конфигурацию сплит-системы как правило входят следующие параметры:

  • Название эксперимента (для его идентификации)
  • Разделение групп А и Б по процентам (например в А будут 80% всех пользователей сайта, в Б 20%)
  • Процент трафика (определяет какой процент от всех пользователей сайта попадут в А/Б-тест)
  • Фильтры
    • регион
    • страница
    • параметры запроса
    • прочие

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

Типы сплит-системы

Сплит- системы бывают разными и имеют свои недостатки и преимущества.

Системы работающие на клиенте 

Это системы, которые осуществляют идентификацию пользователя и присвоение группы теста в браузере пользователя. Они подключаются с помощью JavaScript на страницу.

Минусы таких систем:

  • влияние на быстродействие нашей страницы
  • загрузка сразу на страницу и текущий, и новый (увеличивается размер бандла если это например react)
  • загружаются несинхронно, из-за чего мы получаем данные о группе пользователя не сразу
  • контент на странице моргает (фликеры)
  • пользователь может попасть в разные группы теста (рассмотрим, когда будем говорить о cookie)

Хочу остановиться на моргании контента и как это связано со сплит-системой. Как правило для нашего А/Б мы меняем содержание на странице для разных групп. Когда пользователь загружает страницу, он видит привычный ему контент. Позже загружаются данные из сплит-системы и если он попал в тест, то мы меняем ему содержание на то, которое нужно для теста. Именно из-за этого появляется фликер (моргание), оно довольно раздражающее. Фликера можно избежать, однако это потребует от вас технических ухищрений.

Примеры систем:

  • google optimize
  • Яндекс Метрика А/Б

Системы работающие на сервере

Сплит-системы могут определять группу пользователя на backend или web-сервере (nginx, apache). Если данные о группе пользователя были определены на web-сервере, то мы их можем передать с помощью cookie на backend, а backend может сразу передать группу для рендера во фронтенд (если у вас ssr) и пользователь сразу получит только тот контент, который соответствует его группе А/Б-теста

Минусы:

  • если системе нужны внешние данные, то скорость ответа сервера увеличится.

Примеры систем:

Cookie

Когда пользователь попал в ту или иную группу, нам важно запомнить её на протяжении всего времени проведения теста. Это требуется, чтобы при оценке финансовых результатов мы были уверенны, что пользователь видел данные (функции, контент), соответствующие его группе теста. Таким образом мы сможем сделать вывод о качестве нашего изменения.

Для сохранения группы используются cookie. В cookie можно хранить данные о группе в открытом или зашифрованном виде. Это зависит от вашей сплит-системы и прочих ваших соображений.

Есть разница в том, каким образом вы устанавливаете куки. Куки могут быть установлены в браузере, а могут через сервер. Дело в том, что некоторые браузеры принудительно мешают трекингу поведения пользователя и ограничивают для этого срок жизни cookie, установленный на клиенте (в браузере). Например, Safari ограничивает срок жизни клиентских cookie одной неделей. Как правило А/Б-тесты длятся дольше и у вас не будет гарантии того, что один и тот же пользователь будет попадать в одну и ту же группу.

Лучше устанавливать cookie на сервере с помощью передачи заголовка Set-Cookie

Трекинг-поведения и подсчёт результатов

При А/Б-тесте мы фиксируем состояние “ДО” и “ПОСЛЕ”. Поэтому вы должны знать какое “ДО”. Ваше web-приложение должно использовать системы web-аналитики и передавать в них события (особенно важно о покупках, конверсии, воронке).

Важно чтобы у вас уже была web-аналитика ещё за несколько месяцев до запуска А/Б, чтобы было с чем сравнить. А так же данные web-аналитики должны соответствовать финансовым данным.

При подсчете результатов с помощью web-аналитики вам потребуется некоторый фильтр, чтобы разделять пользователей, которые попали в нужную группу А/Б и теми, кто не попал. Таким фильтром может быть cookie или событие web-аналитики. Заранее продумайте этот нюанс и протестируйте ваше решение на жизнеспособность.

В случае если вы выбрали cookie, вам нужно будет сделать следующее:

  • договориться с аналитиками о названии cookie и правилах формирования её значения
  • при попадании пользователя в какую-то из групп, устанавливать cookie согласно правилам
  • при подсчёте аналитики нужно смотреть на значение cookie и считать результаты

Роли backend, frontend и сервера в проведении А/Б-тестов в web-приложении

Backend/web-сервер

Ваш backend или web-сервер должны прочитать cookie, воспользоваться сплит-системой и определить в какую группу попадает пользователь. Если ранее не были установлены cookie для теста, то установить их с помощью заголовка Set-Cookie с нужным значением, в котором будет указана группа и дата истечения её срока (дата окончания А/Б-теста). Далее backend должен передать данные на frontend.

Если сплит-система работает на frontend, то вышеперечисленные задачи будут выполняться на клиенте (в браузере)

Frontend

В задачи frontend входят:

  • получение данных о группе теста
  • в зависимости от группы показать тот или иной контент