|
Как тестировать код для встраиваемых систем |
|
|
|
Dec 27 2011, 18:50
|

Участник

Группа: Участник
Сообщений: 52
Регистрация: 30-11-11
Пользователь №: 68 593

|
Здравствуйте. Уже достаточно давно пишу код для всяких контроллеров, но задачи были малой и средней сложности. Хватало функционального тестирования, написал программку, протестировал на весь описанный в ТЗ функционал, прошёлся по всему пользовательскому интерфейсу и Ок. Т.е. программные модули по серьёзному, раздельно, не тестировал, только прошивку целиком прямо на конечной платформе. Как-то взяло сомнение, что это правильный подход , особенно если сложность задач возрастёт и если в проекте будет больше одного программиста :) Посмотрел на книгу Мартин Р. - Чистый код. Создание, анализ и рефакторинг (Библиотека программиста) - 2010. Целая теория правильного программирования. Но применима ли эта теория для embedded кода? В общем посоветуйте плз. какую-то литературку на эту тему, может быть какие-то жизненные советы как повысить качество кода, как гарантировать , что программный модуль будет нормально стыковаться с другими модулями и в случае необходимости портироваться на другие системы, и т.д...... Заранее спасибо.
|
|
|
|
|
 |
Ответов
|
Dec 4 2013, 17:47
|
Участник

Группа: Участник
Сообщений: 33
Регистрация: 28-04-10
Пользователь №: 56 958

|
Смотрите в сторону юнит-тестирования, я для юнит-тестов на си использую cutestПростейший юнит-тест с использовением cutest выглядит примерно так: Код void testStrToInt(CuTest* tc) { int value; CuAssertTrue(tc, strToInt("123", &value)); CuAssertIntEquals(tc, 123, value);
CuAssertTrue(tc, !strToInt("abc", &value)); CuAssertIntEquals(tc, 123, value);
CuAssertTrue(tc, strToInt(" 456 ", &value)); CuAssertIntEquals(tc, 456, value);
CuAssertTrue(tc, strToInt("-1024", &value)); CuAssertIntEquals(tc, -1024, value);
CuAssertTrue(tc, strToInt("+100000", &value)); CuAssertIntEquals(tc, 100000, value); } Автоматические тесты не заменяют функционального тестирования, но дают уверенность в работе отдельных частей кода, способствуют менее связанному дизайну кода, не дают сломаться системе при изменениях кода, берегут нервную систему
Сообщение отредактировал cg_shura - Dec 4 2013, 17:48
|
|
|
|
|
Dec 5 2013, 06:11
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Так уж сложилось, что не привык писать юнит-тесты... Зато считаю, что современные компиляторы имеют хорошие встроенные механизмы для статического (и синтаксического) тестирования. Достаточно почитать доку на компилятор и можно найти целый арсенал замечательных ключей (пример для gcc): Код CFLAGS += -pedantic CFLAGS += -Wformat CFLAGS += -Wall CFLAGS += -Wextra CFLAGS += -Werror CFLAGS += -Wstrict-prototypes CFLAGS += -Wno-unused-local-typedefs CFLAGS += -Wno-unused-function CFLAGS += -Wno-missing-field-initializers CFLAGS += -Wno-main CFLAGS += -Wdouble-promotion CFLAGS += -Winit-self CFLAGS += -Wsequence-point CFLAGS += -Wfloat-equal Отдельно хочу рассказать о ключике: Код CFLAGS += -Wc++-compat Помимо прочего он позволяет отлавливать ошибки такого рода: Код enum COLOR { RED = 0, GREEN, BLACK };
enum SPEED { STOP = 0, SLOW, FAST };
void set_speed(enum SPEED v);
int main(void) { set_speed(RED); ... }
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Dec 6 2013, 14:08
|
Участник

Группа: Участник
Сообщений: 48
Регистрация: 23-10-05
Пользователь №: 10 016

