Как провести тест в ВК

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Cancel Create

vk-test / README.md

  • Go to file T
  • Go to line L
  • Copy path
  • Copy permalink

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Cannot retrieve contributors at this time
256 lines (193 sloc) 18.7 KB

  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents Copy raw contents

Copy raw contents

VK.com Тестовое задание

  • Результаты нагрузочного тестирования
  • Под капотом
  • Оптимизация запросов mysql
  • Напоследок

Разработка приложения велась в следующем окружении:

  • PHP 5.5.9-1ubuntu4.9
  • Apache/2.4.7
  • memcached 1.4.14 (Ubuntu)
  • mysql Ver 14.14 Distrib 5.5.41, for debian-linux-gnu (x86_64)

Для корректной работы приложения так же необходимы модули apache:

Как сделать игровой тест ВКонтакте

  • mod_rewrite
  • mod_headers
  • mod_expires

При выполнении задания главной целью было: максимально быстрая разработка с полным соответствием заданию.

ВСЕ ТЕСТЫ, УКАЗАННЫЕ В ДАННОМ ДОКУМЕНТЕ ПРОВОДИЛИСЬ БЕЗ ИСПОЛЬЗОВАНИЯ memcache, ЕСЛИ ПОД РЕЗУЛЬТАТМИ ТЕСТА НЕ СКАЗАНО ОБРАТНОЕ

Реализовать простую систему просмотра списка товаров. Товар описывается несколькими полями: id, название, описание, цена, url картинки. Требуется: — интерфейс создания/редактирования/удаления товара; — страница просмотра списка товаров. Товары можно просмотривать отсортированные по цене или по id. Поддерживать количество товаров в списке – до 1000000.

Устойчивость к нагрузке – 1000 запросов к списку товаров в минуту. Время открытия страницы списка товаров < 500 мс. Техника: PHP (без ООП), mysql, memcached. Фронтэнд — на ваше усмотрение. Проект должен быть на гитхабе и отражать процесс разработки.

В результате — ссылка на гитхаб и развёрнутое демо.

Обо всем по порядку:

Товар описывается несколькими полями: id, название, описание, цена, url картинки

Соответствует такой схеме БД:

CREATE TABLE products( id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY, title VARCHAR(30), description TEXT, image VARCHAR(255), price DECIMAL(12, 2)); ALTER TABLE products ADD KEY price_id_idx (price, id);

Для ускорения загрузки страницы веб-сервер настроен на gzip-сжатие css и js-файлов. В моем текущем окружении, я использовал mod_deflate со следующей конфигурацией:

# Serve gzip compressed CSS files if they exist # and the client accepts gzip. RewriteCond «%» «gzip» RewriteCond «%.gz» -s RewriteRule «^(.*).css» «$1.css.gz» [QSA] # Serve gzip compressed JS files if they exist # and the client accepts gzip. RewriteCond «%» «gzip» RewriteCond «%.gz» -s RewriteRule «^(.*).js» «$1.js.gz» [QSA] # Serve correct content types, and prevent mod_deflate double gzip. RewriteRule «.css.gz$» «-» [T=text/css,E=no-gzip:1] RewriteRule «.js.gz$» «-» [T=text/javascript,E=no-gzip:1] # Serve correct encoding type.

Header append Content-Encoding gzip # Force proxies to cache gzipped 500 мс

Как сделать геймификацию тестов с подсчётом баллов в VK

Здесь все не так просто, как может покахаться на первый взгляд. Дело в том, что, если я загружу статические ассеты на собственный сервер, на результат будет влиять то, как долго до него ходят запросы от конкретного интернет-провайдера. Поэтому то, что можно загрузить через cdn приложение загружает через него, из-за чего, время открытия страницы так же не может полностью зависеть от меня. При этом я использовал и настроил кеширование изображений, *.js и *.css файлов, но, опять таки, если кеширование отключено в браузере это так же не поможет. Во время тестирования на локальной машине(не могу провести тест открытия страницы на удаленном сервере из-за ужасного интернет-соединения) время полной загрузки страницы составляло 400ms, что укладывается в рамки, обозначенные в ТЗ. На всякий случай я так же проверил время, за которое полностью генерируется ответ сервера — ** 60ms **

