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

 
 
> Как тестировать код для встраиваемых систем
Муравей
сообщение Dec 27 2011, 18:50
Сообщение #1


Участник
*

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



Здравствуйте.
Уже достаточно давно пишу код для всяких контроллеров, но задачи были малой и средней сложности. Хватало функционального тестирования, написал программку, протестировал на весь описанный в ТЗ функционал, прошёлся по всему пользовательскому интерфейсу и Ок. Т.е. программные модули по серьёзному, раздельно, не тестировал, только прошивку целиком прямо на конечной платформе.
Как-то взяло сомнение, что это правильный подход , особенно если сложность задач возрастёт и если в проекте будет больше одного программиста :)
Посмотрел на книгу Мартин Р. - Чистый код. Создание, анализ и рефакторинг (Библиотека программиста) - 2010. Целая теория правильного программирования. Но применима ли эта теория для embedded кода?
В общем посоветуйте плз. какую-то литературку на эту тему, может быть какие-то жизненные советы как повысить качество кода, как гарантировать , что программный модуль будет нормально стыковаться с другими модулями и в случае необходимости портироваться на другие системы, и т.д......
Заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
cg_shura
сообщение Dec 4 2013, 17:47
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 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);
}


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

Сообщение отредактировал cg_shura - Dec 4 2013, 17:48
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 5 2013, 06:11
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 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);
    ...
}


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
vanner
сообщение Dec 6 2013, 14:08
Сообщение #4


Участник
*

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



Цитата(demiurg_spb @ Dec 5 2013, 10:11) *
Так уж сложилось, что не привык писать юнит-тесты...
Зато считаю, что современные компиляторы имеют хорошие встроенные механизмы для статического (и синтаксического) тестирования.


Не путайте теплое с мягким, юнит-тесты используются для проверки логики. Статический анализ для выявления некоторых багов, и обычно статический анализ все таки сложнее, чем проверка компилятором правильности только синтаксиса кода. Да, в llvm, вроде, есть какие-то средства статического анализа.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Dec 7 2013, 22:07
Сообщение #5


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(vanner @ Dec 6 2013, 18:08) *
.. юнит-тесты используются для проверки логики...


это Вы немного путаете тёплое и солёное. sm.gif
в том виде котором юзают юнит тесты они проверяют только изменение кода со временем. И больше ничего.
Хотя я могу ошибаться, посему опишите процедуру создания юнит тестов вам известных sm.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Муравей   Как тестировать код для встраиваемых систем   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


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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 00:14
Рейтинг@Mail.ru


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