Каковы основные различия между TDD и BDD? [закрыто]

За последние несколько лет разработка в среде тестирования. Недавно я слышал ворчание в сообществе ALT.NET о BDD. Что это? Чем он отличается от TDD?

5.08.2008 15:58:08
Смотрите также, programmers.stackexchange.com/q/135218/76176 . Этот вопрос больше по теме там.
Evan Carroll 2.12.2013 05:18:42
TDD для микротестов. BDD для требований или макро-тестов. Послушайте эпизоды с 1 по 8 о тестовой пирамиде, и она объяснит эти уровни: agilenoir.biz/series/agile-oughtts
Lance Kind 4.04.2019 05:42:32
14 ОТВЕТОВ
РЕШЕНИЕ

Я понимаю, что BDD больше относится к спецификации, чем к тестированию . Он связан с доменным дизайном (вам не нравятся эти * DD аббревиатуры?).

Это связано с определенным способом написания пользовательских историй, включая высокоуровневые тесты. Пример Тома Тен Тиджа :

Story: User logging in
  As a user
  I want to login with my details
  So that I can get access to the site

Scenario: User uses wrong password

  Given a username 'jdoe'
  And a password 'letmein'

  When the user logs in with username and password

  Then the login form should be shown again

(В своей статье Том продолжает непосредственно выполнять эту спецификацию теста в Ruby.)

Папа БДД - Дэн Норт . Вы найдете отличное введение в его статье « Введение в BDD» .

Вы найдете сравнение BDD и TDD в этом видео . Также мнение о BDD как «TDD сделано правильно» Джереми Д. Миллер

25 марта 2013 г. обновление

Видео выше отсутствовало какое-то время. Вот недавний Llewellyn Falco, BDD против TDD (объяснил) . Я нахожу его объяснение ясным и точным.

104
7.08.2015 13:04:47
Ссылка на видео, кажется, испортилась
James Nail 19.05.2011 16:01:28
Кристиан, как называлось видео и имя спикера? так что мы можем отследить
smci 15.11.2012 06:46:00
Ссылка выше "Tom Ten Thij" к настоящему времени не работает ... вот здесь, в прямом эфире @ - tomtenthij.nl/2008/1/25/…
Kundan Pandit 19.01.2015 06:41:54
Вот короткая игра, которая учит основным моментам BDD: agilenoir.biz/en/am-i-behavioral-or-not
Lance Kind 5.04.2019 03:09:50

Поведение, ориентированное на развитие, похоже, больше фокусируется на взаимодействии и общении между разработчиками, а также между разработчиками и тестировщиками.

Статья в Википедии имеет объяснение:

Поведенческое развитие

Хотя сам не практикую BDD.

2
27.01.2013 12:29:27

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

2
5.08.2008 16:11:02

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

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

6
27.08.2008 20:59:59

Для меня основная разница между BDD и TDD - это фокус и формулировка. И слова важны для сообщения ваших намерений.

TDD направляет внимание на тестирование. И поскольку в «старом мире водопадов» тесты приходят после реализации, такое мышление ведет к неправильному пониманию и поведению.

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

16
8.09.2008 18:36:06
TDD не имеет ничего общего с жизненным циклом разработки программного обеспечения «водопад». Во всяком случае, TDD не зависит от SDLC. Целью TDD является написание минимального количества кода, необходимого для прохождения теста. В каком-то смысле тест становится технической спецификацией кода, которого необходимо придерживаться.
Gavin Baumanis 14.03.2016 07:57:39
TDD - «Сначала тестируй» и вполне может работать с Agile. Это не точно.
Terrance 29.08.2017 20:08:44

Кажется, есть два типа BDD.

Первый - это оригинальный стиль, который обсуждает Дэн Норт и который послужил причиной создания стилей фреймворков xBehave. Для меня этот стиль в первую очередь применим для приемочных испытаний или спецификаций для доменных объектов.

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

Существует также группа BDD, которая может оказаться полезной:

http://groups.google.com/group/behaviordrivendevelopment/

13
10.09.2008 16:00:43

Благодаря моим последним знаниям в BDD по сравнению с TDD, BDD фокусируется на определении того, что произойдет дальше, тогда как TDD фокусируется на настройке набора условий и последующем рассмотрении результатов.

2
21.05.2012 18:26:45

BDD в значительной степени TDD сделано правильно. Однако есть дополнительная ценность, которую предлагает BDD. Вот ссылка на это:

BDD - это больше, чем «TDD сделано правильно»

1
27.01.2013 12:29:01

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

1
7.10.2014 08:52:06

Рассмотрим основное преимущество TDD - дизайн. Он должен называться Test Driven Design. BDD является подмножеством TDD, назовите его «Поведенческий дизайн».