Если считать за отображение страницы полную генерацию ее HTML-кода, то можно измерить это время с помощью простой функции wget, на локальном окружении получилось так:

wget -p http://vk-test.local/list/1 —2015-07-03 08:08:11— http://vk-test.local/list/1 Resolving vk-test.local (vk-test.local). 127.0.0.1 Connecting to vk-test.local (vk-test.local)|127.0.0.1|:80. connected. HTTP request sent, awaiting response. 200 OK Length: unspecified [text/html] Saving to: ‘vk-test.local/list/1’ [ ] 32,190 —.-K/s in 0s 2015-07-03 08:08:11 (67.1 MB/s) — ‘vk-test.local/list/1’ saved [32190] FINISHED —2015-07-03 08:08:11— Total wall clock time: 0.008s Downloaded: 1 files, 31K in 0s (67.1 MB/s)

Сортировка по Порядок Страница номер Время
ID asc 1 0.008s
ID asc 500 0.2s
ID desc 1 0.01s
ID desc 500 0.08s
Цена asc 1 0.008s
Цена asc 500 0.008s
Цена desc 1 0.08s
Цена desc 500 0.08s

Отмечу, что выборка в данной таблице не является репрезенативной, поскольку было сделано всего по 1 запросу каждого вида, это просто помогает приблизительно оценить скорость загрузки.

Еще по теме:  Вконтакте используют мои фотографии что делать

Вообще, я уже немного отвык делать приложения без использования ООП и до начала выполнения задания провел около часа в поисках «лучших практик». Однако, как оказалось, публичный мир PHP старается максимально отойти от процедурного подхода и любые запросы с тегами «procedural» или «without OOP» на первых 3х страницах поисковой выдачи выдают в основном трактаты о том, что procedural — плохо, а OOP — хорошо. Поэтому, пришлось больше полагаться на интуицию, а некоторые концепции просто перенести из уже ставшего привычным MVC-подхода, но с огромным упрощением, а иногда и коверканьем идей.

Конфигурация приложения описывается в файле config.php С помощью этого файла можно настроить соединение с БД, название приложения и число товаров выводимых на странице

Роутер разбирает запрос пользователя и отправляет его нужному обработчику( dispatcher ) Сам разбор запроса сейчас очень сильно упрощен просто ввиду ненадобности более сложного, однако, несложно будет его переписать или дописать так, что бы он соответствовал новым требованиям, если таковые появятся. В данный момент я ограничил возможные запросы на:

  1. односегментные => /
  2. двухсегментные => /list
  3. трехсегментные => /view/1
  4. четырехсегментные => /list/price/1 Конечно, можно было бы озадачится и сделать унифицированный роутер, который разбирал бы любые запросы, но данное ТЗ никаких намеков на это не дает, а мне, в процессе реализыции понадобились только эти, так что я просто решил не терять времени зря.

Для работы роутера, ему необходима конфигурация существующих маршрутов, которая описана в файле routes.php В этом файле определяется глобальный ассоциативный массив $routes , ключ которого — шаблон запроса, а значение — обработчик. Примечательно, что в качестве обработчика можно указать как анонимную функцию, так и строку с названием функции. Анонимные функции довольно удобны, если нужно быстро протестировать функционал.

