Инструменты для A/B-тестирования iOS-приложений

e9109ce9288d410daaf53f0763e58f86.png
В данной статье я рассмотрю несколько инструментов для A/B-тестирования мобильных приложений с примерами и дам их краткую характеристику. Для успешного проведения тестирования также необходим сервис аналитики, в котором можно сравнивать результаты. Независимые сервисы аналитики мы сегодня рассматривать не будем, но затронем те возможности, которые есть внутри инструментов, о которых пойдет речь.

Что такое A/B-тестирование?
A/B-тестирование — метод сравнения двух или более вариантов представления элементов сайта или мобильного приложения между собой с целью определить лучший из них и принять в качестве искомого в дальнейшем, чтобы в конечном итоге улучшить UX. Части пользователей демонстрируется версия сайта с одним расположением элементов на экране, остальным — с другим. Сравнение нескольких вариантов проводится одновременно в один и тот же период времени. Если вы подумываете о том, чтобы внедрить A/B-тестирование у себя на проекте, рекомендую почитать статью с массой полезных ссылок — от помощи в составлении тестов до оценки результатов. А вот в этом материале разобраны распространенные ошибки: недостаточно продолжительный промежуток времени для A/B-тестирования, пересечение экспериментов между собой, малая база пользователей и так далее.

A/B-тестирование мобильных приложений


Существует большое количество сервисов, позволяющих проводить A/B-тестирование сайтов, но если вы хотите использовать данный метод на мобильных приложениях, то здесь тоже есть из чего выбрать. Необходимый минимум для такого рода сервисов состоит из создания переменных и распределения их между аудиторией. На разработчиках приложения лежит обязанность правильно интерпретировать эти переменные: прямая замена текстовых и числовых данных в приложении, модификация интерфейса на основании значений.

В некоторых сервисах есть удобный визуальный редактор, позволяющий без изменения приложения создавать различные вариации. Но функциональность таких редакторов всё-таки сильно ограничена, с помощью них, например, не получится изменить интерфейс какого-то экрана так, чтобы при других модельных данных этот экран отображался стандартным образом. Для фреймворка это будет один и тот же экран, и изменения будут применяться повсеместно.

Перед нами стояла задача сравнить как текстовые варианты переменных (тексты ошибок, подсказок), так и изменение интерфейса приложения (например, наличие бокового меню и таббара). Из этого исходили при составлении нашего шорт-листа инструментов для A/B-тестирования. Все сервисы, о которых пойдет речь дальше, предоставляют SDK для iOS и Android, c Windows Phone сложнее, в этом случае использование сервисов возможно через HTTP-запросы.

Apptimize


apptimize.com
image
Есть три способа для создания варианта A/B-тестирования:

  1. Визуальный (создается с помощью визуального редактора).
    Позволяет в режиме реального времени с помощью визуального редактора изменить атрибуты элементов интерфейса (текст в UILabel, изображение в UIImageView). Измененное состояние будет новым вариантом:
    image
  2. Блоки кода.
    Позволяет варьировать выполнение операций, например:
    [Apptimize runTest:@"Dummy test" withBaseline:^{
       //Базовая конфигурация 
    } andVariations:@{@"variation1": ^{
        //Альтернативная конфигурация
    }}];
    
    

  3. Динамические переменные.
    Варианты формируются в зависимости от разных значений. Переменные объявляются вне класса с помощью макросов
    ApptimizeString(name, value), ApptimizeInt(name, value), ApptimizeDouble(name, value), ApptimizeBoolean(name, value), ApptimizeArrayOfStrings(name, value), ApptimizeDictionaryOfStrings(name, value), ApptimizeArrayOfInts(name, value), ApptimizeDictionaryOfInts(name, value), ApptimizeArrayOfDoubles(name, value) ...
    
    

    Альтернативные значения переменных задаются через веб-сайт. Например:
    ApptimizeString(screenName, @"стандартное значение");
    
    

    При создании вариантов есть возможность выбрать базу пользователей для тестирования.

    Фреймворк позволяет логировать события:

    [Apptimize track:@"event name"] 
    [Apptimize track:@"event name" value:] 
    
    

    Также возможна агрегация событий других сервисов аналитики: Google Analytics, Mixpanel, Flurry, Localytics, Omniture.

    Цена и количество пользователей: есть ограниченная бесплатная версия, 300$/месяц до 100 000 пользователей, выше — не указано.


Optimizely


optimizely.com

Сервис предоставляет те же три способа создания вариантов:

  1. Визуальный
    974b70aec2cf4e1687d39e06ff3de563.png
  2. Блоки кода
    [Optimizely codeBlocksWithKey:myCheckoutBlocksKey
                           blockOne:^{
            // Первая конфигурация
        }
                           blockTwo:^{
            // Вторая конфигурация
       }
                       defaultBlock:^{
            // Базовая конфигурация
       }];
    
    

  3. Переменные
    OptimizelyVariableKeyForString(screenName, @"Hello");
    
    

    Как видим, возможности c Apptimize идентичные. На первый взгляд, визуальный редактор Optimizely чуть менее функционален. Optimizely возможно интегрировать с Fabric, но сервис имеет достаточно скудный инструмент для аналитики.
    541f7819fed04b259013bbd6a76369c9.png

    Цена и количество пользователей: цены не указаны, есть ограниченная бесплатная версия.


