image alt text


Привет! Я хочу рассказать, как мы сделали автоматическую выдачу 70 мобильных тестовых устройств, и перестали задаваться вопросом «у кого тот розовый iPhone 6».


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


Небольшая вводная: все устройства закреплены за тестировщиками из команды мобильной разработки. Сейчас у нас около 70 девайсов, их количество растет пропорционально активности производителей.


Автоматический учет и ничего личного


Все тестовые устройства сейчас располагаются на DIY-стойках в шкафу. У каждого смартфона или планшета свое пронумерованное место и свой кабель для зарядки. Для учета используется Windows 10 приложение на планшете с подключенным сканером пропусков.


Для того, чтобы взять/отдать девайс нужно:


  • приложить бейджик к считывателю
    image alt text


  • отсканировать QR-код на нужных устройствах
    image alt text

После этого гаджет закрепляется за сотрудником или открепляется от него в случае сдачи.


Удобный поиск нужного смартфона — как бонус.


image alt text


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


image alt text


Последняя версия стенда.


Конечно же, так было не всегда, и еще какой-то год назад никакой автоматизации и технической красоты в нашем пуле тестовых устройств не было.


Давным-давно, в далекой-далекой галактике…


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


image alt text
Фотореконструкция былых дней.


Плюс: учет не требовал каких-либо телодвижений со стороны мобильной разработки.


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


Со временем устройств и сотрудников становилось все больше, и привычная тетрадь уже не могла достойно ответить на вызовы времени и потребности тестировщиков. Поэтому её оцифровали и перенесли на страницу в Confluence, где наступила настоящая диктатура тестерского пролетариата. Хочешь взять вот этот смартфон — сначала найди свободного тестировщика, который все оформит. Кроме того, у каждого тестировщика всегда «Release is coming!», а тут еще отвлекают.


Но даже если найти человека удавалось, квест не заканчивался. Часто оказывалось, что нужный гаджет разряжен или уже занят. А вот если и тут повезло, тестировщик добавлял в Confluence-страничку ФИО сотрудника напротив взятых устройств.


Плюс: можно легко понять, сколько устройств используются коллегами из других отделов.


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


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


Начинаем стройку


Какие вопросы мы хотели решить:


  • все устройства должны быть постоянно заряженными, а сама зарядка не должна занимать больше пары часов;


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


  • наличие\отсутствие устройства должно учитываться автоматически.

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


Проблема #1 — зарядка


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


Но тут я очень кстати нашел подходящий агрегат производства Anker:


image alt text


Этот черный брусок позволяет одновременно заряжать до десяти устройств с мощностью ~1.2A каждый, а форм-фактор идеально подходит для расположения таких штуковин на полках. Например, на одной из них у нас заряжается 30 телефонов.


Проблема #2 — всему свое место


Для удобной расстановки мы заказали железный шкаф с дверьми-жалюзи «ДиКом **КД-144**»: он закрывается на замок, двери-жалюзи никому не мешают в открытом состоянии, а небольшие зазоры между полками и стенками позволяют без проблем провести провода для зарядки. Остается только просверлить небольшое отверстие в задней стенке для удлинителя.


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


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


Совет: лучше покупать пеноплекс шириной 3 см, тогда он подойдет как для телефонов, так и для планшетов.


Что в итоге получилось:


image alt text
Аккуратные ряды смартфонов, каждый на зарядке, нет клубка проводов.


image alt text


Совсем скоро у каждого устройства будет собственный провод — мы их уже заказали. А для окончательного феншуя пригодились вот такие зажимы с двусторонним скотчем на площадке:


image alt text
Заказать их проще всего на всем известно й китайской торговой площадке.


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


Проблема #3, организационно-учетная


