Автоматизированное тестирование прошивок в iRZ: от идеи до реализации
Введение
Представим на минуту, что мы живем в идеальном мире. В мире, где все, что создано руками людей, работает стабильно и предсказуемо. Нет никаких «Компьютер вдруг перезагрузился, а я ничего не сохранил!», «Новая микроволновка опять не подогрела мой обед!», «Банкомат зажевал мою купюру!»…
И модемы не зависают. Ни те, что круглыми сутками беспрерывно обмениваются данными с организациями в дальних городах. Ни даже те, что установлены где-то в подвалах или шахтах и уже долгое время не обслуживаются. Реально ли создать промышленный модем, который будет вовремя и в полном объеме передавать нужную информацию безо всяких неприятностей? Мы считаем, что да — благодаря всестороннему и глубокому тестированию встроенного программного обеспечения (ПО).
Переломный момент
Раньше встроенное ПО модемов в «iRZ Электроника» проверяли вручную. Тестировщик устанавливал новую прошивку на устройство и работал с ним по стандартным пользовательским сценариям: подключить к прибору учета, установить связь с сервером, запросить данные и т. д.
В первое время такой подход был вполне успешным: выпускаемая продукция работала без нареканий. В дальнейшем компания стала расширять функциональность устройств. Модемы научились передавать данные не на один, а на пять серверов одновременно, отправлять SMS-сообщения, взаимодействовать с GPIO и т. д. С каждым разом проверка ПО занимала все больше времени и порой растягивалась на несколько месяцев.
Однажды, несмотря на упорный труд отдела тестирования, была выпущена прошивка с ошибкой. Модем при определенных настройках некорректно передавал на сервер данные от регулятора (устройство, которое поддерживает заданное значение температуры теплоносителя). В процессе проверки сотрудник просто не воспроизвел данный сценарий, и ошибку обнаружил пользователь. Конечно, сразу же была выпущена новая версия прошивки, в которой неисправность была устранена. Но инцидент явно показал, что с помощью ручного тестирования уже невозможно обеспечить высокое качество продукции, поэтому пора переходить к автоматизированному тестированию.
Собственная разработка
Если говорить упрощенно, при автоматизированном тестировании одна программа проверяет другую. Тестировщики в идеале просто нажимают на кнопку, и прошивка протестирована, работает без сбоев (если программисты тоже не ошибаются).
На практике оказалось, что нет ни одной программы, способной протестировать все функции модема. И даже сложные программные комплексы с большим количеством кнопок, вкладок и окошек не справятся с этой задачей. Просто потому что модем — это именно связка «железо» + «софт», и для его проверки нужно определенным образом взаимодействовать с оборудованием: подавать сигналы на коммутирующее реле, источники нагрузки, GPIO и т. п.
В «iRZ Электроника» решили создать собственный программно-аппаратный комплекс (ПАК), который будет полноценно работать с модемом и таким образом тестировать функциональность его встроенного ПО.
Разработка ПАК включала несколько крупных этапов:
- Утвердить архитектуру.
- Выбрать аппаратное обеспечение.
- Выбрать или разработать ПО.
- Запустить всю систему и тестировать прошивки автоматизированно.
Архитектура ПАК
В процессе разработки архитектуры были сформулированы требования к ПАК:
- Эффективность. ПАК тестирует прошивку модема с максимальной глубиной: выполняет одни и те же тесты при разных настройках устройства, моделирует нестандартные и негативные сценарии (обрыв связи, перепад напряжения и пр.). ПАК тестирует прошивки для разных моделей устройств одновременно.
- Расширяемость. Если прошивка наделяет модем новыми функциями, тест для проверки этих функций легко добавить к остальным тестам.
- Масштабируемость. Если компания выпускает новую модель модема, аппаратные блоки для проверки ее прошивки легко внедряются в структуру ПАК.
- Адекватная стоимость.
Исходя из этих требований утверждена архитектура, которая представлена на рис. 1, и на ее основе создан сам ПАК тестирования.
Аппаратное обеспечение
Как видно из схемы, аппаратная часть ПАК состоит из управляющего сервера, проверяющих модулей, коммутатора и вспомогательных модулей.
Управляющий сервер — это серверный компьютер, где хранятся тесты. Сервер передает эти тесты на проверяющие модули, и уже они взаимодействуют с модемами.
В качестве проверяющих модулей выступают мини-компьютеры Raspberry PI — палочка-выручалочка для разработчиков. Такое устройство хоть и не обладает сверхмощными характеристиками, но с легкостью управляет нужными для тестирования компонентами. В его плате предусмотрены разъемы GPIO для низкоуровневой периферии (датчиков, реле и пр.), Ethernet-порт для сети, USB для флэшек или иного оборудования. Привлекает и низкая цена компьютера — в среднем $10–35 в зависимости от модели.
Получив тест, проверяющий модуль последовательно выполняет записанные в нем действия. Например, подключиться к модему → отправить настройку → отправить данные. Далее он сравнивает реакцию устройства с той, что прописана в тесте, и отправляет результат обратно на управляющий сервер.
Проверяющий модуль не требует особых настроек и легко встраивается в архитектуру ПАК. В текущем решении участвуют два вида таких модулей: один вид используется для тестирования модемов, второй — для тестирования роутеров. В ближайшее время будут добавлены еще несколько модулей, поскольку «iRZ Электроника» планирует выпуск новых устройств.
Коммутатор распределяет тесты от сервера среди проверяющих модулей. Это стандартное устройство для работы с VLAN-сетями (англ. Virtual Local Area Network — виртуальная локальная сеть).
Под вспомогательными модулями обозначены GSM-модемы, которые по сигналу от сервера отправляют SMS-сообщения или звонят на модемы. Без их помощи невозможно полностью проверить прошивку, но они не выполняют тесты и не взаимодействуют с проверяющими модулями.
Программное обеспечение
Тест для прошивки представляет собой скрипт — самостоятельный программный код, выполняемый независимо от других скриптов. В «iRZ Электроника» скрипты пишут на Java (рис. 2).
Каждый скрипт тестирует только одну функцию модема, но при разных настройках. Так, в рамках проверки функции «отправить данные прибору учета по RS-485» сама передача данных производится при скоростях 600, 1200, 2400 бод и т. д. В сумме модем обращается к эмулятору прибора учета до 10 000 раз за проверку — столь велико число разных сочетаний настроек, учитываемое скриптом.
Для того чтобы тестировщикам было удобно управлять всем процессом проверки, написан веб-интерфейс. С его помощью сотрудник выбирает скрипты из базы данных и задает порядок их выполнения, а затем наблюдает результаты (рис. 3).
Сеть
Все элементы ПАК объединены в одну общую физическую сеть, внутри которой реализовано несколько VLAN-сетей. Благодаря технологии VLAN каждый проверяющий модуль работает с сервером так, будто других модулей в системе не существует: данные по выделенному каналу передаются напрямую и без задержек. Такой подход позволяет тестировать прошивки нескольких модемов одновременно.
Автоматизированное тестирование в реальности
От идеи внедрить ПАК до ее реализации и первых автотестов прошло около полугода. За это время собрали и настроили «железо», написали пару десятков скриптов.
Создание скрипта — дело столь же важное, как и разработка прошивки, и занимает много времени. Нужно продумать алгоритм, написать код, протестировать его, исправить ошибки и снова протестировать. Чтобы убедиться, что скрипт отрабатывает верно, с его помощью проверяют прошивку, которая ранее была признана исправной и передана пользователям. Если во время проверки модем ведет себя адекватно и выполняет все действия, прописанные в коде, значит сам скрипт ошибок не содержит и может отправиться в базу данных с тестами.
Зачастую проверить какую-то функцию модема вручную гораздо быстрее, чем создать для нее тест. И иногда возникают сомнения, а стоит ли овчинка выделки? В такие моменты следует помнить, какое огромное количество проверок выполняет ПАК и насколько скорость его работы превышает скорость работы человека. Скрипт «Передать данные с прибора учета на сервер» выполняется непрерывно около трех суток, но он проверяет функцию при всех комбинациях настроек модема. Ни один человек, как бы он ни был хорош в тестировании, не сможет выполнить такую задачу быстрее, чем за полмесяца. И это лишь в случае, если он откажется от перерывов и выходных.
Результаты и перспективы
С внедрением автотестов время на проверку прошивки модема сократилось до 2–3 недель. За этот период выполняется порядка 4–5 тысяч пользовательских сценариев.
С помощью ПАК в сумме проверяется около 75% функций модемов, и эта цифра планомерно растет. Функции, для которых еще не написаны скрипты, тестируются вручную.
Дополнительно вручную проверяется самая востребованная функциональность устройства: обмен данными с реальными приборами учета, настройка через компьютерную программу и Bluetooth-приложение ATM Control SE, взаимодействие с сервером iRZ Collector и т. п. Это нужно для того, чтобы охватить как можно больше пользовательских сценариев, даже не самых очевидных. Скрипт лишен фантазии, он каждый раз выполняет один и тот же алгоритм. Тестировщики же порой создают такие хитросплетенные схемы, благодаря которым им удается обнаружить специфические или редко воспроизводимые ошибки.
Также тестировщики работают с устройствами по уникальным сценариям клиентов. Например, одна из компаний-заказчиков использует модемы iRZ для управления светодиодной подсветкой территории. Это нестандартное применение модемов, в таком случае автоматизировать тестирование нецелесообразно: требуемые функции в полном объеме проверяются сотрудниками за несколько часов.
Таким образом, в «iRZ Электроника» не отказались от ручного тестирования в угоду автоматизированному, а применяют оба способа проверки одновременно, чтобы обеспечить высокое качество поставляемых решений.
Работа над автоматизацией тестирования не остановилась: ПАК развивается вместе с продукцией компании. В планах на ближайшее будущее — написать скрипты для стандартных функций модемов, которые еще проверяются вручную, а также доработать веб-интерфейс и внедрить систему уведомлений.
Заключение
Качественное встроенное ПО — залог надежной работы устройств. Чтобы обеспечить высокое качество, компания «iRZ Электроника» проверяет прошивки для модемов одновременно двумя способами: вручную силами тестировщиков и автоматизированно с помощью ПАК. ПАК воспроизводит функции модема с учетом разных сочетаний его настроек и обеспечивает широту и глубину проверки. Вручную тестировщики выполняют нетипичные сценарии и находят хитрые и неочевидные ошибки. Благодаря такому подходу шансы выпустить некачественный продукт сводятся к нулю, и мы становимся на шаг ближе к идеальному миру. Миру, в котором все, что создано руками людей, работает стабильно и предсказуемо.