Давайте представим, что вы производитель умной бытовой техники: чайников, мультиварок, утюгов, обогревателей, увлажнителей, лампочек, розеток и других приборов. Иными словами, у вас большой ассортимент совершенно разных товаров, которыми можно управлять через приложение на смартфоне или даже голосом.  Для корректной работы и выполнения всех функций мало сконструировать девайс, нужно его хорошенько протестировать.  Теперь предположим, что вам необходимо провести проверку нагрева и кипячения чайника: на объёмах от 0.5 до 1.7 литров, с шагом в 0.2 литра; в диапазоне температур от 30 до 100 градусов Цельсия, с шагом в 5 градусов; для диапазона напряжений 180 – 250B.   А еще, проверить надёжность срабатывания кнопок управления, корректность световой и звуковой индикации, надёжность и долговечность работы контактной группы. Кроме этого полностью протестировать работу цепи "Прибор - Приложение - Сервер - Голосовое управление - Гейтвей - Управляющий прибор - Сценарий". При этом определить разброс фактических параметров и скрупулёзно занести все результаты в журнал, создав отчёт о тестировании.  Конечно, такую задачу можно решить "в лоб". Взять чайник, ТЗ, смартфон и вручную всё протестировать. Для единичных тестов вполне обозримая работа.  Но, разумеется, по одному экземпляру невозможно сделать выводы о качестве всей партии продукции, а значит, что для нескольких десятков, а может и сотен чайников, решать такие задачи вручную крайне ресурсозатратно. Мало того, что это займёт большой промежуток времени, так еще человеческий фактор повышает риски ошибок при постоянном повторении действий в процессе тестирования.  В нашем арсенале более 150SKU умной техники. Не только чайников, но и мультиварок, кофеварок, увлажнителей и многих других категорий, которые необходимо тестировать с завидной периодичностью. К примеру, при обновлении прошивки или приложения. Так какой же выход?  Мы решили, что лучше всего создать инструмент, который позволит максимально избавить все процессы от ручных проверок. Таким инструментом стали стенды автоматического тестирования (САТы).  Это уникальный проект компании Ready for Sky. САТы разрабатываются, чтобы значительно, в десятки или сотни раз, сэкономить рабочее время отдела тестирования (на автоматизируемых операциях) и при этом увеличить результативность и качество.  Центральная концепция стендов - имитация работы человека с устройством. Создание условного робота, который вместо человека выполняет рутинные задачи: наливает и сливает воду, нажимает на кнопки, контролирует температуру и сравнивает ее с заданной, следит за тем, что происходит с прибором, составляет отчет, сообщает об обнаруженных проблемах и останавливает процесс тестирования в случае возникновения аварийной ситуации.  Стоит и кратко упомянуть здесь плюсы автоматизации — работа 24/7, устранение человеческого фактора, продуктивность. А при соблюдении некоторых подходов эксплуатации и проектирования (но в этой статье мы не об этом) - повышенная надежность и экономический выигрыш.  Первые версии наших стендов были на основе DIY (буквально "сделай сам") компонентов типа микроконтроллеров, Raspberry и им подобных одноплатников. Решения получились работоспособные, но не такие надёжные, как требуется для промышленного производства. То есть концепцию и возможности они подтвердили, свое отработали с лихвой. Но необходимо было повысить ресурс и гибкость. Более качественной реализацией стал вариант на основе промышленного логического контроллера (ПЛК). Дополнительно переход на ПЛК стал стратегическим моментом и открыл двери в новое направление развития компании - промышленную автоматизацию.  С начала 2021 года нами велись разработка САТов на ПЛК и наработка типовых решений. Сейчас структурная схема работы стендов выглядит следующим образом:  Каждый стенд автоматического тестирования уникален по своей природе и разрабатывался под группу однотипных устройств. Возможно, это не самый универсальный подход, но на данный момент самый надёжный с точки зрения снижения рисков отказа и планирования эксплуатации. В ходе проектирования стендов нами был произведен расчет стоимости вариантов с разной степенью унификации и учетом прогноза их единовременной загрузки. Выяснилось, что наиболее высокая степень универсальности, где предполагалось применять робот, уже не столь выгодна с точки зрения себестоимости, как это ожидалось изначально. Правильнее делать стенды под группы однотипных (не обязательно идентичных) товаров.  Вот так, например, выглядит сейчас САТ для кофеварки RCM-M1518S/1527S: Для каждой такой группы SKU создаётся специальная рама, можно сказать выстраиваются "строительные леса", на которые крепятся управляющие элементы (соленоиды, моторы, вентили, водяные насосы, сервоприводы) и элементы контроля (датчики, концевики и др.).  САТы объединяются по 8 устройств, устанавливаются на стеллажи и подключаются к ПЛК, через специально подобранные модули.  А так выглядят в итоге "фермы" тестирования. Три полки на которых расположены и «клетки» отдельных стендов, и вспомогательное оборудование, и все необходимые коммуникации. В перспективе добавим рекуператор и сделаем закрытый контур нагрев/охлаждение для воды.  К каждой такой "ферме" подводится вода, слив, электричество. Все надежно заземляется. ПЛК и все его модули собраны в специальный шкаф на торце стеллажа.  Устройства, которые тестируются на стендах используются "из коробки", то есть в их конструкцию (корпус, кнопки, дисплеи) мы вмешиваемся только в исключительном случае. Корпус не разбираем, дополнительных проводов к платам устройств не подключаем.  При таком подходе возникает проблема: а как получать информацию о состоянии прибора? Понятно, что температуру в чайнике измерит контрольная термопара, а факт потребления - датчик тока. А что делать с цифрой 24 на дисплее увлажнителя? Как её получить автоматически, не перехватывая данных со шлейфа?  Здесь на помощь приходят методы компьютерного зрения. Это, пожалуй, одна из самых интересных частей проекта. С помощью инструментов компьютерного зрения можно с легкостью определить простую светодиодную индикацию, так можно ещё и считать данные с сегментного индикатора.  Для этого на каждый стенд устанавливается камера, которая позволяет видеть панель управления и элементы индикации прибора и распознавать их состояние без участия человека. Применение компьютерного зрения дало свои плоды ещё на этапе разработки стендов. Так были обнаружены редкие сбои в индикации одного из устройств, которые при ручном тестировании просто не замечали, поскольку тестировщик непрерывно и длительно смотреть на индикацию устройства просто не в состоянии.  При помощи микрофонов этих же камер планируется поддержать возможность верификации и анализа звуковых сигналов от прибора. А именно: длительности, интенсивности и частотного спектра. У нас есть наработки в этой области. Мы умеем отличать информативный сигнал от шума.  Наибольшая сложность в части работы со звуком, заключается в том, что стенды стоят в одном помещении, где работает и другая техника, ходят люди.  Чтобы избежать сбоев в работе необходимо применение специальных методик анализа звуковой индикации, а также конструктивных приемов. В этом направлении мы активно работаем. В ходе наращивания количества стендов нам пришлось пересмотреть свои требования к сетевому оборудованию и структуре сети. Причина в том, что мы перешли на постоянную запись видеопотока вместо его эпизодического использования, когда это требуется для проведения конкретного тест-кейса. Видеорегистрация существенно помогает восстановить условия возникновения «бага». Но из-за этого значительно изменились объемы передаваемых и хранимых данных.  Помимо индивидуальных камер, установлено наблюдение общего вида, которое показывает, как отрабатывают разные механические узлы стендов и позволяет понять картину происходящего в целом.  Программное управление стендами мы разделили классически — на высокоуровневое и низкоуровневое. Высокоуровневое выполнено при помощи компьютера под управлением Linux и скриптов на Python, а низкоуровневое осуществляется на уровне программ в ПЛК.  Тут надо сразу уточнить почему именно Python, а не традиционные для промышленных применений OPC и SCADA.  Не последнюю роль играет тот факт, что Python нашим тестировщикам привычнее и позволяет выдержать подходы CI/CD, привычные всем в нашей компании. Еще мы тестируем управление нашей продукцией через Bluetooth и WiFi. Это и протоколы, и процесс управления со смартфона, и другие варианты взаимодействия - в том числе между самими устройствами. Поэтому принятый в промышленной автоматике инструментарий сюда просто не вписывается. Наконец, это просто дешевле, если учесть весь набор пожеланий к возможностям SCADA.  В итоге, для удобства специалистов отдела тестирования над командами ПЛК были созданы «обёртки» на Python. Компьютерное зрение, также реализовано на Python с применением OpenCV (Open Source Computer Vision Library). Таким образом, написание теста, имитирующего ручное тестирование теперь не сложнее написания автотеста программного блока.  В разработке САТов мы придерживаемся продуктового подхода, а это значит, что мы очень внимательно относимся к обратной связи.  В декабре 2021 года была проведена первая внутренняя презентация двух пилотных стендов. На которой были озвучены вопросы:  Возможно ли управлять стендами удаленно? Можно ли подключить Android-смартфон и управлять им? Высказанное попало в бэклог проекта и уже в начале марта мы презентовали новые функции:  дистанционное управление САТ; удалённая отладка по ADB на Android-смартфоне; удалённый доступ к UI Android-смартфона. Таким образом, специалист из любой точки мира, имея доступ к Интернету, может подключиться к стенду, дистанционно установить сборку приложения на смартфон и отладить его работу так, как будто устройство у него в руках.  На момент написания статьи (4.04.2022) нами собрано четыре стенда автоматического тестирования для двух чайников, кофеварки и увлажнителя. Они переданы специалистам отдела тестирования в опытно-промышленную эксплуатацию.  На 2022 год запланировано дальнейшее расширение парка еще на 20 стендов. Среди которых планируются, как устройства, находящиеся в продаже, так и те, что на стадии разработки. И это вполне адекватные планы, поскольку все аппаратные и программные части стенда типизированы, и мы уже видим прирост в скорости сборки и ввода в эксплуатацию стендов под отдельные SKU.  В нашей компании работают сотрудники по всему миру. При этом разрабатываем мы не только программную, но и аппаратную составляющие. Поэтому появление таких стендов для нас прямо-таки жизненно важно.  Итак, подводя итог, что же нам удалось создать?  Изначальная идея - создать инструмент автоматизации ручного тестирования - не только прошла этап proof of concept, но и пошла дальше. Благодаря живому интересу к разработке мы реализовали удаленный доступ к средствам тестирования, а еще и снабдили Android-разработчиков всем необходимым для работы и отладки своих сборок в реальном окружении.  Для нас стенды решают логистические проблемы с образцами и сокращают их количество, снижают трудозатраты и кардинально улучшают качество и глубину регрессионного тестирования.  Немного про экономику:  Мы рассчитали окупаемость стендов автоматического тестирования на основании трудозатрат на сборку, стоимости комплектующих и накладных расходов. Основной профит от реализации этого проекта – экономия времени специалистов отдела тестирования.  По понятным соображениям привести исходные цифры мы не можем, а вот результаты приведем.  Приведен расчет экономики проекта "Стенды автоматического тестирования" по данным 2-й очереди по ценам на 22.03.2022. Рассчитаны сроки окупаемости по трем сценариям:  оптимальный позитивный  негативный № Сценарий Цены на комплектующие Трудоемкость Экономия   Окупаемость, мес  1 Оптимальный Цены не изменяются Трудоемкость не изменяется  Экономия ресурса  100%  12,98  2 Позитивный Цены снизятся на 20% Трудоемкость меньше на 20%  Экономия ресурса больше на 20%  8,65  3 Негативный Цены увеличатся на 20% Трудоемкость больше на 20%  Экономия ресурса меньше на 20%   19,46  Сейчас ведутся работы над расширением функциональных возможностей и повышения удобства взаимодействия. Например, как вы могли заметить, на схеме рядом с ПК управления указано наличие веб-интерфейса, который мы сейчас активно разрабатываем.  Мы сделали это. Микроконтроллеры можно удалённо программировать, запускать, отлаживать работу их программ. Каждая из упомянутых функций достойна отдельной статьи. Если вас заинтересует конкретная тематика, напишите в комментариях и мы раскроем её подробнее.  Направление промышленной автоматизации нас очень сильно драйвит. Мы хотим развить его в гораздо большее. В интернет вещей для разработчиков и тестировщиков.  Если у вас есть устройства, которые нужно подключить к интернету вещей или схожие задачи по автоматизации процесса тестирования, да ещё и через Интернет, - мы с удовольствием вам в этом поможем. Обращайтесь. Подписывайтесь на наш Телеграм-канал и следите за свежими новостями.Если можете поделиться своим опытом или предложить кооперацию – тоже не стесняйтесь, пишите!