SlideShare une entreprise Scribd logo
1  sur  8
Télécharger pour lire hors ligne
Вступление?

Почему мы сделали свои A/B тесты

Как у нас устроены тесты

Доклад про архитектуру A/B
тестирования

Как бы нам все это хотелось чтобы работало
с высоты птичьего полета

Архитектура нашего решения

Как теперь все это дело работает

Оценка результатов
Немного о Badoo

Всякие цифры

Раньше мы делали тестирование на коленке
— выбирали маленькую страну, запускали
там что-то новое, и если нам повезло, и
пользователи этой страны не сваливали
гурьбой, то мы делали выводы по сравнению
либо с цифрами соседних стран, либо с
цифрами этой же страны ДО запуска теста.

У нас выросла продуктовая команда настолько, что
для всех идей стран не хватало

Зачем нам вообще A/B тесты?

Но...

Вступление?

Да и зачастую мы генерируем идеи, которые
пытаются улучшать один и тот же функционал сайта
разными путями

Мы хотим какой-то более достоверный способ
оценки эффективности новых фич

Для кого все это?

Сложность

Для сайтов, где пользователи так или иначе
индентифицированы, и есть возможность
долгосрочно отслеживать их поведение —
соц. сети, сайты объявлений, блоги с
рассылками, проекты, продающие что-то
через e-mail расслыки, разные коммьюнити,
банки, вообще проекты, где взаимодействие с
каждым клиентом долгосрочное

Несмотря на то, что конференция называется
Highload++, я уверяю, что представленную
здесь архитектуру может потянуть проект с
посещаемостью в 1000 чел/деньи тремя
программистами в штате. Закодить все, что
здесь рассказано на PHP займет меньше
недели одного человека. А результат, между
прочим, пожно вполне изменрять в живой
прибыли.
По итогам внутрикорпоративного отбора
победил Optimizely, который мы и пытались
использовать

jQuery

внешний CDN

JS-совместимость с rich JS сайтами — надо много
что писать руками

Прыгающий render страницы

проблемы

Языки — их нет, надо выкручиваться

Замены с переменными (пол, склонения) — та же
самая беда

Выбор пользователей по каким-то переменным типа
страны, пола — все надо делать в PHP-коде

Мы пробовали чужое

Очень ограниченное применение — нет API, с
мобильным приложением уже не
поэкспериментируешь

Большинство докладов про А/Б тестированоие — из
мира e-commerce, где все как-то быстро и просто.
Приходит пользователь — анализируем три
страницы — главную, страницу каталога, страницу
товара — далее воронка проаж — и оп, у нас
простая цель — покупка, и... следующий!

Мы — не интернет магазин, где каждый
пользователь покупает один раз и уходит

Но, главное, они вообще не то анализируют
что нужно

Почему мы сделали свои A/B тесты

Нам нужна статистика по большему количеству
параметров — и с большим сроком, чем от момента
захода на сайт до покупки

Мы хотим видеть эффект от новых фич в
изменившемся поведении пользователей
(долгосрочность)

Мы хотим видеть влияние тестов на какой-то
смежный функционал сайта, например увеличение
кол-ва чатов, продолжительности посещения

Гораздо большая применимость — WAP-сайт,
мобильное приложение, количественно-временной
функционал (типа времени посылки писем)

Выдерживает большие нагрузки

Плюсы
Никакого дурацкого JS c внешнего CDN с
прыгающими страницами, только PHP, только
хардкор

Весь нужный вам функционал типа поддержки
языков и склонений теперь доступен

Чем свое лучше и хуже

Придется проектировать и кодить свою систему

Придется поразбираться в теории вероятности

Минусы

Нагрузка теперь ваша — нужно место на дисках,
процессорное время

Статистику теперь тоже считаем сами — кодинг,
место, нагрузки

Сделать свой WYSIWYG-интерфейс
редактирования сложно (но и не нужно)
Новый вариант для всех
Письмо с плохим кликрейтом

Новый вариант для мальчиков

Новый вариант для девочек

Как у нас устроены тесты
теория
Структура теста
практика

Пример результатов
Подготавливаем набор шаблонов

или поведений, или констант, которые мы
будем тестировать

Задаем критерии отбора пользователей для
участия в тесте

Привязываем определенный шаблон/
поведение/значение переменной к каждому
юзеру, участвующему в тесте

Выбираем метрику, по которой мы будем
оценивать результат

Как бы нам все это хотелось чтобы
работало с высоты птичьего полета
Делаем так, чтобы у нас была статистика по
этой метрике с привязкой к user_id

Собираем информацию о том, какому
пользователю какой шаблон показывали

Запускаем тест — завершаем тест

Берем кого-то умного и анализируем
результаты
API

Функция посылки событий

Stats::sendEvent($event_type, $user_id)
Stats::sendEvent($event_type, $user_id,
$param)

По демону на машину-источник
Scribe

Один демон на машине-сборщике

Транспорт

Если можно посылать данные — они посылаются с
рабочих машин на машину-сборщик. Если нет,
собираются в буфере. (Не теряем данные, а пишем
на диск)

В итоге получаются файлы, сортированные по
каталогам

cкриншоты

Разбирает эти файлы, и кладет в
БД