Эту задачу мы разделили на три подзадачи:


  1. Идентификация сотрудника с использованием его бейджа. Для этого купили считыватель для пропусков: ST-CE01EM. Принцип работы считывателя прост: подключаем его по USB к ноутбуку (также считыватель работает и с Android-устройствами через OTG-переходник), открываем блокнот, прикладываем бейджик, и номер пропуска вводится посимвольно. Определить пользователя мы можем, внеся его данные в БД или через API.


  2. Идентификация устройства. Для пилотной версии мы выбрали QR-коды из-за быстроты реализации. Достаточно распечатать и наклеить QR-код с идентификатором устройства на каждый девайс.
    Но у QR-кодов в процессе использования выявилось несколько недостатков. В нашем приложении пользователь считывает код с помощью фронтальной камеры планшета и может не заметить сообщения, что устройство добавлено в "корзину", если перекроет экран рукой. Еще наш шкаф с мобилками стоит около окна, поэтому по утрам бывает сложно сканировать QR-коды, если предварительно не задернуть жалюзи. Поэтому сейчас мы переезжаем с QR-кодов на RFID-метки с клейкой основой — вместо сканирования кода достаточно будет приложить девайс к сканеру пропусков.


  3. Фиксация изменений с помощью приложения для Windows 10 на С#.

UWP-приложение запускается на телефонах, планшетах и ПК с Windows 10. Кстати, про разработку UWP-приложений под Windows 10 думаем сделать отдельный пост. Если вам эта тема тоже интересна — пишите в комментариях.


Как перестать бояться и начать пользоваться


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


В первую очередь, вам нужно сделать форк на GitHub и собрать проект в Visual Studio 2017. Потом нужно найти PC для запуска приложения и сканер пропусков, а также заполнить базу сотрудников.


Необходимое оборудование


  • считыватель для пропусков — например, ST-CE010EM. Главное, чтобы устройство имитировало набор клавиш на клавиатуре. Для проверки подключите считыватель к компьютеру, откройте блокнот и приложите пропуск к считывателю. Номер пропуска должен появиться посимвольно.
    Приложение по умолчанию ожидает 10-символьную длину пропуска: 000+НОМЕР_ПРОПУСКА, например 0001234567. Если при сканировании пропуска у вас не проставляются нули вначале, то считыватель можно перепрограммировать или отредактировать параметры номера бейджика в MainViewModel.cs.


  • PC с Windows 10. Удобнее использовать планшет или устройство все-в-одном с тачскрином.

Наполнение базы данных


База приложения в формате sqlite хранится в корне проекта TestStand.


Заполняем Devices


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


  • Id — номер устройства (QR код содержит как раз id устройства);


  • Model — модель гаджета;


  • Family — семейство устройства: iOS/Android/Windows;


  • OsVersion — версия операционной системы;


  • Type — тип устройства (Phone/Tablet/Wearable);


  • ScreenSize — размер экрана;


  • ScreenResolution — разрешение экрана;


  • IsContactlessPaymentsSupported — поддерживается ли на телефоне бесконтактные платежи (0/1);


  • PhoneNumber — номер телефона, если в нем есть симкарта.

Заполняем Employee


Если у вас есть возможность получать данные по пропуску через API, то можете написать для приложения расширение (extension). О расширениях уже подробно написал в своей статье Вадим Новосельцев, за что ему огромное спасибо!


В нашем приложении работа с расширениями ведется через ExtensionsService.cs. Само расширение используется в EmployeeService.cs (название по умолчанию: com.extensions.yamoney.teststand):


  • BadgeId — номер бейджика;


  • FirstName — ФИО сотрудника;


  • Login — логин сотрудника, по нему отправляется почта (login@domen.com). Отправка почты настраивается в EmailNotificationService.cs.

Но если у вас такой возможности нет, то можно заполнить таблицу вручную.


Печатаем QR-коды


В QR-коде должен быть записан ID устройства из таблицы Devices. Сформировать сам код можно онлайн, либо подобрать одну из множества утилит. Наклеиваем коды на гаджеты — и можно пользоваться.


image alt text


И вот прошел месяц


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


Главное преимущество в том, что мы теперь не тратим время на учет самих устройств, а на основании полученной статистики можем:


  1. Видеть нагрузку на тестовый стенд. Мы понимаем какие устройства чаще используются в других командах: с какими ОС и диагоналями экранов.


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


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

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


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

Поделиться с друзьями
-->

Комментарии (31)


  1. solver
    23.03.2017 11:54
    +3

    image


    1. Arnautka
      23.03.2017 12:48

      Вот тут никого;) https://yadi.sk/d/UuzjqZPg3GGjFG


  1. Viktorianec
    23.03.2017 12:09

    Не понравился первый пункт сразу, а если кто-то возьмёт бейдж другого сотрудника?
    Как начинание и поделка годится, как серьёзное «ноу-хау» крупной компании? Ну такое.
    Я бы предложил внедрить сканер отпечатков пальцев, и убить двух зайцев, занятых на печать каких-то бейджей и обновление их в случае утраты. Конечно, пальцы тоже можно утратить, но это посложнее отпечатков:)

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


    1. Zagrebelion
      23.03.2017 12:28
      +4

      а ещё можно попробовать широкой отвёрткой сковырнуть замок и унести все девайсы вообще без регистрации.
      Там же болдом написано: Сразу отмечу, что описываемое в статье решение подразумевает полное доверие сотруднику.


    1. greywing
      23.03.2017 12:48
      +1

      У нас с пропусками все строго, без личного пропуска не зайдешь в кабинет.
      А отпечаток пальца — слишком банально. Вот определять сотрудника с помощью сканирование сетчатки глаза уже интереснее. И глаз потерять еще сложней, чем палец :D
      Такой сканер есть в новых Surface планшетах/ноутбуках. И эта доработка уже есть в нашем TODO листе.

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


  1. Merkat0r
    23.03.2017 12:36

    Хе, то чувство, когда Яндекс изобрел то, что ты наговнокодил и используешь с 2010 для учета оборудования :)))
    Помню админа из Acronis он себе такое же делал для серверов — навел и вся инфа о сервер и последнем доступе.


    1. greywing
      23.03.2017 13:03

      Ну в 2010 у нас в Я.Деньгах еще и потребности такой не было — приложение появилось в 2011)
      А систем учета много. Но нам была нужна именно та, которая работает с мобильными девайсами и имеет удобный интерфейс.
      Подходящего решения не нашли, поэтому и начали сами писать.
      Приложение создавалось в качестве эксперимента, прям Microsoft Garage Team :)

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


  1. oleg_lap
    23.03.2017 13:13

    Вообще-то серьёзная «команда» использует Блэкберри, и учёт и конфиденциальность обеспечены


    1. greywing
      23.03.2017 13:13

      А как Blackberry помогла бы нам решить проблему учета мобильных тестовых устройств?


      1. oleg_lap
        23.03.2017 13:36

        Blackberry Enterprise Server
        Хотя в России он кажется запрещён


        1. Merkat0r
          23.03.2017 13:53

          вы несете какую-то дичь :))
          Как связан BES и

          и учёт и конфиденциальность обеспечены

          В любом случае оно все устарело

          Да и как оно может быть запрещено… если утрировать то это фирменный аля OwnCloud только для блекберри


          1. oleg_lap
            23.03.2017 14:11

            конфиденциальность обеспечивается за счёт использования push а не pull технологии передачи (не хранятся на сервере оператора Ваши звонки, смс и ...), можно звонить по PIN коду устройства
            ну, да, вроде используется (википедия) «В России смартфоны BlackBerry долгое время официально не продавались. Первым решился «ВымпелКом» и стал подключать BlackBerry в России через VPN-канал от корпоративной сети до площадки оператора.»


            1. Merkat0r
              23.03.2017 15:48

              Ммм… Вы уверены, что понимаете как оно работает и для чего нужно?
              А вроде не 1 апреля еще да и не пятница хмхмхм


  1. JavaFox
    23.03.2017 14:09

    Жду статью про разработку UWP приложения и желательно побольше с какими проблемами столкнулись


  1. bluetooth
    23.03.2017 14:17

    Собираетесь переводить статью на английский? Было бы интересно внедрить что-то подобное у себя на работе :)


    1. greywing
      23.03.2017 14:29

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


  1. dmitry_dvm
    23.03.2017 14:21

    Интересное решение, особенно радует, что реализовано через UWP.


  1. fuCtor
    23.03.2017 14:22

    Как идея для развития: писали что планируете добавлять «бронирование» устройств, то добавляем Arduino (с arduino все лучше), к каждому устройству подводим диод. Когда сотрудник авторизуется, загораются диоды возле забронированных устройств, в итоге не надо искать, сразу видно где оно на полке.

    А про UWP было бы интересно почитать.


    1. greywing
      23.03.2017 14:47

      с arduino все лучше

      Воистину это так! А идея хорошая, взяли на заметку :)


  1. rsivakov
    23.03.2017 14:33

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


    1. greywing
      23.03.2017 15:01

      А какой юзеркейс? Предоставлять планшеты пассажирам на время перелета?

      бар-код был прямо на экране

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


      1. rsivakov
        23.03.2017 16:24
        +2

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

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


  1. Wesha
    24.03.2017 02:40
    +1

    сейф под управлением Windows 10

    Ожидал рассказ про то, как она неожиданно попыталась насильно проапдейтиться, подвесив весь сейф.


  1. AlexeiZavjalov
    24.03.2017 08:44
    +1

    Пару лет назад строили подобную инфраструктуру для тестирования планшетов и телефонов, но у нас предполагался удаленный доступ. Около 60 устройств тестировалось одновременно. Устройства были размещены в серверной, из-за требований по температурным режимам.

    Пришлось решить несколько технических проблем, включая

    • Невозможность подключить более 16 устройств по USB3. Сервера (разных моделей) бились в конвульсиях и достаточно быстро зависали. Связано или с Linux или с чипсетами. Решилось переходом на USB2.
    • Сложность одновременной зарядки и работы по USB. Anker и подобные хабы работали для некоторых устройств. Мощные девайсы требовали зарядки током 2A при полной загрузке. Было решение с отключением дисплеев, но работало не всегда. Пришлось работать с производителями и делать специфические хабы с 16-32 портами, по 2А на порт (стандарт BC1.2).
    • Размещение устройств с удобным доступом к ним для обслуживания. Решилось покупкой специальной полки для 19 дюймовой серверной стойки. Некоторые устройства запирались в 19 дюймовые ящики из-за секретности, для отвода тепла использовались вентиляторы.
    • Перезагрузка зависших устройств. Проблема была решена частично использованием реле для хабов, управляемых по USB.
    • Маркировка устройств и кабелей. Использовалась привязка к номерам хабов и номерам портов HUB1_P1. Для наклеек использовали специальный принтер.


    Вот как это выглядело:


    1. greywing
      24.03.2017 09:16
      +1

      Внушительно! Удаленный доступ был только для android устройств? Самописный? Мы рассматривали уже готовые решения по удаленному управлению, но они нам не подошли по многим параметрам. Но основная проблема – это плохое взаимодействие и скорость работы с iOS устройствами.


      1. AlexeiZavjalov
        24.03.2017 09:45

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


        1. greywing
          24.03.2017 13:47

          По-моему отличная тема для статьи! Про автоматизацию мобилок сейчас не так много информации, как хотелось бы. Мы сейчас работаем над автоматизацией тестирования на iOS и Android. Быть может посвятим этому одну из следующих статей :)


  1. dnch_chernov
    24.03.2017 09:30

    Я продвинулся в подобном решении чуть дальше — QR коды не нужны. Все usb хабы подключены к серверу, при отключении или подключении устройства соответствующая запись в БД автоматически обновляется.


    1. greywing
      24.03.2017 09:30

      У нас многие любят телефон в руках повертеть перед тем, как взять. Сила привычки :) Через неделю-другую перейдем с QR-колов на rfid метки и, думаю, будет так же удобно.


      1. lex-tsy
        27.03.2017 14:52

        Я так понимаю, что под rfid подразумевается nfc.
        Если это так, то не совсем удобно. Не на каждый телефон удастся приклеить метку.
        Да и если телефон имеет свой считыватель, то постоянно будет оповещать, что найдена метка.

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

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


  1. greywing
    27.03.2017 14:55

    У rfid меток и NFC разные частоты, так что проблем с постоянным считыванием не будет.
    И кажется более простой способ — это приложить девайс к ридеру, чем сканировать QR код.

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