реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> TDD для микроконтроллеров, Как использовать модульное тестирование для железа
Serega Doc
сообщение Feb 16 2011, 10:13
Сообщение #1


Местный
***

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



Доброго всем дня.
Наткнулся на статьи Развитие в направлении разработки встроенных систем и Эффективная разработка встроенного ПО через тестирование про модульное тестирование для встроенных систем.
Хочу уточнить есть unit тесты и mock объекты для компиляторов под AVR/STM8?
Что бы свою программу на с++ можно было покрывать тестами. Вести разработку ПО максимально отделив логику от уровня железа.
И при этом не испытывать проблем или же минимизировать вопросы перехода с одной платформы на другую.
Как например есть программа для контроллера AVR и по каким либо причинам (дефицит, цена, характеристики) решили перейти на STM8.
Переписываем классы взаимодействия с аппаратурой контроллера и в минимальные сроки получаем работоспособную (не проваливающую тесты) программу.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Feb 16 2011, 10:29
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Ну так а что мешает?

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

Рядом с googletest болтается и библиотечка для mock-объектов, я ее правда не использовал.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Feb 16 2011, 10:57
Сообщение #3


Беспросветный оптимист
******

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



Тесты обязательно должны проводиться непосредственно в целевом железе.
Иначе смысла особого нет.

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

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

Осталось подумать, как реализовать.
Я лично вижу так:
1. Уровень сопряжения с железом тестируется с помощью осциллографа и других измерительных приборов.
2. На него сверху цепляется некая прослойка-монитор, которая может читать и писать в память, запускать функции и тд.
3. Через канал связи (например, UART) эта технологическая прослойка цепляется к GDB.

Далее, на ПК запускаем серию тестов и смотрим результаты.
Осталось всё красиво увязать.

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


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Feb 16 2011, 11:10
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(MrYuran @ Feb 16 2011, 13:57) *
Тесты обязательно должны проводиться непосредственно в целевом железе.
Иначе смысла особого нет.

Зависит от того, что пишите. Если например парсер какого-нить протокола, то без разницы где его тестить (если писать без хаков, конечно)
Go to the top of the page
 
+Quote Post
Serega Doc
сообщение Feb 16 2011, 11:13
Сообщение #5


Местный
***

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



Цитата(Непомнящий Евгений @ Feb 16 2011, 13:29) *
Ну так а что мешает?

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

Рядом с googletest болтается и библиотечка для mock-объектов, я ее правда не использовал.

А вы под какую платформу используете googletest? И как вы интегрировали эти тесты с компилятором для железа?
Что бы запускать их непосредственно из среды в которой пишем программу.

Если можно то по подробнее пожалуйста.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Feb 16 2011, 11:34
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(Serega Doc @ Feb 16 2011, 14:13) *
А вы под какую платформу используете googletest?

С и С++ - кроссплатформенные языки. Части программы, написанные без использования платформо-зависимых вещей можно запускать где угодно. В своем коде я выделил такие части и тестирую их на персоналке. Тесты гоняю под MinGW и Visual C++, сейчас думаю прикрутить еще один компилер.

Цитата
И как вы интегрировали эти тесты с компилятором для железа?

Никак. Большинство либ для тестов используют стандарную библиотеку с++ и под МК не скомпиляются. В принципе можно написать собственную библиотечку тестирования под МК, но смысла я особого не вижу. На компе тесты выполняются практически мгновенно, их удобно отлаживать и т.д.

Цитата
Что бы запускать их непосредственно из среды в которой пишем программу.

Я работаю в eclipse, для МК компиляю IAR-ом, вызывая его из scons-файла. Также в scons завернуты тесты, только там вызываются настольные компилеры. Результат падает в консоль.

Это что касалось unit-тестов.

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

Однако такие тесты сложнее прогнать - прогон занимает много времени, надо подключать реальное оборудование...
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 16 2011, 11:56
Сообщение #7


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(MrYuran @ Feb 16 2011, 14:57) *
Эта тема немного перекликается с другой - о направлении проектирования (сверху вниз, в обратную сторону или промежуточный вариант).

