Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Смотрите эту слайд-палубу о TDD с C (игра в боулинг-ката).

Ответ 2

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

Ответ 4

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

Попробуйте рамки 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/titles/jgade/test-driven-development-for-embedded-c

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

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

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

Ответ 5

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

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

Ответ 6

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

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

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

Ответ 7

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

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

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

Спасибо

Ответ 8

Существуют фреймы unit test для c. Googling для "c unit test" покажет некоторые. Я написал несколько проектов на C с TDD и определенно TDD не только для языков OO. Даже если сложнее делать TDD в C.