Мультипоточный разбор с блокировками файлов (в
PHP — flock())

Система сбора статистики

События каждого типа — в отдельные таблицы

По одной таблице на день

Скрипт-процессор статистики

Предусмотрите возможность убить скрипт —
делайте вставку 1 файл — 1 транзакция

Выкидываем повторные события там, где это
можно (юзаем мемкеш)

Как ускорить запись данных?

Там, где нельзя — делаем BULK INSERT'ы

Не храните сырые данные — храните
аггрегированные данные. Аггрегируйте не в
MySQL

БД

Обычная СУДБ MySQL или Postgres

Контрольный вариант 0 (имя, значение)

Группа (критерии отбора)

Вариант 12

Вариант 23

Тест (имя, дата начала и конца, статус)

Контрольный вариант

Вариант
Группа
Вариант

Вариант

везде связь 1-к-M

все id со сквозной нумерацией
БД с тестами

Структура данных теста

id варианта однозначно определяет группу и
тест

Тест просто обязан иметь дату начала и
конца, а то они имеют обыкновение длиться
очень долго, пока кто-нибудь не заметит

Тут картинка о устройстве теста

Рассказ, что такое контрольный вариант
Структура теста

Группы должны не пересекаться

гомогенность группы

не гомогенна - бей на группы

правило один юзер — один вариант

Создание/редактирование тестов

Было бы неплохо — посмотреть, в какой тест/
вариант попадет конкретный юзер

Граф. интерфейс создания/редактирования
тестов
Отправить на страницу, которую тестируем и
показать выбранный вариант

Архитектура нашего решения

Проверяет непересекаемость групп

Выбирает, в каком тесте участвует
пользователь, выбирает группу и вариант

рассказ, что делает

Отправляет эти данные как событие
просмотра определенного варианта

Возвращает в код номер варианта/значение
переменной, которая определяет поведение,
либо null

null — значит что пользователь в тесте не
участвует

Да, по сути это событие показа, обычное
событие в системе сбора статистики, с одним
параметром — id варианта

Короткий тайм-аут на запись в Scribe
Теперь «наворачиваем» схему до
архитектуры А/Б тестирования

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

Распределение по остатку от деления user_id
% 2 — не хорошо
Распределение в рамкх одного теста
Распределение по crc32($user_id) % 2 —
хорошее

crc32($user_id) % 2 — значит все юзеры
контрольной группы теста 1 являются
членами контрольной группы теста 2, теста 3
итд — не хорошо
API

Функция выбора теста/варианта с уведомлением о
просмотре

Значит, надо делать crc32('{Test name}' .
$user_id) %2 — вроде хорошее?

Погодите, отдел дизайна тестирует розовую
шапку сайта, а отдел маркетинга — баннеры
с черным фоном, в итоге с нашего эмо—
сайта все посваливали — кого винить?

Распределение юзеров по тестам

Получается, тестировать надо так, чтобы не
было взаимовлияния тестов.

Обычно все делают так: $test_id = $user_id %
$num_running_tests
Распределение в рамках нескольких тестов
Такое распределение имеет печальные
последствия — при изменении кол-ва тестов
куча народу получает другой тест. Как
следствие — рузультаты невалидны.

Правильное решение — сделать так, чтобы
при изменении кол-ва запущенных тестов
пользователи как можно меньше
перемещались между тестами.

Вариант 1 — consistent hashing

Вариант 2 — заранее равномерно разбить
пользователей на 10-20 групп, и вручную
назначать каждому тесту группу.

Вариант 3 — выбирать и помечать тех, кто
еще ни в каком тесте

кеш между БД тестов и API

Тут можно еще делать подсчет хитов

Дорабатываете скрипт для создаия таблицы
фактов участия в тесте
скриншот из спотов

Копируете данные о тестах в таблицу со
статистикой

RAW sql: Берем человека с мозгами и лезем в
отчеты, где JOIN'им нужную статистику по user_id с
таблицей по фактам участия и таблицей с
информацией о тестах

Интерфейс анализа результатов

Делаем таким же методом автоматизированный
отчет

Бекофис-страница с графиками

Переносим данные в систему бизнес-аналитики и
анализируем там

И плюс теперь все это работает на двух
платформах!

картинка с 2 платформами
Распихиваете по коду статистику

дергает

Функция выбора теста/варианта, она же сама пишет
в статистику о просмотре варианта

Обработчик веб-запроса
показывает

Как теперь все это дело работает
В итоге у нас получается БД где есть таблицы
с фактами действий и есть таблица участия в
тесте. А также таблицы описывающие тесты

Анализируем результаты

Подготовленный шаблон с другим дизайном/другое
поведение
Можно ли им верить

Достоверность

Мин. размер группы

Идея смотерть клик-рейт — достаточно
узколобая

Оценка результатов
Надо делать полноценную систему аналитики

Что вообще смотреть

Выбираете 5-10 ключевых параметров —
частота посещения, сколько денег приносит,
сколько страниц в день просматривает,
retention rate и т. д.

Болезнь «среднего» (о том, что надо строить
гистограммы)

Обязательно сверять гомогенность групп по
4-5 ключевым параметрам

Contenu connexe

Tendances

Платформа SmartActors
Платформа SmartActorsПлатформа SmartActors
Платформа SmartActorsetyumentcev
 
Мониторинг качества работы вашего проекта
Мониторинг качества работы вашего проектаМониторинг качества работы вашего проекта
Мониторинг качества работы вашего проектаNikolay Sivko
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Yandex
 
Построение процесса тестирования производительности игрового клиента
Построение процесса тестирования производительности игрового клиентаПостроение процесса тестирования производительности игрового клиента
Построение процесса тестирования производительности игрового клиентаSQALab
 
Как 7 студентов и филолог делали сложный проект
Как 7 студентов и филолог делали сложный проектКак 7 студентов и филолог делали сложный проект
Как 7 студентов и филолог делали сложный проектEugeniy Tyumentcev
 
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)Ontico
 
Электронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaЭлектронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaRoman Zykov
 
Нагрузочное тестирование API. Как летать, а не ползать?
Нагрузочное тестирование API. Как летать, а не ползать?Нагрузочное тестирование API. Как летать, а не ползать?
Нагрузочное тестирование API. Как летать, а не ползать?IT61
 
Kib Rif 2015. Make money from your data
Kib Rif 2015. Make money from your dataKib Rif 2015. Make money from your data
Kib Rif 2015. Make money from your dataRoman Zykov
 
SECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодняSECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодняSECON
 
Panda - вебинар про Opencart для Myopencart
Panda - вебинар про Opencart для MyopencartPanda - вебинар про Opencart для Myopencart
Panda - вебинар про Opencart для Myopencartpanda-code
 
Micro Model Based Testing
Micro Model Based TestingMicro Model Based Testing
Micro Model Based TestingSQALab
 
HighLoad Junior '16 Как сравнить и выбрать хостинг-провайдера
HighLoad Junior '16 Как сравнить и выбрать хостинг-провайдераHighLoad Junior '16 Как сравнить и выбрать хостинг-провайдера
HighLoad Junior '16 Как сравнить и выбрать хостинг-провайдераИгорь Мызгин
 
User Friendly SEO by Promo.ua
User Friendly SEO by Promo.uaUser Friendly SEO by Promo.ua
User Friendly SEO by Promo.uaPromo.ua
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Nikolay Sivko
 
Мониторинг всех слоев web проекта (hl2015)
Мониторинг всех слоев web проекта (hl2015)Мониторинг всех слоев web проекта (hl2015)
Мониторинг всех слоев web проекта (hl2015)Nikolay Sivko
 
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016etyumentcev
 
Экономика проекта с точки зрения IT
Экономика проекта с точки зрения ITЭкономика проекта с точки зрения IT
Экономика проекта с точки зрения IToleg.bunin
 
От заката до рассвета | Максим Безуглый | Zlit Tech
От заката до рассвета | Максим Безуглый | Zlit TechОт заката до рассвета | Максим Безуглый | Zlit Tech
От заката до рассвета | Максим Безуглый | Zlit TechZlit
 
Нагрузочное тестирование
Нагрузочное тестированиеНагрузочное тестирование
Нагрузочное тестированиеSPB SQA Group
 

Tendances (20)

Платформа SmartActors
Платформа SmartActorsПлатформа SmartActors
Платформа SmartActors
 
Мониторинг качества работы вашего проекта
Мониторинг качества работы вашего проектаМониторинг качества работы вашего проекта
Мониторинг качества работы вашего проекта
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Построение процесса тестирования производительности игрового клиента
Построение процесса тестирования производительности игрового клиентаПостроение процесса тестирования производительности игрового клиента
Построение процесса тестирования производительности игрового клиента
 
Как 7 студентов и филолог делали сложный проект
Как 7 студентов и филолог делали сложный проектКак 7 студентов и филолог делали сложный проект
Как 7 студентов и филолог делали сложный проект
 
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
 
Электронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaЭлектронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark Scala
 
Нагрузочное тестирование API. Как летать, а не ползать?
Нагрузочное тестирование API. Как летать, а не ползать?Нагрузочное тестирование API. Как летать, а не ползать?
Нагрузочное тестирование API. Как летать, а не ползать?
 
Kib Rif 2015. Make money from your data
Kib Rif 2015. Make money from your dataKib Rif 2015. Make money from your data
Kib Rif 2015. Make money from your data
 
SECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодняSECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодня
 
Panda - вебинар про Opencart для Myopencart
Panda - вебинар про Opencart для MyopencartPanda - вебинар про Opencart для Myopencart
Panda - вебинар про Opencart для Myopencart
 
Micro Model Based Testing
Micro Model Based TestingMicro Model Based Testing
Micro Model Based Testing
 
HighLoad Junior '16 Как сравнить и выбрать хостинг-провайдера
HighLoad Junior '16 Как сравнить и выбрать хостинг-провайдераHighLoad Junior '16 Как сравнить и выбрать хостинг-провайдера
HighLoad Junior '16 Как сравнить и выбрать хостинг-провайдера
 
User Friendly SEO by Promo.ua
User Friendly SEO by Promo.uaUser Friendly SEO by Promo.ua
User Friendly SEO by Promo.ua
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)
 