|
Цитата(demiurg_spb @ Dec 5 2013, 10:11)  Так уж сложилось, что не привык писать юнит-тесты... Зато считаю, что современные компиляторы имеют хорошие встроенные механизмы для статического (и синтаксического) тестирования. Не путайте теплое с мягким, юнит-тесты используются для проверки логики. Статический анализ для выявления некоторых багов, и обычно статический анализ все таки сложнее, чем проверка компилятором правильности только синтаксиса кода. Да, в llvm, вроде, есть какие-то средства статического анализа.
|
|
|
|
Сообщений в этой теме
Муравей Как тестировать код для встраиваемых систем Dec 27 2011, 18:50 AlexandrY Цитата(Муравей @ Dec 27 2011, 20:50) Посм... Dec 27 2011, 20:58 neiver По моему одна из лучших книг по тестированию встро... Dec 28 2011, 08:53 Idle Цитата(Муравей @ Dec 27 2011, 21:50) Здра... Dec 28 2011, 06:45 Danis Цитата(Муравей @ Dec 27 2011, 22:50) В об... Jan 15 2012, 08:20   demiurg_spb Цитата(vanner @ Dec 6 2013, 18:08) А я и ... Dec 7 2013, 11:29    vanner Цитата(demiurg_spb @ Dec 7 2013, 15:29) А... Dec 9 2013, 07:27     kolobok0 Цитата(vanner @ Dec 9 2013, 11:27) ..зада... Dec 9 2013, 22:35      vanner Цитата(kolobok0 @ Dec 10 2013, 02:35) ну ... Dec 10 2013, 06:05 andrewlekar Цитатану а теперь объясните тупому, как Вы предлаг... Dec 10 2013, 04:33 kolobok0 Цитата(andrewlekar @ Dec 10 2013, 08:33) ... Dec 11 2013, 18:11 andrewlekar ЦитатаЭто типа программист который реализует код и... Dec 11 2013, 19:07 kolobok0 Цитата(andrewlekar @ Dec 11 2013, 23:07) ... Dec 11 2013, 21:36  vanner Цитата(kolobok0 @ Dec 12 2013, 01:36) Объ... Dec 14 2013, 14:52   AlexandrY Цитата(vanner @ Dec 14 2013, 16:52) Да, а... Dec 14 2013, 20:13  Idle Цитата(kolobok0 @ Dec 12 2013, 01:36) кач... Dec 17 2013, 07:08   kolobok0 Цитата(Idle @ Dec 17 2013, 11:08) ...пров... Dec 17 2013, 22:35    Idle Цитата(kolobok0 @ Dec 18 2013, 02:35) бер... Dec 18 2013, 06:02     AlexandrY Цитата(Idle @ Dec 18 2013, 08:02) Вы про ... Dec 18 2013, 07:38      Idle Цитата(AlexandrY @ Dec 18 2013, 11:38) Эт... Dec 18 2013, 08:28      XVR Цитата(AlexandrY @ Dec 18 2013, 11:38) Эк... Dec 18 2013, 15:09 XVR Юнит тестирование применяется в больших иерархичес... Dec 16 2013, 09:38 AlexandrY Цитата(XVR @ Dec 16 2013, 11:38) Очень сл... Dec 16 2013, 10:01  XVR Цитата(AlexandrY @ Dec 16 2013, 14:01) И ... Dec 16 2013, 11:16   AlexandrY Цитата(XVR @ Dec 16 2013, 13:16) Если они... Dec 16 2013, 11:29    XVR Цитата(AlexandrY @ Dec 16 2013, 15:29) Ну... Dec 16 2013, 13:14     AlexandrY Цитата(XVR @ Dec 16 2013, 15:14) Угу. Вид... Dec 16 2013, 13:45  cg_shura Цитата(AlexandrY @ Dec 16 2013, 12:01) Ес... Dec 19 2013, 09:10   AlexandrY Цитата(cg_shura @ Dec 19 2013, 11:10) Это... Dec 19 2013, 09:50 ZASADA AlexandrY , спасибо за ссылку на тойоту, весьма по... Dec 18 2013, 08:56 Idle Вообще-то да, не пишите тесты, не. Чем меньше рыно... Dec 18 2013, 09:04 ZASADA главное не наличие товара, а чтобы покупатели наш... Dec 18 2013, 09:12 Idle Цитата(ZASADA @ Dec 18 2013, 13:12) главн... Dec 18 2013, 10:10 Idle Да, ни юнит-тестирование, ни TDD не гарантируют от... Dec 18 2013, 16:47
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|