Что такое BDD (Behavior-Driven Development)?

«Что такое BDD (Behavior-Driven Development)?» — вопрос из категории Тестирование, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

BDD (Behavior-Driven Development, Разработка через поведение) — это методология разработки программного обеспечения, являющаяся надстройкой над TDD (Test-Driven Development). Её фокус смещен с написания "тестов" на формальное описание поведения и функциональности системы с точки зрения бизнес-ценности на понятном для всех участников (разработчиков, тестировщиков, аналитиков) языке.

Ключевые концепции и инструменты:

  1. Структура сценариев: Поведение описывается в виде сценариев (scenarios) на языке Gherkin с использованием ключевых слов:

    • Given (Дано) — начальный контекст.
    • When (Когда) — событие или действие.
    • "Then" (Тогда) — ожидаемый результат.
  2. Пример сценария (Feature-файл):

    Feature: Перевод денег
      Пользователь должен иметь возможность переводить деньги со своего счета.
    
      Scenario: Успешный перевод при достаточном балансе
        Given на счете отправителя "123" есть 1000 рублей
        And на счете получателя "456" есть 500 рублей
        When пользователь переводит 200 рублей со счета "123" на счет "456"
        Then на счете отправителя "123" должно остаться 800 рублей
        And на счете получателя "456" должно стать 700 рублей
  3. Связь с кодом (Step Definitions): Каждая строка сценария (Given, When, Then) связывается с методом на языке программирования (Java, Python и т.д.).

    // Java + Cucumber пример шага
    @Given("на счете отправителя {string} есть {int} рублей")
    public void setupAccount(String accountId, int balance) {
        accountService.setBalance(accountId, balance);
    }

Популярные инструменты для Java:

  • Cucumber JVM — самый распространенный фреймворк для BDD.
  • JBehave — альтернативный фреймворк.
  • Spock (для Groovy) — комбинирует BDD-стиль описания с мощными возможностями тестирования.

Преимущества BDD:

  • Единый язык: Устраняет разрыв между техническими и бизнес-требованиями.
  • Живая документация: Сценарии служат всегда актуальной спецификацией системы.
  • Фокус на ценность: Заставляет команду думать о том, что должна делать система, а не как.