Мониторинг всех слоев web проекта (hl2015)
Мониторинг всех слоев web проекта (hl2015)Мониторинг всех слоев web проекта (hl2015)
Мониторинг всех слоев web проекта (hl2015)
 
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
 
Экономика проекта с точки зрения IT
Экономика проекта с точки зрения ITЭкономика проекта с точки зрения IT
Экономика проекта с точки зрения IT
 
От заката до рассвета | Максим Безуглый | Zlit Tech
От заката до рассвета | Максим Безуглый | Zlit TechОт заката до рассвета | Максим Безуглый | Zlit Tech
От заката до рассвета | Максим Безуглый | Zlit Tech
 
Нагрузочное тестирование
Нагрузочное тестированиеНагрузочное тестирование
Нагрузочное тестирование
 

En vedette

Стартап: формирование технической команды
Стартап: формирование технической командыСтартап: формирование технической команды
Стартап: формирование технической командыSergey Xek
 
Ездим на батарейках
Ездим на батарейкахЕздим на батарейках
Ездим на батарейкахSergey Xek
 
Путь к Go на конкретном примере
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примереSergey Xek
 
real estate agent in patna 9304611353
real estate agent in patna 9304611353real estate agent in patna 9304611353
real estate agent in patna 9304611353Adore Global Pvt. Ltd
 
Иммуноблисс «скорая помощь» клеткам иммунной системы
Иммуноблисс «скорая помощь» клеткам иммунной системыИммуноблисс «скорая помощь» клеткам иммунной системы
Иммуноблисс «скорая помощь» клеткам иммунной системыЕлена Шальнова
 
The Hackathon Zoo
The Hackathon ZooThe Hackathon Zoo
The Hackathon ZooKevin Lewis
 
African agricultural development: lessons and challenges
African agricultural development: lessons and challengesAfrican agricultural development: lessons and challenges
African agricultural development: lessons and challengesfutureagricultures
 
Researchers - recommendations from AIGLIA2014
Researchers - recommendations from AIGLIA2014Researchers - recommendations from AIGLIA2014
Researchers - recommendations from AIGLIA2014futureagricultures
 
TEATRO DE LA SENSACIÓN-TRAGICOMEDIA Dossier+i the phantom
TEATRO DE LA SENSACIÓN-TRAGICOMEDIA Dossier+i the phantomTEATRO DE LA SENSACIÓN-TRAGICOMEDIA Dossier+i the phantom
TEATRO DE LA SENSACIÓN-TRAGICOMEDIA Dossier+i the phantomMiguel Muñoz de Morales
 
ながのシティプロモーションのキャッチフレーズ及びロゴマークについて
ながのシティプロモーションのキャッチフレーズ及びロゴマークについてながのシティプロモーションのキャッチフレーズ及びロゴマークについて
ながのシティプロモーションのキャッチフレーズ及びロゴマークについて長野市議会議員小泉一真
 
Exact MKB Cloud Barometer presentatie tijdens EuroCloud Awards
Exact MKB Cloud Barometer presentatie tijdens EuroCloud AwardsExact MKB Cloud Barometer presentatie tijdens EuroCloud Awards
Exact MKB Cloud Barometer presentatie tijdens EuroCloud AwardsPeter Vermeulen
 
Session 3 week 2 central tendency & dispersion
Session 3 week 2   central tendency & dispersionSession 3 week 2   central tendency & dispersion
Session 3 week 2 central tendency & dispersionRachel Chung
 
Mba724 s4 4 questionnaire design
Mba724 s4 4 questionnaire designMba724 s4 4 questionnaire design
Mba724 s4 4 questionnaire designRachel Chung
 
Perfomance based email маркетинг: как грамотно построить и получать прибыль.
Perfomance based email маркетинг: как грамотно построить и получать прибыль.Perfomance based email маркетинг: как грамотно построить и получать прибыль.
Perfomance based email маркетинг: как грамотно построить и получать прибыль.Ilya Botvinnikov
 
Power Notes Atomic Structure -Day 3
Power Notes   Atomic Structure -Day 3Power Notes   Atomic Structure -Day 3
Power Notes Atomic Structure -Day 3jmori1
 
Stop motion evaluation
Stop motion evaluationStop motion evaluation
Stop motion evaluationaq101824
 

En vedette (20)

Стартап: формирование технической команды
Стартап: формирование технической командыСтартап: формирование технической команды
Стартап: формирование технической команды
 
Ездим на батарейках
Ездим на батарейкахЕздим на батарейках
Ездим на батарейках
 
Путь к Go на конкретном примере
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примере
 
Perspectivas Empresariales 2016 - Bizkaia
Perspectivas Empresariales 2016 - BizkaiaPerspectivas Empresariales 2016 - Bizkaia
Perspectivas Empresariales 2016 - Bizkaia
 
real estate agent in patna 9304611353
real estate agent in patna 9304611353real estate agent in patna 9304611353
real estate agent in patna 9304611353
 
Иммуноблисс «скорая помощь» клеткам иммунной системы
Иммуноблисс «скорая помощь» клеткам иммунной системыИммуноблисс «скорая помощь» клеткам иммунной системы
Иммуноблисс «скорая помощь» клеткам иммунной системы
 
