автор Малаховская Екатерина
Введение в BDD: что это такое и зачем оно нужно?
BDD (Behavior-Driven Development, рус. поведенческая разработка через тестирование) — это методология разработки программного обеспечения, которая делает акцент на поведение системы, формируя требования в формате легко понятных сценариев. Основная цель BDD — наладить коммуникацию между разработчиками, тестировщиками и бизнес-стейкхолдерами, чтобы все участники проекта одинаково понимали, как должна работать система.

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

BDD начинается с разработки пользовательских историй (user stories) — описаний того, как пользователи будут взаимодействовать с системой. Эти истории обычно представляются в виде сценариев, написанных на естественном языке (например, английском), который понятен всем участникам процесса.

Сценарии описывают ожидаемое поведение системы и пишутся в формате Gherkin — специального синтаксиса, который поддерживает большинство инструментов для BDD. Он позволяет структурировать сценарии следующим образом:
  • Given (Предусловие) — что дано в начале сценария.
  • When (Действие) — что происходит, если выполняется какое-то действие.
  • Then (Результат) — ожидаемый результат этого действия.
Сценарий: Успешная авторизация пользователя
  Дано: Пользователь находится на странице авторизации
  Когда: Пользователь вводит корректный логин и пароль
  Тогда: Пользователь попадает на главную страницу
Этот сценарий описывает ожидаемое поведение системы при попытке входа, которое становится ориентиром для разработки и тестирования.

Основные элементы BDD

Feature-файлы: текстовые файлы, где хранятся сценарии на Gherkin. Каждый такой файл описывает отдельную функциональную часть системы, например, авторизацию, регистрацию или оформление заказа.
Feature: Авторизация

  Как пользователь
  Я хочу авторизоваться в системе
  Чтобы получить доступ к своему аккаунту

  Сценарий: Успешная авторизация с корректными учетными данными
    Дано: Пользователь находится на странице авторизации
    Когда: Пользователь вводит корректный логин и пароль
    Тогда: Пользователь попадает на главную страницу

  Сценарий: Ошибка авторизации с некорректным паролем
    Дано: Пользователь находится на странице авторизации
    Когда: Пользователь вводит корректный логин и некорректный пароль
    Тогда: Отображается сообщение об ошибке "Неверный пароль"
Шаги (Steps): кодовые реализации шагов сценария. Для каждого шага (Given, When, Then) пишется код, который выполняет описанное в шаге действие или проверку.
from behave import given, when, then
from my_app.pages import LoginPage  # представим, что у нас есть такой модуль

@given("Пользователь находится на странице авторизации")
def step_user_on_login_page(context):
    context.page = LoginPage(context.driver)  # инициализация страницы
    context.page.open()  # открыть страницу авторизации

@when("Пользователь вводит корректный логин и пароль")
def step_user_enters_correct_credentials(context):
    context.page.enter_username("correct_username")
    context.page.enter_password("correct_password")
    context.page.submit()

@then("Пользователь попадает на главную страницу")
def step_user_is_on_home_page(context):
    assert context.page.is_home_page_displayed(), "Главная страница не отображается"
Инструменты BDD. Для работы с BDD используются специальные фреймворки, которые поддерживают синтаксис Gherkin и связывают текст сценариев с кодом.

Некоторые популярные инструменты:
  • Cucumber — один из самых известных инструментов для BDD, поддерживающий Java, JavaScript и другие языки.
  • SpecFlow — версия Cucumber для платформы .NET.
  • Behave — инструмент BDD для Python.
  • JBehave — еще один инструмент для работы с BDD на Java.
import io.cucumber.java.en.Given;
import io.cucumber.java.en.When;
import io.cucumber.java.en.Then;
import static org.junit.Assert.*;

public class LoginSteps {

    @Given("Пользователь находится на странице авторизации")
    public void userOnLoginPage() {
        LoginPage.open();  // метод для открытия страницы авторизации
    }

    @When("Пользователь вводит корректный логин и пароль")
    public void userEntersCorrectCredentials() {
        LoginPage.enterUsername("correct_username");
        LoginPage.enterPassword("correct_password");
        LoginPage.submit();
    }

    @Then("Пользователь попадает на главную страницу")
    public void userIsOnHomePage() {
        assertTrue(HomePage.isDisplayed());
    }
}


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

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

Пример использования BDD на практике

Представим задачу: разработать систему для интернет-магазина, где пользователи могут добавлять товары в корзину и оформлять заказы. При использовании BDD мы можем описать поведение системы следующим образом:
  1. Пишем сценарии для добавления товара в корзину:
Функция: Добавление товара в корзину
  Сценарий: Пользователь добавляет товар в пустую корзину
    Дано: Пользователь заходит на страницу товара
    Когда: Пользователь нажимает "Добавить в корзину"
    Тогда: Товар добавляется в корзину, и количество товаров в корзине равно 1
2. Тестировщики и разработчики обсуждают сценарий и утверждают его с бизнес-аналитиками. Все понимают, как должна работать функция.

3. Реализация и автоматизация: разработчики пишут код, который выполняет шаги сценария, а тестировщики создают автоматические тесты для проверки корректности реализации.

4. Постепенное расширение: добавляем новые сценарии для разных условий (например, добавление нескольких товаров или удаление товаров из корзины).


Когда и кому применять BDD?

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

Заключение

BDD — это не просто способ тестирования, а целый подход к разработке, который нацелен на улучшение качества продукта и повышения прозрачности требований. Важно помнить, что его успех зависит от всех участников процесса: только при активном участии разработчиков, тестировщиков и представителей бизнеса BDD способен принести ощутимые результаты и помочь создать продукт, который точно соответствует ожиданиям пользователей.
Хотите лучше разбираться в тестировании и узнать много примеров из практики от опытных преподавателей - приходите на наш курс В тестировщики с нуля!
В тестировщики с нуля
  • 320$
    Lite
    Включает в себя:
    - Пакет В тестировщики с нуля
    - Интенсив по GIT
    - 1 месяц стажировки
  • 400$
    Medium
    Включает в себя:
    - Пакет В тестировщики с нуля
    - Интенсив по GIT
    - Доступ к вебинарам
    - 2 месяца стажировки
  • 540$
    Maximum
    Включает в себя:
    - Пакет В тестировщики с нуля
    - Интенсив по GIT
    - Доступ к вебинарам
    - Курс Тестирование API
    - 4 месяца стажировки
Учимся отличать тест-план, тест-кейсы и чек-листы на примерах.
Полезные ресурсы и советы для поиска работы
Выпускник школы QaLearning рассказывает про свой путь обучения, поиска работы и прохождения собеседований. Вы получите много дельных советов!