|
|
  |
TDD для микроконтроллеров, Как использовать модульное тестирование для железа |
|
|
|
Feb 16 2011, 10:13
|

Местный
  
Группа: Свой
Сообщений: 267
Регистрация: 11-11-04
Из: Одесса
Пользователь №: 1 103

|
Доброго всем дня. Наткнулся на статьи Развитие в направлении разработки встроенных систем и Эффективная разработка встроенного ПО через тестирование про модульное тестирование для встроенных систем. Хочу уточнить есть unit тесты и mock объекты для компиляторов под AVR/STM8? Что бы свою программу на с++ можно было покрывать тестами. Вести разработку ПО максимально отделив логику от уровня железа. И при этом не испытывать проблем или же минимизировать вопросы перехода с одной платформы на другую. Как например есть программа для контроллера AVR и по каким либо причинам (дефицит, цена, характеристики) решили перейти на STM8. Переписываем классы взаимодействия с аппаратурой контроллера и в минимальные сроки получаем работоспособную (не проваливающую тесты) программу.
|
|
|
|
|
Feb 16 2011, 10:57
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Тесты обязательно должны проводиться непосредственно в целевом железе. Иначе смысла особого нет.
Тоже задумывался. Дело даже не в переносе между платформами. Иногда бывает, что в спешке вносишь в прошивку на ходу потайные трудноуловимые глюки, которые могут всплыть спустя годы успешной эксплуатации, в результате маловероятного стечения случайных факторов. Тесты, во первых, позволяют выявить это ещё на лабораторном столе, а во-вторых, помогают быстро локализовать.
Эта тема немного перекликается с другой - о направлении проектирования (сверху вниз, в обратную сторону или промежуточный вариант). Ну и ещё - со стандартизацией кодирования.
Осталось подумать, как реализовать. Я лично вижу так: 1. Уровень сопряжения с железом тестируется с помощью осциллографа и других измерительных приборов. 2. На него сверху цепляется некая прослойка-монитор, которая может читать и писать в память, запускать функции и тд. 3. Через канал связи (например, UART) эта технологическая прослойка цепляется к GDB.
Далее, на ПК запускаем серию тестов и смотрим результаты. Осталось всё красиво увязать.
Для меня эта тема тоже очень актуальна, поскольку прошедший год был очень богат на разные чудеса. Которые спустя некоторое время находились в какой-нибудь нелепой закорючке.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Feb 16 2011, 11:13
|

Местный
  
Группа: Свой
Сообщений: 267
Регистрация: 11-11-04
Из: Одесса
Пользователь №: 1 103

|
Цитата(Непомнящий Евгений @ Feb 16 2011, 13:29)  Ну так а что мешает?
Слой, независимый от железа, можно гонять на настольном компе и покрывать любыми тестами. Я использую библиотечку googletest, есть и дофига других.
Рядом с googletest болтается и библиотечка для mock-объектов, я ее правда не использовал. А вы под какую платформу используете googletest? И как вы интегрировали эти тесты с компилятором для железа? Что бы запускать их непосредственно из среды в которой пишем программу. Если можно то по подробнее пожалуйста.
|
|
|
|
|
Feb 16 2011, 11:34
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(Serega Doc @ Feb 16 2011, 14:13)  А вы под какую платформу используете googletest? С и С++ - кроссплатформенные языки. Части программы, написанные без использования платформо-зависимых вещей можно запускать где угодно. В своем коде я выделил такие части и тестирую их на персоналке. Тесты гоняю под MinGW и Visual C++, сейчас думаю прикрутить еще один компилер. Цитата И как вы интегрировали эти тесты с компилятором для железа? Никак. Большинство либ для тестов используют стандарную библиотеку с++ и под МК не скомпиляются. В принципе можно написать собственную библиотечку тестирования под МК, но смысла я особого не вижу. На компе тесты выполняются практически мгновенно, их удобно отлаживать и т.д. Цитата Что бы запускать их непосредственно из среды в которой пишем программу. Я работаю в eclipse, для МК компиляю IAR-ом, вызывая его из scons-файла. Также в scons завернуты тесты, только там вызываются настольные компилеры. Результат падает в консоль. Это что касалось unit-тестов. Я также тестирую всю железку в целом, но для этого использую специальную прогу-тестер, которая эмулирует собой пользователя железки, управляя по протоколу. Прога получает набор тестов и прогоняет их. Протокол управления был несколько расширен, чтобы по нему можно было передавать "нажатия" кнопок, а также содержимое экрана железки. Однако такие тесты сложнее прогнать - прогон занимает много времени, надо подключать реальное оборудование...
|
|
|
|
|
Feb 22 2011, 15:47
|