The Hackathon Zoo
The Hackathon ZooThe Hackathon Zoo
The Hackathon Zoo
 
African agricultural development: lessons and challenges
African agricultural development: lessons and challengesAfrican agricultural development: lessons and challenges
African agricultural development: lessons and challenges
 
01 05-14
01 05-1401 05-14
01 05-14
 
Researchers - recommendations from AIGLIA2014
Researchers - recommendations from AIGLIA2014Researchers - recommendations from AIGLIA2014
Researchers - recommendations from AIGLIA2014
 
TEATRO DE LA SENSACIÓN-TRAGICOMEDIA Dossier+i the phantom
TEATRO DE LA SENSACIÓN-TRAGICOMEDIA Dossier+i the phantomTEATRO DE LA SENSACIÓN-TRAGICOMEDIA Dossier+i the phantom
TEATRO DE LA SENSACIÓN-TRAGICOMEDIA Dossier+i the phantom
 
ながのシティプロモーションのキャッチフレーズ及びロゴマークについて
ながのシティプロモーションのキャッチフレーズ及びロゴマークについてながのシティプロモーションのキャッチフレーズ及びロゴマークについて
ながのシティプロモーションのキャッチフレーズ及びロゴマークについて
 
Exact MKB Cloud Barometer presentatie tijdens EuroCloud Awards
Exact MKB Cloud Barometer presentatie tijdens EuroCloud AwardsExact MKB Cloud Barometer presentatie tijdens EuroCloud Awards
Exact MKB Cloud Barometer presentatie tijdens EuroCloud Awards
 
Session 3 week 2 central tendency & dispersion
Session 3 week 2   central tendency & dispersionSession 3 week 2   central tendency & dispersion
Session 3 week 2 central tendency & dispersion
 
Mba724 s4 4 questionnaire design
Mba724 s4 4 questionnaire designMba724 s4 4 questionnaire design
Mba724 s4 4 questionnaire design
 
Perfomance based email маркетинг: как грамотно построить и получать прибыль.
Perfomance based email маркетинг: как грамотно построить и получать прибыль.Perfomance based email маркетинг: как грамотно построить и получать прибыль.
Perfomance based email маркетинг: как грамотно построить и получать прибыль.
 
Preghiera a San Michele Arcangelo E-book
Preghiera a  San Michele Arcangelo E-bookPreghiera a  San Michele Arcangelo E-book
Preghiera a San Michele Arcangelo E-book
 
Power Notes Atomic Structure -Day 3
Power Notes   Atomic Structure -Day 3Power Notes   Atomic Structure -Day 3
Power Notes Atomic Structure -Day 3
 
Jesica
JesicaJesica
Jesica
 
Stop motion evaluation
Stop motion evaluationStop motion evaluation
Stop motion evaluation
 

Similaire à Mind map для «Архитектура А/Б тестирования: сделай сам»

Разработка бизнес приложений (3)
Разработка бизнес приложений (3)Разработка бизнес приложений (3)
Разработка бизнес приложений (3)Alexander Gornik
 
О чем стоит подумать, приступая к разработке высоконагруженных систем
О чем стоит подумать, приступая к разработке высоконагруженных системО чем стоит подумать, приступая к разработке высоконагруженных систем
О чем стоит подумать, приступая к разработке высоконагруженных системArtem Volftrub
 
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...CodeFest
 
New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)Sergey Skvortsov
 
Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Media Gorod
 
Usability testing methods overview (SQA Days’13)
Usability testing methods overview (SQA Days’13)Usability testing methods overview (SQA Days’13)
Usability testing methods overview (SQA Days’13)Tatyana Tabakova
 
Знакомство с Online Test Pad
Знакомство с Online Test PadЗнакомство с Online Test Pad
Знакомство с Online Test Padgilraenanarion
 
Маркетинг мобильных приложений: чек-лист по запуску первой кампании
Маркетинг мобильных приложений: чек-лист по запуску первой кампанииМаркетинг мобильных приложений: чек-лист по запуску первой кампании
Маркетинг мобильных приложений: чек-лист по запуску первой кампанииNetpeak
 
Обзор методов юзабилити-тестирования
Обзор методов юзабилити-тестированияОбзор методов юзабилити-тестирования
Обзор методов юзабилити-тестированияSQALab
 
Андрей Уразов - Методы раннего обнаружения ошибок
Андрей Уразов - Методы раннего обнаружения ошибокАндрей Уразов - Методы раннего обнаружения ошибок
Андрей Уразов - Методы раннего обнаружения ошибокSQALab
 
Performance-маркетинг мобильных приложений
Performance-маркетинг мобильных приложенийPerformance-маркетинг мобильных приложений
Performance-маркетинг мобильных приложенийNetpeak
 
АНТОН СЕРПУТЬКО «Start performance testing from scratch» QADay 2019
АНТОН СЕРПУТЬКО «Start performance testing from scratch» QADay 2019АНТОН СЕРПУТЬКО «Start performance testing from scratch» QADay 2019
АНТОН СЕРПУТЬКО «Start performance testing from scratch» QADay 2019GoQA
 
