Все новые сервисы Яндекса, а также апдейты к существующим приложениям и сайтам нужно тестировать: на айфонах, андроидах, десктопах, умных колонках, телевизорах. Раньше часть тестировщиков работали на личных телефонах и компьютерах, а часть — использовали для тестов корпоративные девайсы. Процесс не был гибким и с трудом масштабировался. Поэтому мы сделали свою клауд-ферму устройств. Сначала ей пользовались только отдельные команды тестирования, но со временем ферма стала особенно популярна и среди разработчиков. В итоге мы собрали почти 800 разных девайсов, которые теперь доступны 24/7.

Меня зовут Кирилл Коргов, я отвечаю за то, чтобы ферма устройств работала и развивалась. Кстати, называть её просто фермой было бы скучно, поэтому где-то на заре проекта мы по-доброму назвали её близким по смыслу словом «Колхоз». Если интересно, с чего Колхоз начинался, как пандемия привела к неожиданному росту его популярности и что общего у макбуков с лотками для офисной бумаги, прошу под кат.
- Вводная часть про тестирование
- Плюсы
- Минусы
- Незнайка
- Решу ЕГЭ
- Castle Quiz
- Экзамер
- Яндекс ЕГЭ и ОГЭ
- ФИПИ
- Online ЕГЭ
- «1917»
- «Слово дня»
- Memorando
- «Кругозор»
- Vremena
- Обустройство фермы
- Развитие фермы
- Подключили службу поддержки
- Научились обнулять устройства после сессии
- Добавили звук
- Внедрили систему рейтинга устройств
- Стали автоматически записывать сессии
- Ввели квоты для сотрудников
- Начали вести аналитику
- Пробросили локальный интернет
- Открыли API для бронирования устройств
- Миграция Яндекса в Колхоз
- Сложности
- Решение
- Появление десктопов
- Первая версия своей фермы
- Переносим к себе Android
- Интеграция
- Проксирование
- Рост фермы
- Образовательное приложение для подготовки к ЕГЭ по истории
- Всё-таки форкаем решение для Android (и снова расширяемся)
- Чужое решение
- Итоги и планы
Вводная часть про тестирование
Объясню, как оно работало у нас до Колхоза и с чем случались проблемы.
Тестирование в Яндексе бывает двух типов. Первый — когда сами разработчики что-то тестируют в процессе своей работы. Для этого, помимо устройств команды, у нас есть Гиперкуб, мы уже писали о нём на Хабре. Если кратко — в офисах Яндекса стоят специальные шкафы с разными девайсами, которые сотрудники могут брать для тестов. Запомните про них — они ещё поучаствуют в истории Колхоза.
Второй тип — тестирование через внутренний сервис Crowd. Это служба удалённых тестировщиков Яндекса, которые проводят тесты по запросу разработчиков. Исполнители получают готовый сценарий — что и на чём нужно проверить. Например: посмотреть, как отображается новый блок в приложении. Создаём задание, указываем требуемые версии телефонов и ОС, нужное количество тестов и выкладываем на внутренний сервис. Тестировщики, свободные в этот момент, берут задачу и присылают нам результаты.
Изначально, мы создавали ферму именно для крауд-тестирования, поэтому расскажу о нём подробнее.
Плюсы
Удалённые тестировщики сервиса Crowd работают из разных регионов, без привязки к рабочему дню, поэтому тесты не останавливаются даже ночью или в выходные. Ещё крауд-тестирование позволяет получить результат гораздо быстрее, чем инхаус: сто тестировщиков проведут сто тестов за пару часов, а команда из нескольких человек потратит на это дни.
Минусы
Но нам не пришлось бы создавать ферму устройств, если бы всё было так идеально. Главной болью крауд-тестирования стало разнообразие девайсов — вернее, его отсутствие. У каждого удалённого тестировщика имелся свой телефон, не самый мощный ноутбук/ПК и всё. На них он и проводил тесты. Из этого вытекали проблемы:
В особых случаях мы выдавали тестировщикам устройства Яндекса, но это была редкая и долгая практика. Как я уже говорил, исполнители работают из разных регионов, и тут этот плюс превращается в минус. Пока мы отправим устройство для теста, пока тестировщик его получит, выполнит задачу, пройдёт неделя, а то и больше. При этом во время транспортировки устройство не приносит пользу.
По всем этим причинам нам и пришла в голову идея фермы удалённых устройств для тестирования в сервисе Crowd. И тут я перехожу к истории создания Колхоза — длинной, но увлекательной.
Готовиться к экзаменам можно и нужно разными способами. Например, чередовать тесты из книжек с онлайн-тестами. Мы собрали самые полезные сайты и приложения, которые помогут подготовиться к ЕГЭ и ОГЭ. Кстати, если вам сдавать экзамены не нужно — проверить себя всё равно можно и даже весело.
Незнайка

Сайт состоит из нескольких разделов. Первый и самый важный — тесты ЕГЭ и ОГЭ. Выбираешь предмет и прорешиваешь один из предложенных вариантов тестов (например, в русском языке 39 вариантов, а в базовой математике — 19). Можно отработать конкретные темы: допустим, преобразования выражений или чтение графиков и диаграмм в математике. После выполнения заданий система покажет правильные ответы с пояснениями. Ещё можно отправить эксперту на проверку эссе или сочинение, но за это нужно платить (к примеру, проверка сочинения по русскому стоит 399 рублей).
Ещё на «Незнайке» есть раздел «Итоговое сочинение» с примерными темами, списком литературы, критериями и другими полезными материалами и блок «Всероссийская проверочная работа», где можно найти общую информацию о ВПР и примеры тестов.
Решу ЕГЭ