Местный
  
Группа: Свой
Сообщений: 267
Регистрация: 11-11-04
Из: Одесса
Пользователь №: 1 103

|
Цитата о направлении проектирования (сверху вниз, в обратную сторону или промежуточный вариант) - поясните пожалуйста. Не понял что имеется в виду. Тестирование в не целевом окружении возможно лишь для задач не зависящих от железа как Цитата Если например парсер какого-нить протокола, то без разницы где его тестить (если писать без хаков, конечно) Если же существует контроллер с обвеской: регистры, ключи, кнопки, LCD экраны и прочее. И тестирование нужно проводить с учетом нюансов электронной схемы. Подскажите насколько правильна вот такая структура формирования тестов:  И тогда можно получать информацию о прохождении тестов либо в симуляторе (например Протеус) либо в реальной плате + терминал COM порта.
|
|
|
|
|
Feb 24 2011, 06:29
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(Serega Doc @ Feb 22 2011, 18:47)  Тестирование в не целевом окружении возможно лишь для задач не зависящих от железа как Если же существует контроллер с обвеской: регистры, ключи, кнопки, LCD экраны и прочее. И тестирование нужно проводить с учетом нюансов электронной схемы. Есть разные виды тестирования. Для модульных тестов целевое окружение не нужно, потому что тестится конкретная подсистема. Все остальные подсиситемы, с которыми она взаимодействует, заменяются заглушками. Например для парсера пакетов модбас совершенно безразличны нюансы электронной схемы... И еще вопрос - какие именно аспекты вы сможете потестить в железе? Например, сможете ли вы сэмулировать различные ошибки на TWI или UART, проблемы инициализации дисплея и т.д. Все равно ничто не отменит тестирования всего изделия целиком, в том виде, как оно будет поставляться клиенту. А та штука, которую нарисовали вы, достаточно геморройна в реализации... Исходя из этого, лично я остановился на: 1. модульных тестах, идущих на компе - запускаются из командной строки, отрабатывают очень быстро 2. автоматическом тестировании в железе готовой прошивки - занимает уже неск часов 3. ручном тестировании в железе готовой прошивки - занимает неск дней, делается отдельными людьми
|
|
|
|
|
Mar 7 2011, 15:44
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Освежу немного темку. Буквально в пятницу наткнулся на статейку. По-моему, интересно. Пока разобраться времени не было, оставлю здесь якорь, чтобы не уплыло мимо... Цитата 7. Заключение
UniTesK удобен для функционального тестирования встроенного ПО:
* формальные спецификации UniTesK удобны для формализации требований к встроенному программному обеспечению; * тестовые сценарии позволяют компактно записывать сложные тестовые последовательности; * механизм медиаторов предоставляет гибкие средства для отделения сценариев и формальной модели от реализации, позволяют строить различные схемы развёртывания тестового стенда Вот ещёи ещё
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Mar 8 2011, 08:52
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(_Pasha @ Mar 7 2011, 23:44)  Какая-то телепатия... Не далее, как позавчера, завис на очередных довесках к прототредам. Все, что читаю сейчас- так или иначе охвачено в моих потугах. А я, кстати, с вашей подачи полез искать, после темы про SED и AWK - вот видимо, причина синхронизма  Цитата(_Pasha @ Mar 7 2011, 23:44)  TinyOS, ессо, и близко нету  А я давно приглядываюсь, очень интересный подход. В том числе и применительно к тестированию. И даже заточено под мои любимые MSP430
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|