Автоматизация тестирования со встроенными аппаратными средствами

Вот еще один способ с перечислением:

>>> a = [10,12,15,18,2,17,12,10,8,11]
>>> con = False
>>> for i, j in enumerate(a):
...     if j < 10:
...         con = True
...     if not con:
...         print(str(i) + ' ' + str(j))
...     else:
...         print(str(i))
... 
0 10
1 12
2 15
3 18
4
5
6
7
8
9

Одна вещь, которая неясна, хотя ... вы все еще печатали 2, которое было первым значением, которое будет меньше 10. Вы действительно хотите, чтобы это значение было напечатано?

23
задан John 22 September 2008 в 14:46
поделиться

8 ответов

Уверенный. В автомобильной промышленности мы используем сделанные на заказ тестеры за 100 000$ для каждого нового продукта, чтобы проверить, что аппаратное и программное обеспечение работает правильно.

разработчики, однако, также создают более дешевое (sub 1 000$) тестер, который включает набор ввода-вывода USB, A/D, PWM в/, и т.д. и или используют сценарии на рабочей станции, или цель создала тестовое программное обеспечение HIL/SIL, такое как MxVDev.

Аппаратные средства в Цикле (HIL) тестирование, вероятно, что Вы имеете в виду, и это просто включает некоторый аппаратный ввод-вывод USB, подключенный к вводу-выводу Вашего устройства с программным обеспечением на компьютерных тестах запускающего против него.

, Стоит ли это того, зависит.

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

В потребительской промышленности, с не сложные проекты это обычно не стоит того.

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

тестирование тогда показывает сразу, когда проблема ввела сборку.

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

Мы также выполняем набор тестов 'черного квадрата', где диагностический путь проигнорирован, и только ввод-вывод стимулируется/читается.

Для намного более дешевой установки, можно получить платы микроконтроллера за 100$ с USB и/или Ethernet (такие как семья Atmel UC3), который можно подключить к устройству и выполнить основное тестирование.

для обслуживания продукта - особенно полезно, когда проект сделан, сохраните несколько рабочих плат, тестер и полный набор программного обеспечения на CD. Когда необходимо сделать модификацию или отладить проблему, легко задержать все это и работа над ним с некоторым знанием (после тестирования), что главная функциональность не была затронута изменениями.

-Adam

21
ответ дан 29 November 2019 в 01:16
поделиться

Да. Я имел успех, но это не stragiht-вперед проблема решить. Вкратце вот то, что сделала моя команда:

  1. Определенный множество модульных тестов с помощью сделанной в домашних условиях платформы поблочного тестирования C. В основном просто много макросов, большую часть которого назвали TEST_EQUAL, TEST_BITSET, TEST_BITVLR, и т.д.

  2. , Записало генератор загрузочного кода, который взял эти скомпилированные тесты и организовал их в среду выполнения. Это - просто маленький драйвер, который выполняет нашу нормальную стандартную программу запуска - но вместо того, чтобы войти в контур управления, это выполняет набор тестов. Когда сделано, это хранит последний комплект для выполнения во флэш-памяти, тогда это сбрасывает ЦП. Это тогда выполнит тогда следующий комплект. Это должно обеспечить, изоляция упаковывают комплект, умирает. (Однако можно хотеть отключить это, чтобы удостовериться, что модули сотрудничают. Но это - интеграционный тест, не модульный тест.)

  3. Отдельные тесты зарегистрировали бы свой вывод с помощью последовательного порта. Это было хорошо для нашего дизайна, потому что последовательный порт был свободен. Необходимо будет найти способ сохранить результаты, если весь IO используется.

Это работало! И было замечательно иметь. Используя наш пользовательский регистратор данных, Вы могли нажать кнопку "Test" и пару несколько минут спустя, у Вас будут все результаты. Я настоятельно рекомендую его.

Обновленный , чтобы разъяснить, как тест-драйвер работает.

15
ответ дан 29 November 2019 в 01:16
поделиться

Да.

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

Одна вещь рассмотреть, тем не менее, точно , чем случается так, что Вы пытаетесь проверить.

заманчиво предположить, что для проверки взаимодействия аппаратных средств и встроенного микропрограммного обеспечения тогда у Вас нет действительно опции, кроме как непосредственно применять внешний стимул (т.е. применение DACs ко всем Вашим исходным данным ADC, и т.д.). В этих случаях, тем не менее, угловые случаи, которые Вы действительно хотите протестировать, часто будут подвергающимися проблемам синхронизации (например, прибытие прерываний при выполнении функционального нечто ()), которые будут невероятно трудными протестировать значимым способом - и еще тяжелее получить значимые результаты. (т.е. первые 100K разы мы запустили этот тест, он был прекрасен. В прошлый раз, когда мы выполнили его, это перестало работать. Почему?!?)

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

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

Тестирование каналов связи Вашего устройства будет относительно простым и не должно требовать специальных сборок кода.

7
ответ дан 29 November 2019 в 01:16
поделиться

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

, Определенные стратегии тестирования зависят от аппаратных средств, которые Вы хотите протестировать. Например, ADCs может быть протестирован путем представления известной формы сигнала и преобразования ряда образцов, затем проверки на надлежащий диапазон, частоту, среднее значение, и т.д.

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

4
ответ дан 29 November 2019 в 01:16
поделиться

Да, я делаю это, хотя я всегда имел последовательный порт в наличии для тестового ввода-вывода.

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

, по моему скромному мнению, это не лучше, чем никакое поблочное тестирование вообще. И конечно необходимо делать полную интеграцию / тестирование системы, также.

2
ответ дан 29 November 2019 в 01:16
поделиться

Встроенные проекты поблочного тестирования вполне diffucult, поскольку это обычно требует внешнего стимула и внешнего measurment.

Мы были успешны в разработке внешнего последовательного протокола (или rs232 или udp или сообщения tcpip) с основными командами для того, чтобы осуществить hw с отладкой, входящей в систему низкоуровневые драйверы, ища ошибочные условия или даже немного ненормальные условия (espcially для предельной проверки)

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

1
ответ дан 29 November 2019 в 01:16
поделиться

Если Ваша цель производит тест (гарантирующий, что модули правильно собраны, нет непреднамеренный закорачивать/открываться/и т.д.), необходимо сфокусироваться сначала на тестировании кабелей и коннекторов, сопровождаемых снабженными сокетом и спаянными соединениями, то сам PCB. Эти объекты могут все быть протестированы на короткие замыкания & открывается путем нахождения схем доступа, которые управляют каждой отдельной строкой высоко, в то время как ее соседи низко и наоборот, тогда читают назад значения строк.

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

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

1
ответ дан 29 November 2019 в 01:16
поделиться

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

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

Некоторые моменты, которые следует учитывать:

  • Какое наказание за ошибку встроенного ПО? Насколько проще обновить прошивку в полевых условиях.
  • Какое покрытие обеспечивает мой тест? Это простая проверка работоспособности? Достаточно ли он настраиваемый, чтобы тестировать множество различных сценариев?
  • Если тест не прошел, как вы воспроизведете это значение, чтобы отладить его? Вы зарегистрировали все настройки устройства и тестов, чтобы исключить как можно больше переменных? Конфигурация устройства, версия прошивки, версия тестового ПО, все внешние входы, все наблюдаемое поведение?
  • Против чего вы тестируете? Достаточно ли ясна спецификация ожидаемого поведения устройства, которое вы тестируете, или вы проверяете то, что, по вашему мнению, должен делать код?
6
ответ дан 29 November 2019 в 01:16
поделиться