Сайт не такой удобный, как «Незнайка», из-за навязчивой рекламы и сложной навигации, но по содержанию не уступает. В разделе «Каталог заданий» собрано огромное количество тематических задач: можно выбрать определённую тему и решать десятки типовых заданий, чтобы её отработать. Или составить свой собственный тест. Кстати, большой плюс сайта в том, что на нём указывают, из какого источника взято то или иное задание.
Каждый месяц на сайте публикуют 15 новых вариантов тестов по каждому предмету. При этом доступ к вариантам прошлых месяцев тоже открыт. Получается, что вы можете прорешать 60 вариантов по каждому предмету.
Есть полезная функция для учителей — возможность составлять свои варианты тестов ЕГЭ. Задания части А и В проверяет система, а часть С могут проверять сами учителя после того, как ученик загрузит их на сайт. Система запоминает все результаты и автоматически заносит их в базу.
Castle Quiz

Сайт сделан в формате игры: выбираете предмет и тему, которую вы хотите проработать, а система ищет вам соперника для битвы. Вам и вашему противнику по очереди будут задавать вопросы с четырьмя вариантами ответа. Выигрывает тот, кто сделает меньше ошибок (или разрушит замок соперника). За набранные очки игроки получают награды и переходят на новые уровни. Кстати, в разделе «Русский язык» можно пройти задания от «Грамотности на „Меле“».
Экзамер

Сайт очень красивый, а обучение проходит в формате игры. Все тестовые задания взяты из учебников, одобренных ФИПИ. Ещё можно выполнять письменные задания и отправлять их на проверку экспертам. Но за всё хорошее нужно платить — подготовка к одному предмету стоит 3 290 рублей.
Яндекс ЕГЭ и ОГЭ

На «Яндексе» большая база тестов ЕГЭ и ОГЭ. Можно решать тесты 2017-го, но доступны и тесты прошлых лет. По устоявшейся для подобных сайтов традиции, можно выбрать не только готовые варианты ЕГЭ и ОГЭ, но и задания определённых типов.
Кроме самих тестов, на сайте есть раздел с видеолекциями по каждому предмету — разбор заданий от преподавателей. Например, курс по математике читает Дмитрий Иванов — преподаватель математики из московской школы № 179 и автор YouTube-канала о подготовке к ЕГЭ и ОГЭ по математике.
ФИПИ

Нельзя обойти вниманием открытый банк заданий ЕГЭ и ОГЭ с официального сайта Федерального института педагогических измерений (он как раз занимается разработкой заданий для экзаменов). Обычно отсюда берут задания остальные сайты для подготовки к ЕГЭ и ОГЭ. Принцип работы всё тот же: из 14 предметов необходимо выбрать нужный, затем система предложит блоки тем, которые можно отработать. После этого вы получите доступ к тысячам типовых заданий. Но есть одно «но»: здесь нет ответов, поэтому выполненные задания придётся кому-то проверять (например, учителю). Бонус: на сайте ФИПИ можно читать важные новости о предстоящих экзаменах.
Online ЕГЭ