Встречное направление, ибо эти две сущности - первый шаг после ТЗ и уровень примитивов - остаются неизменными.
А вот насчет гонять данные через канал связи - частенько потолок бит-рейта мешает и тогда это плавно переходит в гемор. Приходится лезть в протеус
Go to the top of the page
 
+Quote Post
Serega Doc
сообщение Feb 22 2011, 15:47
Сообщение #8


Местный
***

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



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

Тестирование в не целевом окружении возможно лишь для задач не зависящих от железа как
Цитата
Если например парсер какого-нить протокола, то без разницы где его тестить (если писать без хаков, конечно)

Если же существует контроллер с обвеской: регистры, ключи, кнопки, LCD экраны и прочее. И тестирование нужно проводить с учетом нюансов электронной схемы.
Подскажите насколько правильна вот такая структура формирования тестов:

И тогда можно получать информацию о прохождении тестов либо в симуляторе (например Протеус) либо в реальной плате + терминал COM порта.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Feb 24 2011, 06:29
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(Serega Doc @ Feb 22 2011, 18:47) *
Тестирование в не целевом окружении возможно лишь для задач не зависящих от железа как
Если же существует контроллер с обвеской: регистры, ключи, кнопки, LCD экраны и прочее. И тестирование нужно проводить с учетом нюансов электронной схемы.


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

И еще вопрос - какие именно аспекты вы сможете потестить в железе? Например, сможете ли вы сэмулировать различные ошибки на TWI или UART, проблемы инициализации дисплея и т.д.

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

Исходя из этого, лично я остановился на:
1. модульных тестах, идущих на компе - запускаются из командной строки, отрабатывают очень быстро
2. автоматическом тестировании в железе готовой прошивки - занимает уже неск часов
3. ручном тестировании в железе готовой прошивки - занимает неск дней, делается отдельными людьми
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Feb 24 2011, 07:04
Сообщение #10


Беспросветный оптимист
******

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



Цитата(Непомнящий Евгений @ Feb 24 2011, 09:29) *
3. ручном тестировании в железе готовой прошивки - занимает неск дней, делается отдельными людьми

происходит в течение всего жизненного цикла изделия sm.gif


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Feb 24 2011, 07:14
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



>> происходит в течение всего жизненного цикла изделия sm.gif

эт уже четвертый тип - конечными пользователями sm.gif Они правда не всегда знают, что тестерами подрабатывают sm.gif
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Mar 7 2011, 15:44
Сообщение #12


Беспросветный оптимист
******

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



Освежу немного темку.
Буквально в пятницу наткнулся на статейку.
По-моему, интересно.
Пока разобраться времени не было, оставлю здесь якорь, чтобы не уплыло мимо...
Цитата
7. Заключение

UniTesK удобен для функционального тестирования встроенного ПО:

* формальные спецификации UniTesK удобны для формализации требований к встроенному программному обеспечению;
* тестовые сценарии позволяют компактно записывать сложные тестовые последовательности;
* механизм медиаторов предоставляет гибкие средства для отделения сценариев и формальной модели от реализации, позволяют строить различные схемы развёртывания тестового стенда


Вот ещё

и ещё sm.gif


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 7 2011, 20:44
Сообщение #13


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Какая-то телепатия... Не далее, как позавчера, завис на очередных довесках к прототредам. Все, что читаю сейчас- так или иначе охвачено в моих потугах. TinyOS, ессо, и близко нету sm.gif
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Mar 8 2011, 08:52
Сообщение #14


Беспросветный оптимист
******

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



Цитата(_Pasha @ Mar 7 2011, 23:44) *
Какая-то телепатия... Не далее, как позавчера, завис на очередных довесках к прототредам. Все, что читаю сейчас- так или иначе охвачено в моих потугах.

А я, кстати, с вашей подачи полез искать, после темы про SED и AWK - вот видимо, причина синхронизма sm.gif

Цитата(_Pasha @ Mar 7 2011, 23:44) *
TinyOS, ессо, и близко нету sm.gif

А я давно приглядываюсь, очень интересный подход.
В том числе и применительно к тестированию. И даже заточено под мои любимые MSP430 sm.gif


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 23:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01513 секунд с 7
ELECTRONIX ©2004-2016