- PVSM.RU - https://www.pvsm.ru -

Как мы тестируем рекламные технологии Яндекса, и как этому научиться

Меня зовут Константин Власов, и я руковожу в Яндексе службой управления качеством баннерной системы. Как вы можете догадываться, тестирование быстроменяющейся системы таких масштабов, как наши рекламные технологии, со всеми базами данных, репликацией компонент, протоколами взаимодействия между подсистемами, а также при довольно частых релизах, — непростое дело. При этом тестировать все нужно очень тщательно, ведь любая ошибка потенциально может принести серьезный ущерб бизнесу компании. И речь тут идет не только о репутационных издержках, но и о потере реальных денег.

image [1]

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

Начнем, конечно же, с рассказа о том, что мы тестируем. В Яндексе есть два рекламных направления: контекстная и медийная реклама.

Контекстная реклама – это текстовые объявления, которые вы наверняка видели в поисковой выдаче и на сайтах, входящих в рекламную сеть Яндекса, медийная — это флеш, гиф, видео реклама.

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

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

image

Для персонализации медийной рекламы мы используем технологию Крипта. Это метод машинного обучения, который анализирует поведение каждого пользователя в сети Яндекса, что позволяет узнать социально-демографические характеристики пользователей: возраст, пол, образование, уровень дохода, интересы — несколько сотен параметров, на основании которых мы можем показывать рекламу, предположительно полезную конкретному пользователю. Для контекстной рекламы основную роль играет поисковый запрос, который пользователь только что ввел, а также история запросов. Также учитывается местоположение пользователя и время запроса.

Каким образом происходит подбор объявлений для показа в каждом конкретном случае – тема отдельного рассказа. Некоторое представление об этом процессе можно составить из лекции нашего коллеги Михаила Левина [2]. Стоит лишь отметить, что в лекции приводится несколько упрощенная модель расчета вероятности показа того или иного объявления. На самом деле, помимо CTR (click-through rate) – отношения кликов к показам – в ранжировании участвует множество алгоритмов, учитывающих огромное количество факторов и коэффициентов, в генерации которых нам помогает технология машинного обучения Матрикснет [3].

Важно понимать, что весь процесс генерации рекламных блоков должен происходить очень быстро и укладываться в промежуток между отправкой пользовательского запроса и окончанием отрисовки страницы поисковой выдачи. Естественно, вся статистика просчитывается заранее. Однако все эти данные нужно быстро извлекать и пересылать между компонентами нашей системы. Для этого мы используем высокопроизводительный веб-сервер Phantom [4]. И все это работает под нагрузкой, которую можно примерно сопоставить с нагрузкой на основной поиск Яндекса.

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

Тестируемая система – это набор веб-сервисов и множество скриптов, различные базы данных и интерфейсы, поэтому из-за многообразия компонентов мы делаем упор на автоматизацию тестирования. Фреймоворки для автоматизации тестирования мы создаем и поддерживаем сами. Основные языки разработки в нашей команде – Python, Perl.

Мы постоянно экспериментируем, внедряем новые подходы и технологии: Model based testing [5], Pairwise testing [6], Continuous Integration [7], Continuous Delivery [8] и другие. Цель этих экспериментов — повысить нашу эффективность, оптимизируя процессы и инструменты.

Как мы тестируем рекламные технологии Яндекса, и как этому научиться

В тестировании быстроменяющейся системы таких масштабов, как наши рекламные технологии, со всеми базами данных, репликацией компонент, протоколами взаимодействия между подсистемами, а также при довольно частых релизах, никак не обойтись без сложной инфраструктуры и Continuous Integration (CI). Сейчас у нас реализован полный CI цикл с использованием Jenkins [9] и OpenStack [10]-облака.

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

Все эти разработки сейчас есть в открытом доступе на Github.

Команда

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

image

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

image

Обучение включает в себя не только теоретическую часть, но и практику, заключающуюся в решении боевых задач. Читать лекции и вести практические занятия будут специалисты из нашей команды. Студентам, продемонстрировавшим успехи в процессе обучения, будет предложено пройти стажировку в Яндексе. Но даже если вы не ставите перед собой цели устраиваться на работу в Яндекс, наша школа – это отличный шанс научиться тестированию непосредственно у людей, которые развивают эту область. Наш курс можно разделить на несколько тем:

  • процесс разработки и тестирования ПО;
  • работа с системами контроля версий;
  • работа с базами данных;
  • анализ требований и проектирование тестов;
  • написание тестовой документации;
  • разработка автоматизированных тестов и целесообразность автоматизации;
  • командная работа и эффективное взаимодействие.

Точный список лекций уже доступен на странице нашей школы [17], там же можно оформить заявку на зачисление. Набор продлится до 23:59:59 23 февраля.

Автор: kvlasov

Источник [18]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/yandeks/55212

Ссылки в тексте:

[1] Image: http://habrahabr.ru/company/yandex/blog/212875/

[2] лекции нашего коллеги Михаила Левина: http://habrahabr.ru/company/yandex/blog/209482/

[3] Матрикснет: http://habrahabr.ru/search/?q=%5Bматрикснет%5D

[4] Phantom: http://tech.yandex.ru/events/yac/2010/talks/56/

[5] Model based testing: http://en.wikipedia.org/wiki/Model-based_testing

[6] Pairwise testing: http://en.wikipedia.org/wiki/All-pairs_testing

[7] Continuous Integration: http://en.wikipedia.org/wiki/Continuous_Integration

[8] Continuous Delivery: http://en.wikipedia.org/wiki/Continuous_delivery

[9] Jenkins: http://jenkins-ci.org/

[10] OpenStack: http://en.wikipedia.org/wiki/OpenStack

[11] github.com/allure-framework/allure-core: https://github.com/allure-framework/allure-core

[12] github.com/allure-framework/allure-jenkins-plugin: https://github.com/allure-framework/allure-jenkins-plugin

[13] github.com/allure-framework/allure-python: https://github.com/allure-framework/allure-python

[14] github.com/yandex-qatools/builders: https://github.com/yandex-qatools/builders

[15] github.com/jenkinsci/jclouds-plugin: https://github.com/jenkinsci/jclouds-plugin

[16] github.com/jenkinsci/debian-package-builder-plugin: https://github.com/jenkinsci/debian-package-builder-plugin

[17] на странице нашей школы: http://tech.yandex.ru/education/school-test/2014/

[18] Источник: http://habrahabr.ru/post/212875/