Учитель биологии Мария Зайцева заметила, что сегодня многие старшеклассники не знают простых вещей или фактов, например, из истории. Мария предлагает развивать кругозор привычным способом — с помощью смартфона. Учитель скачала и протестировала разные приложения по истории, развитию логики и русскому языку и рассказывает о лучших.
Шёл урок биологии, мы проходили генетику, добрались до заболеваний, связанных с полом и передающихся по наследству. «Гемофилия — это классический пример такого заболевания, проявляется плохой свёртываемостью крови, болеют ей только мужчины», — говорю я своим ученикам. Известно, что этим заболеванием страдал царевич Алексей, и я привожу это как пример, но вдруг замечаю непонимающие глаза.
Что чаще всего находится в руках у современных подростков? Конечно же, телефон! И родители, и учителя всеми силами пытаются эту игрушку отобрать, усадить за уроки и заставить учиться.
Я не вижу смысла отбирать то, что стало частью повседневности, а постараться извлечь из смартфонов максимум пользы для всестороннего развития личности
Думаю, это не новость, что с помощью современных гаджетов можно учиться, и существует достаточно много способов развиваться, используя смартфон. Среди этих способов аудиокниги, приложения, подкасты. Мне показалось, что формат образовательных приложений школьникам ближе, так как процесс прохождения заданий чаще всего напоминает игру, а кто из подростков не любит играть?
В моём распоряжении был вечер, в течение которого я с энтузиазмом изучала приложения, направленные на расширение кругозора. Их оказалось не так уж и мало, ведь самообразование сегодня в таком же тренде, как и здоровый образ жизни. Затем я скачала несколько самых интересных приложений на свой телефон, чтобы провести несложный эксперимент. Как и положено в любом эксперименте, я установила его срок. Мне показалось, что недели будет достаточно, чтобы понять, возможно ли стать разносторонне развитым человеком, ежедневно уделяя немного времени образовательным приложениям. Неделя прошла продуктивно и увлекательно, поездки в метро непременно сопровождались изучением истории, литературы и культуры. Это мне понравилось настолько, что теперь уже срабатывает рефлекс: как только сажусь в вагон — рука сама тянется к нужным приложениям. В результате я выбрала, какие из образовательных «игрушек», на мой субъективный взгляд, действительно достойны оказаться на рабочих столах смартфонов школьников.
«1917»
Если бы 100 лет назад был интернет и соцсети, революция выглядела бы иначе, правда ведь, интересно как? Проследить революцию онлайн, читать «посты» Троцкого, Ливеровского, Маслова, узнать, чем жила Россия 100 лет назад поможет именно это приложение. Лично мне было интересно узнать, что 1 февраля 1917 года Николай Рерих работал над картиной «Холмы», Ирина Юсупова жаловалась в своих дневниках, что дома постоянно читают газеты со статьями о революции (действительно, удивительно!), а Николай II ровно столетие назад сидел у Алексея, который приболел.
«Слово дня»
Будет полезно для расширения словарного запаса школьников. Расширить свой словарный запас будет не лишним для успешного написания сочинений на ЕГЭ. Приложение позволит узнать, что такое консюмеризм, агиография, имманентный и ещё несколько тысяч слов, значение которых известно далеко не всем. Свой словарный запас я уже успела пополнить примерно на 20-30 слов. Некоторые из них начала применять в своей речи и даже заметила, что стало проще подбирать синонимы, когда пишу какой-либо текст.
Memorando
Интересное приложение для развития логики, концентрации, памяти и внимания. Хорошая альтернатива бесполезному листанию ленты во «Вконтакте». Не могу найти прямую связь с расширением кругозора, но косвенно точно поспособствует этому процессу. Школьники оценят, так как приложение затягивает, основано на усложнении от простых заданий к сложным. Неплохая разгрузка между подготовкой к экзаменам. Меня не оставили равнодушной задания на развитие реакции, всегда хотела натренировать у себя эту способность. В целом приложение помогает настроить мозг на активную работу, я запускала его по утрам, что-то вроде зарядки для извилин.
«Кругозор»
Увлекательная викторина по истории, в которой есть два уровня сложности: средний и усложнённый. Если на вопрос викторины ответить неправильно, то появится историческая справка, что определённо на пользу! Я оценила это приложение за разные категории вопросов, начиная с истории Византии, заканчивая СССР, да и исторические справки выглядят лаконично и легко запоминаются.
Vremena
Замечательное приложение о культуре и истории России, позволяет пополнить свои знания о живописи и об архитектуре. Удобно тем, что есть распределение по векам, то есть можно привести в порядок хронологию событий. Лично мне понравилось, что в описаниях картин или архитектурных сооружений действительно интересно и не занудно изложен материал. Третьяковскую галерею не заменит, конечно, но портативно и бесплатно!
Я уверена, что есть определённая база знаний, которую хорошо бы приобрести ещё в школьном возрасте.
Использовать гаджеты с пользой — это максимум удобства и минимум затрат, так как большинство приложений на расширение кругозора бесплатные, в чём я убедилась за неделю эксперимента.
Я всегда стараюсь донести до детей идею, что чем более развиты они будут, тем более интересные, увлечённые, прогрессивные и востребованные люди из них вырастут. Это прекрасно, если школьник сам тянется к знаниям, но, к сожалению, далеко не всегда это так. Я надеюсь, что приложения для личностного развития могут привить интерес к прекрасному, да и просто поспособствуют тому, чтобы появилось стремление ежедневно становиться хоть капельку лучше. Поэтому сегодня я иду на уроки со списком приложений и верой, что постепенно вопросы о том, кто такой Николай II, станут задаваться всё реже.
В погоне за высокими баллами и хорошими оценками важно не забывать, что кроме ОГЭ, ЕГЭ и вступительных экзаменов, впереди у сегодняшних школьников взрослая и самостоятельная жизнь, в которой будет много собеседований, деловых и личных знакомств, публичных выступлений, на которых никогда не спросят про оценку в аттестате, а обратят внимание на общую эрудированность. Конечно же, всегда приятно вести беседу с человеком, кругозор которого шире, чем окружность, измеряемая циркулем. Развитие — это жизнь, давайте чаще напоминать об этом детям!
Обустройство фермы
Немного расскажу, как мы обживались в новой серверной.
Переезжали постепенно — нельзя было просто всё отключить и разом перенести, ведь тестирование работало круглосуточно. Поэтому мы частично отключали какие-то устройства и переносили их в новое помещение. Потом, когда освобождались другие, шла следующая партия. В процессе мы научились жить в условиях, когда ферма распределена на несколько комнат.
Специально для нас помещение оборудовали: установили бесперебойники, систему охлаждения, стеллажи под устройства. Но главной проблемой оставалось грамотное использование места, которое всё равно было в дефиците.
Особенно сложно выходило с iOS-фермой. Какое-то время макбуки стояли у нас на ребре, а рядом с каждым лежал телефон. Потом пробовали использовать полки с разделителями — вставляли телефоны, как книжки. Но всё это получалось неэффективно, потому что полка большая, а телефоны маленькие: даже если ставили в ряд десять девайсов, много места всё равно оставалось свободным.