Mixpanel


mixpanel.com

71a86360163f471b8a626460b4f77042.png

62ff3999051b4ed08fa74665fd44b7f9.png

Трекинг событий:

[mixpanel timeEvent:@"Загрузка изображения"]; // Временное событие
[self uploadImageWithSuccessHandler:^{
    [mixpanel track:@"Загрузка изображения"];
}];


Переменные в Mixpanel называются твиками (tweaks). Для получения твика используется макрос MPTweakValue:

if( MPTweakValue(@"Выполнить альтернативную конфигурацию", NO) ) {
    // Выполнить альтернативную конфигурацию
} else {
    // Выполнить стандартную конфигурацию
}


Есть биндинг значений для изменения параметров на лету:

MPTweakBind(self.label, text, @"label text", @"Hello World");


Применяется в случае, если при нахождении пользователя на экране нужно динамически менять значения переменных (иными словами реализуется KVO для них).

Инструменты аналитики в Mixpanel достаточно хорошие, есть возможность выстраивать сложные фильтры, при этом используя дополнительные атрибуты, отправляемые с устройств.

Визуальный редактор есть, но работает не очень стабильно и часто «отваливается».

97d8978e430a431a967c740ede603887.png

Цена и количество пользователей: можно выбрать вариант по количеству пользователей, либо по количеству событий за месяц. Например, 100 000 пользователей обойдутся в 250$, или за 350$ 2 миллиона событий.

SplitForce


splitforce.com

Здесь есть работа с блоками:

[[SFManager currentManager] experimentNamed:@"Имя эксперимента"
                        applyVariationBlock:^(SFVariation *variation) {
        //Альтернативная конфигурация
} applyDefaultBlock:^(NSError *error) {
        //Базовая конфигурация
}];


И возможность отслеживать время событий:

-(void)timedResultNamed:(NSString *)name;


Визуального редактора нет, агрегации аналитики тоже. Встроенная аналитика достаточно удобная.
f9b9fad69dc74b21bb29999ecd4f200e.png
Цена и количество пользователей: цены сопоставимы с прочими сервисами, например, 369$ за 150 000 пользователей.

Amazon


developer.amazon.com/appsandservices/apis/manage/ab-testing

Главным преимуществом перед аналогами является его бесплатность. Для того, чтобы использовать функциональность A/B-тестирования от Amazon, необходимо добавить в проект фреймворк Amazon Insights.

SDK предоставляет только «ручной» режим работы с проектами A/B тестирования:

[self.abTestClient variationsByProjectNames:[NSArray arrayWithObject:@"Имя проекта"]
                          withCompletionHandler:^(id variationSet, NSError* error) {
                        //Меняем что-либо исходя из данных в переменной variationSet
                          }];
 
    // Логирование события
    id level3Start = [self.eventClient createEventWithEventType:@"Тип события"];
    [self.eventClient recordEvent:level3Start];


f1c0b7b5ae3b4b7d9be465f28a192c5c.png

На мой скромный взгляд, интерфейс слегка примитивный, но может, это и к лучшему.
e407247b21e64aebb36160ae1050855a.png

Общие выводы


  1. Все сервисы кроме Amazon платные, что в некоторых случаях может стать преградой для запуска A/B-тестирования на проекте.
  2. Все сервисы достаточно просты в использовании, внедрение в существующее приложение занимает минимум времени.
  3. Все сервисы работают асинхронно, поэтому не стоит ожидать моментальных откликов при низкой скорости соединения с интернетом.
  4. Некоторые из сервисов предлагают визуальный редактор. На практике, по моему мнению, вещь не так часто используемая.
  5. Те SDK, которые представляют доступ к переменным через макросы, ограничивают себя в использовании. Внутри макроса нельзя задать динамическое значение, следовательно, получать те или иные значения. Таким образом, слегка затрудняется A/B-тестирование на сущностях, представленных в приложении большим количеством: либо придется перечислить все возможные переменные, либо получать в одной переменной данные по сущностям и разбирать значение на составляющие.


Сводная таблица


Название сервиса Удобство встраивания (1–5 баллов) UI-редактор (1–5 баллов) Аналитика (1–5 баллов) Цена за месяц Поддержка (1–5 баллов) Общий балл
Apptimize 4 5 4 300$ за 100 000 пользователей 4 17
Optimizely 4 3 3 Не указано 3 13
SplitForce 3 0 3 369$ за 150 000 пользователей 4 10
Mixpanel 5 4 5 250$ за 100 000 пользователей или 2 миллиона событий за 350$ 5 19
Amazon A/B Testing (Beta) 3 0 4 Бесплатно 3 10

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

© Habrahabr.ru