Теперь рассмотрим популярную реализацию TDD - Unit Testing. Единицы в модульном тестировании, как правило, представляют собой один бит логики, который является наименьшей единицей работы, которую вы можете выполнить.

Когда вы объединяете эти блоки функциональным образом, чтобы описать желаемое поведение для машин, вам необходимо понимать поведение, которое вы описываете для машины. Behavior Driven Design фокусируется на проверке понимания разработчиками сценариев использования / требований / чего бы то ни было и проверяет реализацию каждой функции. BDD и TDD в целом служат важной цели информирования проекта и второй цели проверки правильности реализации, особенно когда она изменяется. Правильно выполненный BDD включает в себя biz и dev (и qa), в то время как модульное тестирование (возможно, неправильно рассматриваемое как TDD, а не как один тип TDD) обычно выполняется в хранилище dev.

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

2
28.05.2015 22:36:21

Вот быстрый снимок:

  • TDD - это просто процесс тестирования кода перед его написанием!

  • DDD - это процесс информирования о Домене перед каждым циклом касания кода!

  • BDD - это реализация TDD, которая включает некоторые аспекты DDD!

1
24.08.2019 15:05:11

Разработка через тестирование - это методология разработки программного обеспечения, основанная на тестировании. Это означает, что она требует написания тестового кода перед написанием реального кода, который будет тестироваться. По словам Кента Бека:

Стиль здесь - написать несколько строк кода, затем запустить тест или, что еще лучше, написать тест, который не будет выполняться, а затем написать код, который заставит его работать.

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

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

Поведенческая разработка - это методология, которая была создана на основе TDD, но превратилась в процесс, который касается не только программистов и тестировщиков, но вместо этого касается всей команды и всех важных заинтересованных сторон, технических и нетехнических. BDD начал с нескольких простых вопросов, на которые TDD не дает хорошего ответа: сколько тестов я должен написать? Что я должен на самом деле проверить - а что я не должен? Какие из тестов, которые я напишу, на самом деле будут важны для бизнеса или для общего качества продукта, а какие - только для меня?

Как видите, такие вопросы требуют сотрудничества между технологиями и бизнесом. Заинтересованные стороны бизнеса и эксперты в области часто могут сказать инженерам, какие тесты кажутся полезными, но только если они представляют собой высокоуровневые тесты, которые касаются важных бизнес-аспектов. BDD называет такие бизнес-тесты «примерами», например, «расскажите мне пример того, как эта функция должна вести себя правильно», и резервирует слово «тест» для низкоуровневых технических проверок, таких как проверка данных или интеграция API тестирования. Важным моментом является то, что хотя тесты могут создавать только программисты и тестировщики, примеры могут собираться и анализироваться всей группой доставки - дизайнерами, аналитиками и так далее.

В предложении одно из лучших определений BDD, которое я нашел до сих пор, заключается в том, что BDD - это «общение с экспертами в предметной области и использование примеров для совместного понимания желаемого поведения и обнаружения неизвестных». Часть открытия очень важна. По мере того, как группа доставки собирает все больше примеров, они начинают все больше понимать бизнес-область и тем самым уменьшают свою неуверенность в отношении некоторых аспектов продукта, с которым им приходится иметь дело. По мере того как неопределенность уменьшается, креативность и самостоятельность команды доставки возрастают. Например, теперь они могут начать предлагать свои собственные примеры, которые бизнес-пользователи считали невозможными из-за недостатка технических знаний.

Теперь беседы с экспертами по бизнесу и предметной области звучат великолепно, но мы все знаем, как это часто получается на практике. Я начал свое путешествие с технологий как программист. Как программисты, нас учат писать код - алгоритмы, шаблоны проектирования, абстракции. Или, если вы дизайнер, вас учат дизайну- организовать информацию и создавать красивые интерфейсы. Но когда мы получаем работу начального уровня, наши работодатели ожидают, что мы «обеспечим ценность для клиентов». И среди таких клиентов может быть, например ... банк. Но я почти ничего не знал о банковском деле - кроме как эффективно уменьшить остаток на моем счете. Поэтому я должен был бы каким-то образом перевести то, что от меня ожидается, в код ... Я должен был бы построить мост между банковским делом и моим техническим опытом, если я хочу предоставить какую-либо ценность. BDD помогает мне построить такой мост на устойчивой основе плавной связи между командой доставки и экспертами в области.

Выучить больше

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

Если вы заинтересованы в покупке «Написание отличных спецификаций», вы можете сэкономить 39% с промо-кодом 39nicieja2 :)

7
12.02.2017 16:43:55

Разница между тестовой разработкой (TDD) и поведенческой разработкой (BDD)

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

  • BDD дает более четкое представление о том, что система должна делать
    с точки зрения разработчика и заказчика. TDD только
    дает разработчику понимание того, что должна делать система.

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

1
9.06.2017 23:49:30

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

1
24.08.2019 14:53:09