Так умещали андроиды. Половина полки пустовала
И только в январе 2020 года мы нашли решение — лотки для бумаг! Оказалось, что туда идеально встаёт макбук с экраном в 13 дюймов — миллиметр в миллиметр. Не помню, как мы это выяснили, но лотки стали находкой года. Теперь они выполняют на нашей ферме функцию серверного шкафа. Чтобы подключать провода, мы вырезаем в лотках отверстия под зарядку для ноутбука и USB для телефонов.
Ноу-хау стали использовать универсально. Для iOS-фермы: ставим приоткрытый макбук в лоток и на него кладём телефон. Для Android-фермы: устанавливаем стопки лотков возле агента, в каждый помещаем несколько телефонов или телефон и планшет — в зависимости от диагонали. Важно, что лотки можно ставить один на другой — тогда на каждую полку входит одна или две стопки по шесть лотков.
Если раньше на одну полку мы могли сложить только 10 устройств, подключённых к одному компьютеру, то теперь там помещалось до 24 девайсов. Оптимизацию места провели успешно — можно было закупать больше устройств, расширять ферму и не переживать, что всё повалится с полок.


Макбуки разместились просто идеально — по пять штук там, где раньше влезало только два
Развитие фермы
Дальше история Колхоза не заканчивается, но двигается вперёд маленькими шагами. Поделюсь самыми важными.
Подключили службу поддержки
Летом 2020 года мы перестали справляться с сообщениями в ламповом чате команды. Тогда завели большую справку с инструкциями по ферме и обучающими видео. А ещё — полноценный саппорт в виде окошка быстрого чата в интерфейсе.
Если пользователь не находит ответ на свой вопрос в готовой справке, он может обратиться к саппорту:
Наша служба поддержки, как и тестировщики, работает удалённо. Это люди, которые хорошо знают ферму и помогут в большинстве возникающих вопросов. Если пользователи пожалуются на неисправность устройства, саппорт проверит, действительно ли есть проблема. Если да — устройство пометят как нерабочее и попробуют починить удалённо. Не получится — передадут информацию о поломке офлайн-администраторам.
Кроме этого, есть автоматические диагностики — все устройства периодически запускают самотестирование, которое проверяет основные функции. Когда что-то не работает, устройство получает пометку, чтобы пользователи его не брали.

У одного из тестировщиков подвисла тестовая версия Навигатора
Научились обнулять устройства после сессии
Запрос на эту фичу был с самого начала, но не сразу получилось внедрить автоматическую чистку. Поэтому долгое время мы просто просили пользователей: выйдите отовсюду, удалите файлы и установленные приложения. Но, конечно, далеко не все это делали. Когда другие люди брали устройство, им сначала приходилось чистить девайс и сбрасывать предыдущие настройки.
В 2020 году мы наконец-то смогли добавить автоматическое обнуление на смартфонах. Теперь система после каждой сессии проверяет и стирает установленные программы, чистит часть файловой системы устройства, загрузки, выходит из приложений. Всем стало проще работать.
Добавили звук
Изначально звук на наших устройствах не воспроизводился. Через удалённый доступ нельзя было послушать голосовые команды, сигналы в приложениях, трек в видео. Эту фичу у нас часто просили команды Яндекс Музыки и Карт. Мы долгое время изучали разные способы, как дотащить звук до пользователя через все наши серверные и удалённое управление.
Особенность передачи звука с фермы — рядом всегда находится много других устройств, которые тоже как-то звучат. Поэтому звук нужно снимать только системно, не через динамики. Если зайти в серверную Колхоза, там на одном телефоне играет рэп, на другом кто-то смотрит стрим, на третьем тестируются Карты. Шум порой стоит невозможный.
Мы нашли два решения. Первое — для Android-устройств: проводом получать звук через разъём наушников. Второе — для iOS: внезапно оказалось, что механизм, позволяющий использовать только один девайс на одном ноутбуке, умеет передавать и звук тоже. Спасибо и на том.
Добавили нестандартные устройства
У нас давно числились в базе головные автомобильные устройства, которыми для нашего сервиса являются планшеты на Android. С развитием фермы мы вывели их в отдельную вкладку «Умные устройства». После добавления поддержки звука туда же попала Яндекс Станция. А потом, по запросу Группы тестирования Алисы и Умных устройств, у нас появились и телевизоры.
Головные устройства крепим сбоку на лотки под бумагу — это фото вы уже видели


Новенькие, закупленные на ферму Яндекс Станции
Внедрили систему рейтинга устройств
По умолчанию у нас работает автоматическое тегирование, которое при подключении устройства к ферме выясняет и вносит в систему его характеристики. В среднем это 30-40 параметров: от модели телефона и версии ОС до разрешения экрана и быстродействия. В итоге мы получаем детальную базу устройств, из которой пользователь может выбрать максимально подходящее — отметить в системе нужные фильтры и получить список доступных девайсов.
В начале 2021 года мы сделали возможность оценить устройство после работы — так к техническим характеристикам девайса добавился его рейтинг. Если устройство часто тормозит или плохо справляется с тестами, у него будет низкий рейтинг, а если всё летает — то высокий.
Рейтинг помог нам обнаружить самые плохие устройства и убрать их из раздачи или заменить новыми. Делать вручную это было бы долго и тяжело, а так на помощь нам пришёл классический краудсорсинг — по отзывам сотен людей мы стали быстро получать точную оценку каждого девайса.

