C программирование и TDD

Разработка через тестирование ограничена OO? Или действительно ли возможно/полезно использовать его в сочетании с процедурным языком? Я должен запустить больший проект в C следующие несколько недель, и я думаю о путях как к разработке.

29
задан helpermethod 4 April 2010 в 10:25
поделиться

7 ответов

TDD - это дизайн и не привязан к какой-либо конкретной парадигме программирования.

Проще говоря, вы пишете тест для своего кода, прежде чем писать свой код.

См. эту колоду слайдов о TDD с C (Ката для игры в боулинг).

39
ответ дан 28 November 2019 в 01:08
поделиться

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

8
ответ дан 28 November 2019 в 01:08
поделиться

Я не думаю, что TDD вообще ограничен ОО.

Попробуйте фреймворки Unity и CMock.

пример из их вики:

void test_ShowSomeSillyExamples(void)
  {
    TEST_ASSERT_NOT_EQUAL(0, -1);
    TEST_ASSERT_EQUAL_INT(1, 1);
    TEST_ASSERT_EQUAL_HEX16(0x1234, 0x1234);
    TEST_ASSERT_EQUAL_STRING("These Are The Same", "These Are The Same");
    TEST_ASSERT_BITS(0x1111, 0x5555, 0x7175);
    TEST_ASSERT_INT_WITHIN(5, 100, 102);
  }

см .: http://sourceforge.net/apps/trac/embunity/wiki

Книга:

http://www.pragprog.com / title / jgade / test-driven-development-for-embedded-c

Группа Yahoo по этому поводу:

http://tech.groups.yahoo.com/group/AgileEmbedded/

Если вы сделал бы TDD на C, нужно ли вам писать тесты на C? Я бы, вероятно, написал производственный код на C, а тесты на C ++, используя gtest от Google.

6
ответ дан 28 November 2019 в 01:08
поделиться

Существуют среды модульного тестирования для c. Поиск в Google по запросу "c unit test" откроет некоторые из них. Я написал несколько проектов на C с помощью TDD, и определенно TDD не только для объектно-ориентированных языков. Даже если выполнить TDD на C. сложнее

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

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

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

5
ответ дан 28 November 2019 в 01:08
поделиться

TDD определяется Википедией следующим образом:

Разработка через тестирование (TDD) - это программное обеспечение метод разработки, который основан на повторении очень короткого цикла разработки: сначала разработчик пишет неудачный автоматический тестовый пример, который определяет желаемый {{1} }} улучшения или новой функции, затем создает код для прохождения этого теста и , наконец, реорганизует новый код в соответствии с приемлемыми стандартами.

Здесь нет ничего специфичного для ООП. Напротив, TDD вполне подходит для всех видов программирования. В частности, его определенно можно использовать вместе с процедурным языком, включая C.

3
ответ дан 28 November 2019 в 01:08
поделиться

TDD означает, что вы используете модульное тестирование перед написанием кода (сначала тестирование) и управляйте дизайном с этим, конечно, он подходит для C, но я представляю две проблемы, с которыми вы столкнетесь (я не пробовал)

  • Медленная компиляция, если это большой проект, TDD требует небольших шагов в разработке и запуске кода часто C / C ++ компилируется намного медленнее, чем C #, java и т. д., и, конечно, даже медленнее, чем динамические языки :).

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

Спасибо

1
ответ дан 28 November 2019 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: