2010-12-09 2 views
43

Я честно не вижу разницы между BDD и TDD. Я имею в виду, что оба являются просто испытаниями, если ожидаемое произойдет. Я видел тесты BDD, которые настолько сфокусированы, что они практически считаются TDD-тестами, и я видел тесты TDD, которые настолько расплывчаты, что у них черный ящик большого количества кода. Скажем так, я уверен, что оба лучше.TDD и BDD Различия

Вот и интересный вопрос. С чего начать? Я начинаю с тестов BDD на высоком уровне? Я начинаю с тестов TDD низкого уровня?

+0

См. Также [В чем основные отличия между TDD и BDD?] (Http://stackoverflow.com/q/2509/1468366) – MvG 2016-03-08 17:19:06

ответ

59

Я честно не вижу разницы между BDD и TDD.

Это потому, что их нет.

Я имею в виду, что оба являются просто испытаниями, если ожидается.

Это не так. BDD и TDD не имеют абсолютно никакого отношения к тестированию. Никто. Нада. Шиш. Zip. Никс. Ни в малейшей степени.

К сожалению, TDD имеет слово «тест» в значительной степени все (не только в его названии, но и в испытательных базах, модульное тестирование, TestCase (класса вы tpyically наследовать от), FooTest (класса, который обычно имеет место ваши тесты), testBar (типичный шаблон именования для тестового метода), плюс много терминологическая терминология, такая как «утверждение» и «проверка»), что заставляет некоторых людей поверить, что на самом деле это имеет отношение к тесты. Итак, некоторые умные люди сказали: «Эй, давайте просто изменим имя», чтобы удалить какой-либо потенциал для путаницы.

И вот что такое BDD.Это просто TDD с любой тест, связанные с терминологией заменены примерами-правового поведения, связанных с терминологией:

  • Тест → Пример
  • Assertion → Expectation
  • assertshould
  • Unit → Поведение
  • Верификация → Спецификация
  • & hellip; и т. д.

BDD - это просто TDD с разными словами. Если вы делаете TDD правильно, вы делаете BDD. Разница в том, что   – при условии, что вы верите, по крайней мере, в слабую форму гипотезы Сапира-Уорфа   – разные слова упрощают это делать правильно.

+2

Мне нравится ваша точка на Сапир-Уорф. – Ezku 2010-12-09 10:30:09

+9

BDD - TDD сделано правильно. TDD сделано правильно BDD. – bitbonk 2010-12-09 11:03:55

4

Из того, что я собрал в Википедии, BDD включает в себя прием и проверку качества, которые невозможно сделать без участия заинтересованных сторон/пользователей. Кроме того, BDD использует естественный язык для указания своего теста, в то время как TDD обычно использует язык программирования. Между ними может быть некоторое совпадение, но я думаю, что основное отличие - это не туманность, а язык BDD.

Что касается того, где вы должны начать, что действительно зависит от вашего процесса разработки, не так ли? Я предполагаю, что если вы делаете снизу вверх, что вы собираетесь сначала написать TDD, и как только вы достигнете более высокого уровня, вы будете использовать BDD для проверки того, работают ли эти функции как ожидалось.

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

27

BDD от клиентов с точки зрения и фокусируется на проверке поведения всей системы.

TDD от уточняет точку зрения и фокусируется на реализации одного устройства/класса/функции. Он выигрывает среди других благодаря лучшей архитектуре (дизайн для тестирования, отсутствие связи между модулями).

От техническая точка зрения (как написать «тест») они похожи.

Я бы (от проворной точки зрения) начал с одной bdd-userstory и реализовал ее с использованием TDD.

+1

Ну ... BDD фактически начался на уровне TDD. Вот вам: http://blog.dannorth.net/introducing-bdd/ - должен помочь. – Lunivore 2010-12-09 12:24:24

0

Терминология отличается, но в моей работе я использую TDD для детализации, главным образом для модульного теста, а BDD - более высокий уровень, для клиента, QA или не-технического человека.

2

BDD - это получение вашего TDD права. Он обеспечивает «структуру и дициклин» для вашего TDD. Это поможет вам проверить правильность и сделать правильный объем теста. Вот фантастический небольшой пост на BDD и TDD,

http://codingcraft.wordpress.com/2011/11/12/bdd-get-your-tdd-right/

0

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

3

Просто скопировать ответ от Matthew Flynn который я согласен больше, чем «TDD и BDD не имеют ничего общего с тестами»:

Поведение Driven Development является продолжением/пересмотр Test Driven Development. Его цель - помочь разработчикам системы (например, разработчикам) определить подходящие тесты для написания, т. Е. Тесты, которые отражают поведение, желаемое заинтересованными сторонами. Эффект заканчивается тем же самым - разработать тест, а затем разработать код/​​систему, которая проходит тест. Надежда в BDD заключается в том, что тесты действительно полезны, показывая, что система соответствует требованиям.

UPDATE

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

0

Я думаю, что самый большой вклад BDD над TDD или любыми другими подходами делает нетехнических людей (владельцев/клиентов) частью процесса разработки программного обеспечения на всех уровнях.

Написание исполняемых сценариев на естественных языках почти перекрыло разрыв между требованием и доставкой.

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

Это потрясающе! Клиент сидит прямо в центре и точно не просто спрашивает, чего он действительно хочет, но и проверяет и испытывает результаты.

Смежные вопросы