При завершении бронирования система просит пользователя оценить устройство
Кроме того, система теперь подбирает пользователю девайсы с самым высоким рейтингом из доступных, а не первые попавшиеся. До этого часто были случаи, когда тестировщики получали медленное устройство и жаловались на него, в то время как более мощный подходящий девайс лежал без дела. Рейтинг оптимизировал распределение.
Стали автоматически записывать сессии
На скрине выше видна голубая плашка-предупреждение о видеозаписи всех сессий. Эту фичу мы внедрили в целях безопасности и контроля качества. Раньше при неполадках на устройстве тестировщики не всегда нажимали кнопку «Запись» — потом было сложно в точности воспроизвести замеченные дефекты и разобраться, что работает не так. С видеозаписью всех сессий на бэкенд фермы проблему решили. Теперь можно автоматически получить скринкаст своих тестов с любого девайса.
У администраторов Колхоза есть доступ ко всем видео. Это помогает контролировать качество работы устройств, вычислять читеров или делать сложный дебаг (учитывать все действия на девайсе, а не только указанные в баг-репорте).
Ввели квоты для сотрудников
Изначально у нас не было никаких ограничений по времени использования устройства и их количеству на одного пользователя. В крауд-тестировании с этим не возникало проблем — удалённый тестировщик приходил, брал подходящий девайс, делал свой тест по инструкции и уходил. А вот с наплывом в Колхоз разработчиков начались сложности.
Некоторые бронировали двадцать устройств на час и перебирали их — смотрели, с каким больше нравится работать. Бывали и бронирования на целый день, по которым даже не открывали устройство — забывали или не успевали. Чтобы такого не было, мы ввели квоты.
Теперь у каждого сотрудника есть три часа в день на использование девайсов в Колхозе. Но если квота закончилась, а человеку нужно продолжать работать, он может запросить увеличение времени.

Начали вести аналитику
Опираясь на рейтинг и информацию о бронированиях, мы делаем выводы: каких устройств не хватает, а какие совсем не используются. Это помогает нам перестраивать базу под потребности тестирования — чтобы ненужные девайсы не занимали слоты на ферме.
Например, слишком старые версии ОС перестают быть актуальными — тогда мы оставляем несколько устройств с такими системами на всякий случай, а остальные обновляем до более востребованных.
Кстати, новые версии ОС у нас появляются сразу после релиза, а модели телефонов — как только выходят в продажу. Например, в Колхозе можно потестировать Huawei с HMS, Google Pixel 2, 3, 4a, 5 и 6, версии Android от 4.2.2 до новейшей беты 13 и устройства на iOS от 9 до 16 версии. Но зачастую проблемы возникают именно со старыми системами и устройствами, которые не так просто купить. Поэтому мы стараемся сохранять редкие девайсы и ОС.
Пробросили локальный интернет
Ещё одна фича, которую мы не сразу смогли внедрить. На компьютере, куда подключено устройство, прописываем для связи с девайсом прокси-сервер — но не настоящий, а особый. Он (прокси) через веб-сокеты заворачивает в туннель приходящие к нему запросы. Этот туннель протягивается от наших серверов до интерфейса фермы на компьютере пользователя, где тоже ставится специальное приложение, соединённое с нашим сервером. Грубо говоря, в этот момент ферма становится мостиком, по которому до устройства дотягивается локальный интернет с компьютера пользователя. И человек во Владивостоке может раздать свою сеть на наш девайс в Питере.

Схема даёт две возможности: перехватывать и анализировать трафик с удалённого устройства
Открыли API для бронирования устройств
Периодически нам поступают запросы на поддержку автотестов, но мы пока сконцентрированы на ручном тестировании. Поэтому стали предоставлять API, через который можно забронировать устройство и попробовать своими средствами сделать инфраструктуру для автотестирования.
Потом эти пользовательские системы подключаются к API фермы и выполняют заданные действия. Благодаря этому для Android-устройств теперь возможна удалённая отладка тестов.
Миграция Яндекса в Колхоз
Мы добрались до весны 2020-го. Примечательно, что ещё до карантина к нам пришли коллеги из поисковой выдачи Яндекса и попросили организовать на ферме доступ к внутренней сети компании — чтобы на наших устройствах открывались сервисы и приложения на стадии разработки.
Внутреннюю сеть сотрудники могли самостоятельно настроить на устройствах из Гиперкуба, но её не было в Колхозе. А так как у нас уже накопилось больше девайсов, чем в каждом отдельно взятом кубике, то сотрудники хотели пользоваться этим разнообразием. Особенно просили те, кто часто работал удалённо или уставал ходить по офису к Гиперкубу. Мы взялись за дело.
Сложности
Не удавалось взять и подключить даже часть телефонов к внутренней сети. По требованиям безопасности нужно отслеживать, какие действия пользователи совершают в сети Яндекса. На ферме же каждый девайс был общим, поэтому на него не устанавливался чей-то конкретный сертификат. Плюс устройства были подключены к другой Wi-Fi-сети.
Решение
Мы внедрили авторизацию на сетевом уровне.
А через два дня после того, как мы сделали внутренний доступ, весь Яндекс отправился на удалёнку. Популярность фермы у разработчиков и других сотрудников взлетела!

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

