Последние 20 лет я работаю в области программирования встроенных систем. Если задуматься, встроенные системы подобны воздуху – они повсюду вокруг нас, хотя мы их не замечаем. И хотя они составляют основу программного и аппаратного обеспечения, большинство пользователей понятия не имеет, насколько они важны. О встроенных системах вспоминают лишь тогда, когда они перестают правильно функционировать. Представьте, что ваш любимый фитнес-браслет потерял связь со смартфоном. Паника! А что если перестает работать монитор пациента, или инфузионная система, или система диализа в больнице? Уверен, вы не хотели бы оказаться в самолете со сломанной приборной панелью и уж точно не сели бы в неисправный беспилотный автомобиль.
Сегодня многие производители, вдохновленные идеей «автоматизации всего», отказываются от механики в пользу электронных устройств. В результате сложность решений значительно возрастает, а значит, требуется гораздо больше тестов перед выпуском конечных продуктов на рынок.
Говоря о тестировании встроенного ПО, нельзя не упомянуть, что тестирование – это всего лишь инструмент более широкого процесса верификации и валидации. Если мы хотим поставить на рынок надежное и безопасное решение, мы должны принять во внимание не только сами дефекты, но и полный спектр требований к продукту. А их может быть великое множество – от требований к «железу», энергопотреблению и времени отклика до стабильности и надежности программных компонентов. В итоге нам нужно охватить все эти требования, и вы удивитесь тому, сколько незначительных дефектов мы порой тестируем и исправляем (или не исправляем, если владелец продукта решает не тратить на это время и силы).
В недавние месяцы в блоге Ауриги появилось множество статей о тестировании встроенного ПО: последние тренды, «подводные камни», новые эффективные подходы и прочее. Несмотря на то, что технологии развиваются очень быстро, автоматизация тестирования встроенного ПО все еще отстает. Конечно, на то есть многочисленные объективные причины, и Аурига знает об этом не понаслышке. Разработать набор инструментов и тестов для аппаратного обеспечения, которого нет даже в альфа-версии? Пожалуйста! Протестировать «железо», находящееся в инженерном центре заказчика на другом конце света? Без проблем! Выявить и исправить дефекты операционных систем HAL/BSP/LSP, их драйверов и самого ядра, поддерживая при этом всю экосистему с многочисленными версиями, обновлениями, новыми функциями и периферийными устройствами? Мы делаем это с середины 90-х годов.
И каждый раз мы ищем возможность автоматизировать процесс. Ручное тестирование требует времени и ресурсов, а в некоторых случаях оно практически невозможно из-за скорости работы встроенных компонентов и устройств. Месячные ставки ручных тестировщиков вроде бы не растут, но такие проекты по-прежнему обходятся дорого. Автоматизировать тестирование довольно затратно и сложно, особенно учитывая недостаток на рынке средств автоматизации тестирования встроенного и системного ПО. Однако это не значит, что ничего нельзя сделать. Опытному профессиональному провайдеру, который знает специфику бизнеса и отрасли, не составит труда разработать несколько наборов тестов, соответствующих вашим требованиям и уникальным особенностям продукта. Однажды наша команда создала целого робота для тестирования сложного медицинского оборудования отделения реанимации и интенсивной терапии. Робот физически имитировал поведение пользователя устройства, поэтому никаких дополнительных симуляций или модификаций не потребовалось, а продолжительность тестового прогона сократилась с трех недель до нескольких часов.
Не стоит забывать, что мы вошли в так называемую эру Интернета вещей, искусственного интеллекта, виртуальной реальности, машинного обучения – все вы слышали эти модные слова. Я рассматриваю искусственный интеллект как новый рубеж в тестировании встроенного ПО, но не в плане написания или выполнения тестов. Нет, я не настолько оптимистичен. И все же искусственный интеллект представляется мне потенциально очень мощным инструментом, действующим как всеобъемлющая экспертная система. Используя входные данные о встроенной системе и аппаратных компонентах, он мог бы предупредить тестировщиков о наличии «узких мест» и несоответствий и даже предложить наиболее подходящий набор тестов для обеспечения полного покрытия требований к продукту.
А пока мы ждем появления такой «умной» системы, жизнь продолжается, и единственным рабочим решением для автоматизации тестирования встроенного ПО остается поиск подходящего поставщика для вашего проекта. Как его найти? На этот вопрос я постараюсь ответить в моей следующей статье.