Behavior Driven Development
Behavior Driven Development, сокращённо BDD, объединяет бизнес-требования с автоматизированными тестами. Требования описываются на общем, понятном всем языке, который одинаково доступен разработчикам, тестировщикам и бизнес-аналитикам. BDD снижает количество недопониманий и создаёт единое видение желаемого поведения системы.
В двух словах
- BDD описывает поведение на естественном языке, используя схему Given-When-Then.
- Улучшает сотрудничество между бизнесом, разработкой и качеством.
- Инструменты типа Cucumber, SpecFlow и Behave преобразуют сценарии в исполняемые тесты.
- BDD не метод тестирования, а методология коммуникации и разработки.
Определение
BDD эволюционировал из TDD и сфокусирован на поведении ПО с точки зрения бизнеса. Вместо технического описания методов и их результатов примеры формулируются на языке пользователей. Эти примеры становятся тестами, которые одновременно служат спецификацией и живой документацией.
Схема Given-When-Then
Given
Описывает начальное состояние или условия, необходимые для сценария.
When
Описывает действие, которое выполняется.
Then
Описывает ожидаемый результат или реакцию системы.
Пример сценария
Сценарий: Клиент получает скидку при крупной покупке
Given в корзине товаров на сумму 200 евро
When клиент переходит к оформлению
Then общая сумма должна снизиться на 20 евро
Основные инструменты
- Cucumber: популярный BDD-фреймворк для Java, Ruby, JavaScript и множества других языков.
- SpecFlow: BDD-фреймворк для .NET.
- Behave: BDD-фреймворк для Python.
- Serenity BDD: расширение для Cucumber с фокусом на отчётность.
- Gauge: облегчённая BDD-альтернатива от ThoughtWorks.
Практический пример: Cucumber-feature для процесса заказа
Feature: Расчёт скидок
Scenario: Стандартная скидка от 100 евро
Given в корзине товаров на сумму 100 евро
When клиент начинает оформление заказа
Then применяется скидка 10 евро
And новая общая сумма составляет 90 евро
Scenario: Нет скидки при покупке менее 100 евро
Given в корзине товаров на сумму 50 евро
When клиент начинает оформление заказа
Then скидка не применяется
And общая сумма составляет 50 евро
Преимущества и недостатки
Преимущества
- Общий язык: бизнес и разработка обсуждают одни и те же примеры.
- Ясные требования: недопонимания выявляются до реализации.
- Живая документация: сценарии понятно описывают поведение системы.
- Фокус на ценность: тесты ориентированы на бизнес-результат, а не технические детали.
Недостатки
- Затраты времени: написание и поддержка сценариев требует ресурсов.
- Сложность: большие файлы features становятся трудно читаемыми.
- Зависимость от бизнеса: без регулярного участия эффект минимален.
- Технический долг: плохо поддерживаемые определения шагов создают проблемы обслуживания.
Ключевые моменты для подготовки
- Определение и цель BDD.
- Схема Given-When-Then.
- Разница между BDD и TDD.
- Роли бизнеса, разработки и тестирования.
- Стандартные инструменты: Cucumber, SpecFlow, Behave.
Типичные вопросы на экзамене (с кратким ответом)
-
Что такое BDD? Методология, которая описывает бизнес-поведение на естественном языке и использует эти описания как тесты.
-
Что означает Given-When-Then? Это описание условий сценария, действия и ожидаемого результата.
-
Назовите инструмент BDD. Cucumber, SpecFlow или Behave.
-
В чём основное отличие между BDD и TDD? BDD описывает поведение с бизнес-точки зрения, TDD сосредоточен на технических единицах.
-
Каково преимущество BDD? Бизнес и разработка имеют единое понимание требований.
Основные источники
- https://cucumber.io/docs/bdd/
- https://specflow.org/bdd/
- https://en.wikipedia.org/wiki/Behavior-driven_development
Часто задаваемые вопросы
Какова основная цель BDD?
BDD создаёт единое понимание поведения системы между бизнесом, разработкой и тестированием благодаря исполняемым примерам на естественном языке.
Что означает Given в сценарии?
Given описывает начальное состояние и условия, которые должны быть выполнены перед действием.
Можно ли использовать BDD без TDD?
BDD и TDD дополняют друг друга. BDD сосредоточен на бизнес-примерах, TDD на техническую разработку. Их можно использовать вместе.
Какую роль играет бизнес в BDD?
Бизнес формулирует и валидирует сценарии. Он гарантирует, что тесты отражают реальное поведение.
Что такое файл feature?
Файл feature содержит сценарии, написанные на Gherkin, которые описывают поведение функции с точки зрения пользователя.
Что такое Gherkin?
Gherkin это простой структурированный язык для BDD-сценариев. Он использует ключевые слова: Feature, Scenario, Given, When, Then, And и But.
Что такое Step Definitions?
Step Definitions связывают сценарии на естественном языке с исполняемым кодом, который выполняет реальные тестовые действия.
BDD подходит только для веб-приложений?
Нет. BDD применим к любому ПО, если его поведение можно описать примерами.
Что такое BDD anti-pattern?
Сценарии, которые слишком техничны или чрезмерно подробны и сосредоточены на реализации, а не на бизнес-поведении, это типичные anti-patterns.
Чем BDD отличается от классических документов с требованиями?
BDD-сценарии исполняемы и сразу используются как тесты. Статические документы быстро устаревают, а BDD служит живой документацией.
Что такое Specification by Example?
Specification by Example это похожий подход, в котором требования задаются конкретными примерами. BDD напрямую использует эту идею для исполняемых тестов.
Какие языки программирования поддерживает Cucumber?
Cucumber поддерживает Java, JavaScript, Ruby, Python, C# и Kotlin, среди прочих.
Сколько сценариев должно быть в файле feature?
Файл feature должен оставаться обозримым. Несколько связанных сценариев на feature имеют смысл, но при слишком большом количестве нужно разделить.
Что такое BDD-отчёт?
BDD-отчёт показывает, какие сценарии прошли успешно, какие не прошли. Он одновременно служит доказательством выполненных требований.
Стоит ли применять BDD в маленьких командах?
Да, малые команды тоже получают выгоду от более ясных требований и живой документации. Затраты должны соответствовать проекту.
Далее в пути обучения Software Testing
Следующая статья на пути обучения Software Testing посвящена автоматизации тестирования и качеству ПО — как автоматизация улучшает качество ПО.