К любому ПК два-три человека могли подключиться одновременно и начать мешать друг другу
В январе 2020 года у нас заканчивалась лицензия в TeamViewer — мы решили, что это отличный момент, чтобы перетащить десктопы к себе в интерфейс, как Android-устройства.
Сначала попробовали управлять устройствами через VNC. Это решило вопрос с безопасностью. Всё работало по той же схеме, что и смартфоны — тестировщик получал одноразовую ссылку на сессию работы с конкретным устройством. Но потом мы выяснили, что при управлении через веб-клиент VNC с Mac приходит всего три кадра в секунду вместо желаемых пятнадцати — картинка тормозит из-за большого разрешения экрана и отсутствия в веб-клиенте поддержки проприетарных кодеков, которые обеспечивают хорошее быстродействие в десктопных VNC-клиентах на macOS.

Поначалу после переезда в новую серверную наши стеллажи стояли полупустые — простор и порядок. Но скоро нам снова некуда будет складывать устройства
Разработали свою технологию с приемлемым качеством. Получилось нативное приложение на C++ (так как важна скорость). Оно делает захват экрана через системное API в macOS и по маске сравнивает очередной кадр с предыдущим — чтобы для экономии трафика посылать в сеть только те кусочки кадра, которые отличаются. Эти кусочки приложение кодирует с помощью TurboJPEG и отправляет картинками, а не буферизированным видеопотоком, что позволяет видеть моментальную реакцию на действия пользователя.
Технологию делали в первую очередь для macOS, но получилось кроссплатформенное решение, которое сейчас используем для Linux и частично для Windows. Стандартное бронирование и авторизацию для тестировщиков, конечно, сразу вшили.
Первая версия своей фермы
Идея была простой — сделать собственное решение наподобие Open STF, но для iOS и с нужной нам функциональностью для крауд-тестирования. Представляли, что для начала хватит компьютера Mac (потому что только с ними можно по-настоящему подружить девайсы на iOS), к которому мы подключим 10–15 устройств, разместив их в серверной. Тестировщикам станут круглосуточно доступны айфоны с редкими версиями — мы частично закроем проблему, а дальше будем расширяться.
Как это часто бывает, на деле всё оказалось сложнее.
Летом 2018 года начали разработку фермы: организовали распределённую команду между офисами Яндекса в Минске и Санкт-Петербурге. Минская команда собрала первые прототипы — софт для подключения к iOS-устройствам, а также интерфейс управления. Мы в Питере делали софт для ограничения доступа, бэкенд и бизнес-логику.
Примерно за три месяца наша команда научилась получать картинку с устройства и имитировать управление им в удалённом режиме. На телефоны устанавливали наше iOS-приложение, связывали его с системой, развёрнутой на компьютере — и все действия, которые мы совершали через сторонний веб-интерфейс, телефон воспринимал как реальные действия пользователя.
Первые тестовые стенды — два компьютера и два подключённых к ним телефона — были готовы в Минске к концу осени 2018-го. И тут выяснилось серьёзное ограничение, которое мы до сих пор не победили: на одном Mac может нормально работать только одно iOS-устройство. При подключении удалённого доступа к двум и более девайсам кадры двух устройств путались. Попробовали перейти на получение картинки через снятие скриншота прямо на устройстве — FPS оказался на уровне 1–5 кадров в секунду. Естественно, при таком быстродействии невозможно что-то тестировать.
Постоянную инсталляцию развернули уже в Питере в начале 2019-го — там площадь позволяла разместить нужное оборудование в коммутационной комнате. Вместо запланированного одного компьютера поставили пять Mac mini. Подключили к ним десять iOS-устройств (по два на каждый Mac), которые работали по очереди. В одну сессию был активен только один связанный с компьютером девайс, второй в это время становился недоступен. Это позволило нам поддерживать FPS от 12 до 15 кадров в секунду без буферизации — можно сказать, устройства почти моментально реагировали на нажатия в интерфейсе.
Систему бронирования и изоляции сессии заложили сразу, так что одной проблемой стало меньше (как эта система работает, расскажу чуть дальше). Но было непонятно, как масштабировать ферму — десять iOS-устройств на тысячи исполнителей было мало. К тому же первое решение оказалось очень требовательным к компьютерам тестировщиков — съедало много RAM и сетевого трафика. Эти ограничения нам ещё предстояло победить.
Самая первая и самая скромная версия Колхоза
Переносим к себе Android
Наша ферма для iOS росла и крепла, а софт для Android наши исполнители по-прежнему тестировали через Open STF. И страдали всё от тех же проблем: не было автоматического контроля за состоянием устройств и отсутствовало бронирование девайса только для себя. От этого, как уже говорил, хромали удобство (удалённые тестировщики на одном устройстве мешали друг другу) и конфиденциальность (любой мог увидеть данные, которые вводит исполнитель).
Попробовали влиять инструкциями — запретили заходить на девайс с пометкой «Занято». Появилась другая загвоздка — выяснилось, что тестировщики часто забывали выходить из сессии, и пометка «Занято» висела, даже когда устройством никто не пользовался.
Осенью 2019 года мы начали искать решение: как дотащить базовую функциональность нашей фермы до Open STF. Делать полностью свой софт под Android нам не хотелось — рабочая технология уже существовала, и не факт, что мы сделали бы лучше. Вариант форкнуть стороннее решение и развивать свою ветку тоже пока отмели, потому что опасались сложностей с обновлением до новых версий.
Интеграция
Решили начать с единого интерфейса, чтобы тестирование на iOS и Android проходило в одном месте, на сайте нашей фермы. Напомню, через Open STF тесты проходили в их веб-приложении.
Самым простым вариантом было сделать iframe — чтобы в окне на нашем сайте стал доступен интерфейс сторонней фермы. Эту идею сразу отмели и начали делать нормально. За несколько дней мы адаптировали интерфейс Колхоза для отображения и управления Android-устройством. Но технологии по-прежнему были завязаны на Open STF, просто пользователи об этом не знали.
Проксирование
Критическим оставался вопрос с изоляцией сессии. И тут мы додумались поставить между нашими устройствами и сторонним софтом reverse proxy в виде nginx, куда встроили специальную авторизацию на каждый запрос.
Как работала проверка:
Всё. Теперь пользователь мог открыть только то устройство, к которому у него правда был доступ в данный момент времени. Так мы донесли удобство и конфиденциальность тестирования и до Open STF.
На этом этапе у нас уже было около 60 девайсов на Android и 30 на iOS. На выделенных нам полках в общей коммутационной начал разрастаться хаос с кучей проводов. А с появлением бронирования фермой заинтересовались штатные сотрудники Яндекса — они понесли нам на подключение и обслуживание ещё и свои рабочие устройства, чтобы мы централизованно их поддерживали. Эти телефоны и планшеты становились доступны всем — и это было круто, потому что наш парк устройств рос без всяких вложений. Но на своих полках мы перестали помещаться.
С переносом к себе в интерфейс Android-фермы мы убили сразу двух зайцев. Получили единую модель данных, которая умеет работать с разными технологиями, и расширили базу устройств за счёт девайсов сотрудников. И в это же время нам выделили первую собственную комнатку!
Собираем стеллажи в новой серверной
Рост фермы
Пока мы ломали голову над тем, как совладать с ограничениями Apple и подключить к одному компьютеру несколько устройств, помощь пришла с другой стороны.
На складах у хелпдеска Яндекса в тот момент образовалось какое-то количество старых макбуков. Они уже не подходили по параметрам для работы разработчиков, но вполне годились нам на роль агента для управления iOS-устройствами. Спасибо коллегам из хелпа — великодушно поделились с нами железом.
Дело пошло быстрее. Весной 2019-го ферма сразу выросла на двадцать макбуков. Дальше ребята из хелпдеска отдавали в Колхоз рабочие компьютеры Apple, если они больше никому были не нужны. Нам оставалось только докупать телефоны и планшеты на iOS и подключать их к агентам. Чем мы и занялись.
В первую очередь приобретали устройства, которых в сервисе Crowd не было совсем (но имелись запросы на них) или которых часто не хватало. В последнем случае тесты в Колхозе на этих девайсах проходили с большими сроками, и это нарушало дедлайн у проектов Яндекса. После того как закрыли критические дыры, перешли на докупку просто популярных устройств, чтобы постепенно всё больше тестов переводить на ферму.
Одновременно с ростом фермы мы вдруг осознали, что все наши устройства — телефоны, планшеты — в первую очередь пользовательские, а не промышленные, как серверное оборудование. Почему-то они не хотели сами жить и стабильно работать 24/7, а требовали внимания. Нормой стала ситуация, когда девайсы постоянно ломаются, зависают, выключаются или перезагружаются.
Решили, что нам нужен специальный человек, который будет технически поддерживать ферму — взяли в команду системного администратора. Плюс создали чат в телеграме, где пользователи задавали вопросы напрямую разработчикам фермы: как подключиться, сбросить настройки, что делать, если устройство зависло, и так далее. Постепенно мы обзаведёмся и полноценной службой поддержки, но это будет только через год, когда ферма разрастётся до такой степени, что станет невозможно отвечать всем своими силами.