Высокоинтерактивные прототипы пользовательского интерфейса - альтернатива Use...
Высокоинтерактивные прототипы пользовательского интерфейса - альтернатива Use...Высокоинтерактивные прототипы пользовательского интерфейса - альтернатива Use...
Высокоинтерактивные прототипы пользовательского интерфейса - альтернатива Use...QA Dnepropetrovsk Community (Ukraine)
 
Консалтинг высоконагруженных web систем
Консалтинг высоконагруженных web системКонсалтинг высоконагруженных web систем
Консалтинг высоконагруженных web системMedia Gorod
 
CodeFest 2012. Кузьмин В. — Как выстроить разработку сервиса под несколько мо...
CodeFest 2012. Кузьмин В. — Как выстроить разработку сервиса под несколько мо...CodeFest 2012. Кузьмин В. — Как выстроить разработку сервиса под несколько мо...
CodeFest 2012. Кузьмин В. — Как выстроить разработку сервиса под несколько мо...CodeFest
 

Similaire à Mind map для «Архитектура А/Б тестирования: сделай сам» (20)

Usability MobioLab
Usability MobioLabUsability MobioLab
Usability MobioLab
 
Load testing with Tsung
Load testing with TsungLoad testing with Tsung
Load testing with Tsung
 
Provecta pos 2
Provecta pos 2Provecta pos 2
Provecta pos 2
 
Разработка бизнес приложений (3)
Разработка бизнес приложений (3)Разработка бизнес приложений (3)
Разработка бизнес приложений (3)
 
О чем стоит подумать, приступая к разработке высоконагруженных систем
О чем стоит подумать, приступая к разработке высоконагруженных системО чем стоит подумать, приступая к разработке высоконагруженных систем
О чем стоит подумать, приступая к разработке высоконагруженных систем
 
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
 
New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)
 
Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169
 
Usability testing methods overview (SQA Days’13)
Usability testing methods overview (SQA Days’13)Usability testing methods overview (SQA Days’13)
Usability testing methods overview (SQA Days’13)
 
Знакомство с Online Test Pad
Знакомство с Online Test PadЗнакомство с Online Test Pad
Знакомство с Online Test Pad
 
Маркетинг мобильных приложений: чек-лист по запуску первой кампании
Маркетинг мобильных приложений: чек-лист по запуску первой кампанииМаркетинг мобильных приложений: чек-лист по запуску первой кампании
Маркетинг мобильных приложений: чек-лист по запуску первой кампании
 
Обзор методов юзабилити-тестирования
Обзор методов юзабилити-тестированияОбзор методов юзабилити-тестирования
Обзор методов юзабилити-тестирования
 
ProvectaPOS
ProvectaPOSProvectaPOS
ProvectaPOS
 
Сравнение инструментов для построения отчетов
Сравнение инструментов для построения отчетовСравнение инструментов для построения отчетов
Сравнение инструментов для построения отчетов
 
Андрей Уразов - Методы раннего обнаружения ошибок
Андрей Уразов - Методы раннего обнаружения ошибокАндрей Уразов - Методы раннего обнаружения ошибок
Андрей Уразов - Методы раннего обнаружения ошибок
 
Performance-маркетинг мобильных приложений
Performance-маркетинг мобильных приложенийPerformance-маркетинг мобильных приложений
Performance-маркетинг мобильных приложений
 
АНТОН СЕРПУТЬКО «Start performance testing from scratch» QADay 2019
АНТОН СЕРПУТЬКО «Start performance testing from scratch» QADay 2019АНТОН СЕРПУТЬКО «Start performance testing from scratch» QADay 2019
АНТОН СЕРПУТЬКО «Start performance testing from scratch» QADay 2019
 
Высокоинтерактивные прототипы пользовательского интерфейса - альтернатива Use...
Высокоинтерактивные прототипы пользовательского интерфейса - альтернатива Use...Высокоинтерактивные прототипы пользовательского интерфейса - альтернатива Use...
Высокоинтерактивные прототипы пользовательского интерфейса - альтернатива Use...
 
Консалтинг высоконагруженных web систем
Консалтинг высоконагруженных web системКонсалтинг высоконагруженных web систем
Консалтинг высоконагруженных web систем
 
CodeFest 2012. Кузьмин В. — Как выстроить разработку сервиса под несколько мо...
CodeFest 2012. Кузьмин В. — Как выстроить разработку сервиса под несколько мо...CodeFest 2012. Кузьмин В. — Как выстроить разработку сервиса под несколько мо...
CodeFest 2012. Кузьмин В. — Как выстроить разработку сервиса под несколько мо...
 

Plus de Sergey Xek

Формирование технической команды на старте
Формирование технической команды на старте Формирование технической команды на старте
Формирование технической команды на старте Sergey Xek
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхSergey Xek
 
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 То, что вы хотели знать о HandlerSocket, но не смогли нагуглить То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьSergey Xek
 
MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL Sergey Xek
 
Mysql+handlersocket=nosql
Mysql+handlersocket=nosqlMysql+handlersocket=nosql
Mysql+handlersocket=nosqlSergey Xek
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезныSergey Xek
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхSergey Xek
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезныSergey Xek
 
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнBadoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнSergey Xek
 
Pconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяныPconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяныSergey Xek
 
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...Sergey Xek
 
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Sergey Xek
 

Plus de Sergey Xek (12)

Формирование технической команды на старте
Формирование технической команды на старте Формирование технической команды на старте
Формирование технической команды на старте
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
 
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 То, что вы хотели знать о HandlerSocket, но не смогли нагуглить То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 
MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL
 
Mysql+handlersocket=nosql
Mysql+handlersocket=nosqlMysql+handlersocket=nosql
Mysql+handlersocket=nosql
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
 
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнBadoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
 
Pconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяныPconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяны
 
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
 
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
 

Mind map для «Архитектура А/Б тестирования: сделай сам»

  • 1. Вступление? Почему мы сделали свои A/B тесты Как у нас устроены тесты Доклад про архитектуру A/B тестирования Как бы нам все это хотелось чтобы работало с высоты птичьего полета Архитектура нашего решения Как теперь все это дело работает Оценка результатов
  • 2. Немного о Badoo Всякие цифры Раньше мы делали тестирование на коленке — выбирали маленькую страну, запускали там что-то новое, и если нам повезло, и пользователи этой страны не сваливали гурьбой, то мы делали выводы по сравнению либо с цифрами соседних стран, либо с цифрами этой же страны ДО запуска теста. У нас выросла продуктовая команда настолько, что для всех идей стран не хватало Зачем нам вообще A/B тесты? Но... Вступление? Да и зачастую мы генерируем идеи, которые пытаются улучшать один и тот же функционал сайта разными путями Мы хотим какой-то более достоверный способ оценки эффективности новых фич Для кого все это? Сложность Для сайтов, где пользователи так или иначе индентифицированы, и есть возможность долгосрочно отслеживать их поведение — соц. сети, сайты объявлений, блоги с рассылками, проекты, продающие что-то через e-mail расслыки, разные коммьюнити, банки, вообще проекты, где взаимодействие с каждым клиентом долгосрочное Несмотря на то, что конференция называется Highload++, я уверяю, что представленную здесь архитектуру может потянуть проект с посещаемостью в 1000 чел/деньи тремя программистами в штате. Закодить все, что здесь рассказано на PHP займет меньше недели одного человека. А результат, между прочим, пожно вполне изменрять в живой прибыли.
  • 3. По итогам внутрикорпоративного отбора победил Optimizely, который мы и пытались использовать jQuery внешний CDN JS-совместимость с rich JS сайтами — надо много что писать руками Прыгающий render страницы проблемы Языки — их нет, надо выкручиваться Замены с переменными (пол, склонения) — та же самая беда Выбор пользователей по каким-то переменным типа страны, пола — все надо делать в PHP-коде Мы пробовали чужое Очень ограниченное применение — нет API, с мобильным приложением уже не поэкспериментируешь Большинство докладов про А/Б тестированоие — из мира e-commerce, где все как-то быстро и просто. Приходит пользователь — анализируем три страницы — главную, страницу каталога, страницу товара — далее воронка проаж — и оп, у нас простая цель — покупка, и... следующий! Мы — не интернет магазин, где каждый пользователь покупает один раз и уходит Но, главное, они вообще не то анализируют что нужно Почему мы сделали свои A/B тесты Нам нужна статистика по большему количеству параметров — и с большим сроком, чем от момента захода на сайт до покупки Мы хотим видеть эффект от новых фич в изменившемся поведении пользователей (долгосрочность) Мы хотим видеть влияние тестов на какой-то смежный функционал сайта, например увеличение кол-ва чатов, продолжительности посещения Гораздо большая применимость — WAP-сайт, мобильное приложение, количественно-временной функционал (типа времени посылки писем) Выдерживает большие нагрузки Плюсы Никакого дурацкого JS c внешнего CDN с прыгающими страницами, только PHP, только хардкор Весь нужный вам функционал типа поддержки языков и склонений теперь доступен Чем свое лучше и хуже Придется проектировать и кодить свою систему Придется поразбираться в теории вероятности Минусы Нагрузка теперь ваша — нужно место на дисках, процессорное время Статистику теперь тоже считаем сами — кодинг, место, нагрузки Сделать свой WYSIWYG-интерфейс редактирования сложно (но и не нужно)
  • 4. Новый вариант для всех Письмо с плохим кликрейтом Новый вариант для мальчиков Новый вариант для девочек Как у нас устроены тесты теория Структура теста практика Пример результатов
  • 5. Подготавливаем набор шаблонов или поведений, или констант, которые мы будем тестировать Задаем критерии отбора пользователей для участия в тесте Привязываем определенный шаблон/ поведение/значение переменной к каждому юзеру, участвующему в тесте Выбираем метрику, по которой мы будем оценивать результат Как бы нам все это хотелось чтобы работало с высоты птичьего полета Делаем так, чтобы у нас была статистика по этой метрике с привязкой к user_id Собираем информацию о том, какому пользователю какой шаблон показывали Запускаем тест — завершаем тест Берем кого-то умного и анализируем результаты
  • 6. API Функция посылки событий Stats::sendEvent($event_type, $user_id) Stats::sendEvent($event_type, $user_id, $param) По демону на машину-источник Scribe Один демон на машине-сборщике Транспорт Если можно посылать данные — они посылаются с рабочих машин на машину-сборщик. Если нет, собираются в буфере. (Не теряем данные, а пишем на диск) В итоге получаются файлы, сортированные по каталогам cкриншоты Разбирает эти файлы, и кладет в БД Мультипоточный разбор с блокировками файлов (в PHP — flock()) Система сбора статистики События каждого типа — в отдельные таблицы По одной таблице на день Скрипт-процессор статистики Предусмотрите возможность убить скрипт — делайте вставку 1 файл — 1 транзакция Выкидываем повторные события там, где это можно (юзаем мемкеш) Как ускорить запись данных? Там, где нельзя — делаем BULK INSERT'ы Не храните сырые данные — храните аггрегированные данные. Аггрегируйте не в MySQL БД Обычная СУДБ MySQL или Postgres Контрольный вариант 0 (имя, значение) Группа (критерии отбора) Вариант 12 Вариант 23 Тест (имя, дата начала и конца, статус) Контрольный вариант Вариант Группа Вариант Вариант везде связь 1-к-M все id со сквозной нумерацией БД с тестами Структура данных теста id варианта однозначно определяет группу и тест Тест просто обязан иметь дату начала и конца, а то они имеют обыкновение длиться очень долго, пока кто-нибудь не заметит Тут картинка о устройстве теста Рассказ, что такое контрольный вариант Структура теста Группы должны не пересекаться гомогенность группы не гомогенна - бей на группы правило один юзер — один вариант Создание/редактирование тестов Было бы неплохо — посмотреть, в какой тест/ вариант попадет конкретный юзер Граф. интерфейс создания/редактирования тестов Отправить на страницу, которую тестируем и показать выбранный вариант Архитектура нашего решения Проверяет непересекаемость групп Выбирает, в каком тесте участвует пользователь, выбирает группу и вариант рассказ, что делает Отправляет эти данные как событие просмотра определенного варианта Возвращает в код номер варианта/значение переменной, которая определяет поведение, либо null null — значит что пользователь в тесте не участвует Да, по сути это событие показа, обычное событие в системе сбора статистики, с одним параметром — id варианта Короткий тайм-аут на запись в Scribe Теперь «наворачиваем» схему до архитектуры А/Б тестирования Не тестировать один и тот же функционал или что-то похожее рядом, чтобы не было взаимовл Распределение по остатку от деления user_id % 2 — не хорошо Распределение в рамкх одного теста Распределение по crc32($user_id) % 2 — хорошее crc32($user_id) % 2 — значит все юзеры контрольной группы теста 1 являются членами контрольной группы теста 2, теста 3 итд — не хорошо API Функция выбора теста/варианта с уведомлением о просмотре Значит, надо делать crc32('{Test name}' . $user_id) %2 — вроде хорошее? Погодите, отдел дизайна тестирует розовую шапку сайта, а отдел маркетинга — баннеры с черным фоном, в итоге с нашего эмо— сайта все посваливали — кого винить? Распределение юзеров по тестам Получается, тестировать надо так, чтобы не было взаимовлияния тестов. Обычно все делают так: $test_id = $user_id % $num_running_tests Распределение в рамках нескольких тестов Такое распределение имеет печальные последствия — при изменении кол-ва тестов куча народу получает другой тест. Как следствие — рузультаты невалидны. Правильное решение — сделать так, чтобы при изменении кол-ва запущенных тестов пользователи как можно меньше перемещались между тестами. Вариант 1 — consistent hashing Вариант 2 — заранее равномерно разбить пользователей на 10-20 групп, и вручную назначать каждому тесту группу. Вариант 3 — выбирать и помечать тех, кто еще ни в каком тесте кеш между БД тестов и API Тут можно еще делать подсчет хитов Дорабатываете скрипт для создаия таблицы фактов участия в тесте скриншот из спотов Копируете данные о тестах в таблицу со статистикой RAW sql: Берем человека с мозгами и лезем в отчеты, где JOIN'им нужную статистику по user_id с таблицей по фактам участия и таблицей с информацией о тестах Интерфейс анализа результатов Делаем таким же методом автоматизированный отчет Бекофис-страница с графиками Переносим данные в систему бизнес-аналитики и анализируем там И плюс теперь все это работает на двух платформах! картинка с 2 платформами
  • 7. Распихиваете по коду статистику дергает Функция выбора теста/варианта, она же сама пишет в статистику о просмотре варианта Обработчик веб-запроса показывает Как теперь все это дело работает В итоге у нас получается БД где есть таблицы с фактами действий и есть таблица участия в тесте. А также таблицы описывающие тесты Анализируем результаты Подготовленный шаблон с другим дизайном/другое поведение
  • 8. Можно ли им верить Достоверность Мин. размер группы Идея смотерть клик-рейт — достаточно узколобая Оценка результатов Надо делать полноценную систему аналитики Что вообще смотреть Выбираете 5-10 ключевых параметров — частота посещения, сколько денег приносит, сколько страниц в день просматривает, retention rate и т. д. Болезнь «среднего» (о том, что надо строить гистограммы) Обязательно сверять гомогенность групп по 4-5 ключевым параметрам