$routes = [ ‘/view/’ => ‘view_record’, //Название функции — обработчика ‘/list/’ => ‘product_list’, ‘/’ => function()< //Анониманя функция-обработчик echo «Dummy home page»; >, ];

Как можно заметить из примера выше, некоторые из шаблонов запроса имеют сегменты с текстом, заключенном в фигурные скобки Это параметры зарпоса. Если запрос совпадет с шаблоном, то параметры будут переданы в обработчик в качесве аргументов, например, для того что бы посмотреть запись с идентификатором 1 пользователь перейдет по ссылке /view/1 , что соотвтетствует шаблону /view/ . В свою очередь, роутер вызовет обработчик — в данном случае это функция view_record .

function view_record($id) < //find product and render it’s page here >

При этом параметр id будет передан автоматически. ВАЖНО: поскольку роутинг не является целью этого ТЗ, я не делал автоматический биндинг параметров по имени, как это обычно делают

Представления отвечают за отображение данных. Ничего сверхъестественного

SQL и работа с ним

Файл database.php создает новое соединение с базой данных, а так же определяет основные функции для работы с ней. Сначала была идея выделить работу с конкретными таблицами в отдельные файлы, но потом я подумал, что для данного ТЗ это будет overkill и оставил это для возможного улучшения в будущем.

Единая точка входа

Все запросы в приложении отправляются ТОЛЬКО в index.php, что позволяет с легкостью управлять приложением из одной точки

Оптимизация запросов mysql

Поскольку поле цена может быть одинаковым для большого числа товаров, но при этом по нему необходимо сортировать список товаров, был добавлен индекс price_id_idx (price, id) для ускорения выборки с сортировкой по цене, при формировании SQL-запроса добавилось: FORCE INDEX(price_id_idx) . В этом вопросе пришлось больше руководствоваться слухами и домыслами, нежели какими-то подтвержденными фактами, или личным опытом Дело в том, что на форумах пишут, что FORCE INDEX() у многих, на самом деле замедляет, а не ускоряет ее. Однако, немного поразбиравшись в теме, я выяснил, что на маленьком наборе данных это действительно может замедлить работу, особенно, если не используется LIMIT . Благо, у меня он есть везде, где нужно и набор данных довольно большой.

Ввиду неоптимизированной «из коробки» mysql команды LIMIT x, y(LIMIT x OFFSET y) пришлось пойти на известную хитрость:

  1. Если мы отображаем первую страницу, мы просто устанавливаем LIMIT
  2. Если мы отображаем не первую страницу списка, то: Проверяем, передан ли в запросе параметр идентификатора последего товара на предыдущей странице и, если да, то вместо LIMIT x,y мы запрашиваем WHERE id > %last_page_id% LIMIT x

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

Источник: github.com

Как выжать из рекламы «ВКонтакте» максимум

Максим Ковалев

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

Специалист по таргетированной рекламе в Completo Максим Ковалев рассказал о типах гипотез, которые он протестировал на проектах Completo и показал, как они сработали на примере кейсов. А также поделился мнением — стоит ли сейчас вкладываться в таргетированную рекламу и насколько эффективно работает этот канал в отрыве от других инструментов.

Типы гипотез, о которых пойдет речь, связаны с:

  • тестированием креативов;
  • подбором сегментов аудиторий и детальных настроек таргетинга;
  • тестированием посадочных страниц и офферов.
Еще по теме:  Что такое директ Вконтакте

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

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

Первичная задача любого креатива — пробить баннерную слепоту и затем донести ценность продукта/услуги. Если человек не обратил внимание на ваш креатив, то неважно, насколько крутой у вас продукт — аудитория об этом не узнает.

Как пробить баннерную слепоту

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

Цвет. Мы всегда тестируем креативы в разных цветовых вариантах — правильно подобранный фон креатива влияет на эффективность рекламы. Если вы можете отойти от фирменного стиля или он еще не сформирован окончательно, то я рекомендую тестировать 3 основных цвета: красный, синий, зеленый. Все остальные цвета — результат смешивания этих трех цветов.
Мы тестировали эту гипотезу на нескольких проектах. Вот результат одного из них, задача: продвижение услуг по финансовому консалтингу. Результат: мужчины лучше реагируют на зеленый цвет, женщины — на синий.

ТОП-2 крео по кликабельности на женщин — синие

ТОП-2 крео по кликабельности на женщин — синие

ТОП-1 зеленый, ТОП-2 и ТОП-3 красные на мужчин

ТОП-1 зеленый, ТОП-2 и ТОП-3 красные на мужчин

У любого правила есть исключения и каждый проект индивидуален. Но это доказывает, что и на своем проекте вы можете выявить обоснованные закономерности, использовать это в дальнейшем при масштабировании.

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

Вывод: в performance-маркетинге брендбук не должен является решающим фактором при выборе стиля рекламного баннера. Решающий фактор — результаты A/B-тестирования креативов.

Определяем лучший креатив

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

Гипотезы на основе сегментов аудиторий и настроек таргетинга

Здесь отмечу две стадии тестирования:

Тестирование конкретных настроек: пол, возраст, гео- и соцдем-параметры, ключевые запросы, базы и т. п.
Разделение аудитории не только по ЛПР, но и по степени осознанности пользователей к вашему продукту/услуге. Тут вы определяете на какой стадии находится клиент относительно принятия решения, и выстраиваете для него воронку. Так как важно понять, где сейчас находится клиент, что ему показать и на какой этап перевести, чтобы подвести к покупке.

Для такого сегментирования мы используем модель Б. Ханта

Для такого сегментирования мы используем модель Б. Ханта

Всю аудиторию делим на 5 основных ступеней по степени осознанности к услуге:

  • еще нет проблемы;
  • есть проблема, но нет решения;
  • выбор решения;
  • выбор продукта;
  • выбор поставщика.

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

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

Тем, кто уже знаком с компанией и продуктом, можно сразу показать горячий оффер.

С каких настроек начать: ориентируйтесь на аудиторию

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

Вернемся к лестнице Ханта — при запуске кампаний делим аудиторию на 5 условных ступеней по степени «прогретости», где:

  • 1 ступень — самые холодные, спрос еще не сформирован. Как правило, на 1 ступени может еще отсутствовать боль или потребность. К первой ступени можно отнести все широкие настройки таргетинга «ВКонтакте».
  • 5 ступень — самые лояльные пользователи, которые уже знают о вашем продукте, компании и доверяют ей. К 5 ступени можно отнести подписчиков вашей группы, текущих клиентов, посетителей сайта с поисковой рекламы и органической выдачи.

В первую очередь ориентируйтесь на 5 ступень, так как здесь пользователи уже знают о вас и вашем продукте и вы быстрее получите продажи с рекламы. По мере выгорания аудиторий спускайтесь на ступень ниже.

Тестирование офферов и посадочной страницы

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

Куда вы можете вести трафик:

  1. основной сайт;
  2. кастомизированные страницы, созданные под конкретный сегмент аудитории;
  3. лид-форма;
  4. Опросник и квиз, интерактивный тест;
  5. Чат-бот.

Примеры офферов, которые можно тестировать:

  • Полезные материалы: лид-магниты и кейсы, в которых есть CTA.
  • Пробный бесплатный продукт, специальное предложение: 7 дней бесплатного доступа, скидка 30% до конца месяца, демо-доступ, бесплатная консультация и т.п.

Покажем на примере кейса

Тестируем 2 параметра: новый оффер и разные варианты посадочной. Ведем трафик на:

  1. На основной сайт. Тестируем оффер А, получаем: 30 заявок по 7500 рублей, квалификация 96%, 5 продаж.
  2. Лид-форму. Тестируем оффер Б и получаем: 70 заявок по 1500 рублей, квалификация 15%, 1 продажа.
Еще по теме:  Как закачать музыку в ВК

Тестируем 2 параметра: новый оффер и разные варианты посадочной

Тестируем 2 параметра: новый оффер и разные варианты посадочной

Какой оффер и посадочная отработали лучше? В разрезе стоимости лида можно сделать вывод, что второй. Но изучив воронку дальше, мы увидели, что CPO со второго оффера дороже почти в 2,5 раза, хотя стоимость заявки ниже в 5 раз.

Как определить приоритетность при запуске гипотез

Приоритетность зависит от стадии запуска рекламных кампаний и их масштабирования:

  • Первичной гипотезой всегда выступает именно A/B-тестирование креативов. Это индикатор, который позволит в дальнейшем снизить стоимость клика и увеличить количество заявок.
  • Тестирование сегментов аудиторий:
  1. Тут в первую очередь смотрим именно на «теплоту» пользователей в том или ином сегменте — в приоритете более теплая аудитория.
  2. Тестирование по ЛПР. Мы часто работаем с проектами, где у ЛПР в соответствии с сегментами разные мотивы принятия решения.

Telegram-канал Completo

Разберем на примере одного из проектов

Задача: продвижение продукта по автоматизации работы с внештатным персоналом.

Целевая аудитория: владельцы бизнесов, бухгалтеры, HR-специалисты крупных компаний с большим количеством внештатных специалистов. У компании 3 основных сегмента целевой аудитории, для которых важны разные свойства продукта.

Собственнику важно снизить издержки и ускорить процесс работы — сократить рабочие часы сотрудников.
Бухгалтеру важно упростить работу с выплатами сотрудникам.
HR-директор стремится ускорить процесс вывода нового сотрудника на работу.

Это необходимо учесть при создании и в процессе тестирования креативов. Таким образом, порядок работ будет таким:

  • Под каждый сегмент формируются свои боли и потребности. На их основе разрабатываются креативы — подбирается визуал и посыл. У топ-менеджеров свои критерии принятия решения, свои боли и потребности, отличные от hr-ов и бухгалтеров.
  • Тестирование офферов будет эффективнее уже после того, как вы получили достаточные данные о самых результативных креативах. Так вы можете точечно и с минимальным бюджетом протестировать сразу несколько офферов.

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

Как принять решение об эффективности на основе статистики

Тестируя каждую гипотезу, определите ключевую метрику, на основании которой будете принимать решения об эффективности кампании:

  1. При тестировании креативов первичная метрика — CTR.
  2. При тестировании сегментов аудитории — CPL, процент квалификации и отказов.
  3. При тестировании офферов и сайта — процент конверсии и процент квалификации.

Какое конкретно значение должна иметь каждая метрика мы определяем индивидуально в каждом проекте, в зависимости от планов и юнит-экономики проекта.

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

Тестируем 2 параметра: новый оффер и разные варианты посадочной

В заключении выделим несколько ключевых моментов:

Синергия каналов для продвижения B2B-компаний. Наш опыт показал, что без поддержки других инструментов и комплексной работы с аудиторией, реклама «ВКонтакте» работает менее эффективно. Мы же с помощью таргетированной и контекстной рекламы по отдельности работаем с аудиторией на каждой ступени лестницы Ханта. Контекст — приводит на сайт больше теплого и горячего трафика, ретаргетинг VK — при повторном касании позволяет довести клиента до сделки с помощью другого оффера и посыла.

Сегментация не только по типу ЛПР, но и по степени осознанности аудитории к покупке продукта/услуги. Это позволит эффективно взаимодействовать с теми, кто уже знаком с вами и прогревать, вызывать интерес у тех, кто еще не слышал о вашей компании и продукте.

Масштабирование результата. Для успешного запуска рекламных кампаний и масштабирования результата в VK необходимо проводить большое количество тестов на уровне рекламного кабинета (таргетинги, креативы, форматы рекламы) и за его пределами (оффер, сайт).

Сегментация на уровне креатива. Одна из результативных гипотез в нашем случае — сегментирование аудитории не только с помощью настроек, но и с помощью текста на баннерах и в объявлениях. На креативе было указано, что предложение актуально только для бизнесменов с ежемесячным оборотом от 2 миллионов рублей. Кликов стало меньше, стоимость заявки выросла, но процент квалификации увеличился.

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

Источник: blog.completo.ru

EduNeo

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

Главная | Технологии для учителя и преподавателей | 7 лучших сервисов для создания тестов и опросов

7 лучших сервисов для создания тестов и опросов

Сервисы для тестов

Aвтор материала: Кристина Путина —
эксперт образовательного центра «Каменный город».
Проект автора: Каменный город

Тесты давно стали неотъемлемой частью рабочих будней любого педагога. Раньше приходилось печатать их на бумаге, собирать листочки или тетради у каждого ученика, вручную проверять и анализировать результаты, гадать с ответами из-за почерков…

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

Рейтинг
( Пока оценок нет )
Загрузка ...