Поначалу макбуки, как и десктопы, стояли на ребре или на верхней полке, рядом с каждым лежал телефон. Место распределялось неэффективно, но решение для этого мы нашли позже
Образовательное приложение для подготовки к ЕГЭ по истории
ЕГЭ История — комфортное приложение для подготовки к ЕГЭ для андроид устройств.
Теоретический материал и примеры Данное приложение на андроид для подготовки к ЕГЭ по истории поможет ученикам освоить всю необходимую информацию для получения вышей отметки. Здесь вы найдёте огромное количество исторических дат, в том числе подписаний соглашений и договоров, периоды правления различных исторических личностей, а также проработанный теоретический блок. Помимо теории, для вас подготовлено огромное количество практических заданий и тестов по истории России и мира.
Разблокированы платные возможности.
Всё-таки форкаем решение для Android (и снова расширяемся)
Нагрузка на Колхоз росла, и стороннее решение для устройств на Android перестало нас устраивать.
У Open STF часто не загружался фронтенд. Статус устройства горел зелёным (готовым к работе), а удалённый экран не грузился. Нам приходили жалобы, а мы никак не могли повлиять на стабильность стороннего решения.
Пришла пора разрабатывать свою версию Android-фермы. Но мы решили это делать с минимальными изменениями, чтобы по-прежнему было не очень сложно обновить софт управления с выходом новой версии Android.
Форк заключался в том, что мы выпилили всю авторизацию — то есть, наоборот вырезали часть функциональности из Open STF, чтобы не мешала. И затем развернули копию этого софта прямо у себя в серверной, на тех же компьютерах, куда были подключены наши устройства на Android.
Было: одна большая Open STF, которая обслуживала все устройства и тянула их за собой в случае проблем; плюс прокси-сервер для проверки авторизации. Стало: четыре маленьких локальных фермы, каждая из которых не зависит от других и даёт прямой доступ к устройствам под контролем нашего бэкенда.
Обычно мы заклеиваем камеру на устройствах, и на снимке виден только чёрный экран:
Но иногда можно увидеть лоток, в котором лежат устройства:
Благодаря новой архитектуре Android-фермы мы получили возможность устанавливать часть софта для управления устройствами на компьютеры вне серверной Колхоза. Как раз в это время к нам пришли администраторы Гиперкуба и предложили добавить на ферму их устройства — во время пандемии сотрудники разобрали их по домам и не могли передавать девайсы друг другу.
Всё, что нам нужно было сделать, — установить специальную программу на компьютеры в Гиперкубе. И в Колхозе появилось больше тысячи новых устройств на Android. Единственное ограничение — эти телефоны были доступны только штатным сотрудникам, потому что не имели доступа к внешнему Wi-Fi. Но в период пандемии и массового перехода на удалёнку это расширение оказалось полезным.
Увы, с iOS-девайсами такая интеграция была невозможна — мы не могли засунуть в кубик сорок дополнительных ноутбуков, чтобы к каждому подключить по телефону. А с Android — пожалуйста. Их можно десятками подсоединять к одному агенту, и всё работает быстро и качественно. Наш рекорд — к одному мощному компьютеру подключены сто девайсов на Android.
Но после интеграции Гиперкуба мы поняли, что можем сделать сервером фермы любой рабочий ноутбук — на macOS, Windows или Linux. И уже к нему сотрудники смогут подключать все нужные им устройства. Эту возможность мы стали предоставлять распределённым командам: они собирают маленькую ферму с собственными девайсами прямо у себя в кабинете и сами решают, кому давать права управления их устройствами. После этого команда может подключаться к своим рабочим девайсам из любых точек мира — через единый интерфейс Колхоза.

С ростом парка устройств провода снова начали походить на распутанный клубок
Чужое решение
В начале 2018 года мы поняли, что хорошо бы иметь какую-то ферму, чтобы всё тестирование проходило удалённо и под нашим контролем. Сначала даже не думали о собственной разработке, а просто смотрели, какие решения уже существуют.
Подошло только одно — Open STF, ферма для Android-смартфонов. Для iOS подобную функциональность предлагали облачные провайдеры, но такие фермы стоили очень дорого и были развёрнуты на удалённых серверах — а мы не всегда можем отправлять за пределы компании приложения в статусе beta.
Решили для начала попробовать Open STF. Принцип работы фермы:

Open STF — международная платформа, интерфейс только на английском
Тут мы поняли, что у нас, оказывается, много специфических требований к ферме для крауд-тестирования. Например, остро не хватало возможности автоматизированно следить за состоянием устройств и ограничивать к ним доступ. Телефон мог сломаться, а мы даже не знали об этом, и он продолжал числиться в нашей базе. Или несколько тестировщиков одновременно приходили на один и тот же смартфон и мешали друг другу.
Open STF не была заточена под задачи нашего сервиса Crowd. Это был софт, на котором к одному девайсу параллельно могли подключаться несколько тестировщиков. К тому же устройства часто падали, а добавление новых смартфонов одновременно с выполнением заданий на ферме вызывало проблемы.
Мы подключили через Open STF несколько десятков Android-смартфонов и пользовались ими, когда у удалённых тестировщиков не было нужной модели телефона или версии ОС для задачи. Но главные проблемы мы этим не закрыли — по-прежнему не хватало устройств на iOS, а о масштабировании не было речи.

В Open STF отсутствовала возможность забронировать девайс — просто открываешь и пользуешься, иногда вместе с другими тестировщиками
Итоги и планы
Если оглядываться назад, то мы, конечно, не ожидали, что ферма разрастётся до таких масштабов. Создавали её для iOS-устройств, чтобы предоставить удалённым тестировщикам дефицитные версии телефонов и ОС, а в итоге сделали мультиплатформенное решение, которое поддержало девайсами весь Яндекс на удалёнке и позволило сервису Crowd вырасти из 100 исполнителей в текущие 3000+ человек.
Всё это было бы невозможно без поддержки ряда команд Яндекса, которые помогали нам развивать сервис на разных этапах истории. Хелпдеск спас железом, Гиперкуб поделился устройствами, группы Поиска, Алисы, Навигатора и Музыки помогли с внедрением полезных фич. Парк Колхоза стартовал с 12 айфонов и 30 андроидов, а теперь у нас больше 200 iOS-устройств, около 450 андроидов и больше 50 умных девайсов, Станций и телевизоров. И всё это можно продолжать масштабировать.
В планах — продолжать наращивать качество и объём тестирования, увеличивать возможности фермы за счёт технических доработок.
Обсудить в форуме




