BDD vs TDD vs ATDD: когда что использовать в QA
TDD, BDD, ATDD — три аббревиатуры, которые часто путают и используют как синонимы. На самом деле — это три разных практики, у каждой своя цель и команда.
TDD — Test Driven Development
Кто пишет: разработчик.
Когда: до написания продакшен-кода.
Цикл: Red → Green → Refactor.
- Пишешь тест → он красный (Red).
- Пишешь минимальный код чтобы тест прошёл (Green).
- Рефакторишь не ломая тест.
Цель — дизайн кода через тесты. Побочный продукт — high coverage. QA-инженер редко участвует в TDD — это работа dev’а.
ATDD — Acceptance Test Driven Development
Кто пишет: трио — Product/Business Analyst + Developer + QA.
Когда: до начала разработки фичи.
Цикл:
- Команда обсуждает фичу.
- Совместно пишут acceptance тесты на бизнес-языке: «когда пользователь делает X, должно произойти Y».
- Разработчик реализует, QA проверяет что тесты проходят.
Цель — общее понимание требований. Acceptance тесты становятся живой документацией.
BDD — Behavior Driven Development
Кто пишет: продуктовые сотрудники + разработка + QA.
Когда: до и во время разработки.
Формат: Gherkin (Given / When / Then):
Feature: Login
Scenario: Successful login
Given user has account with email "[email protected]"
When user enters email and password
Then user is redirected to /dashboard
Технически BDD — это расширение ATDD с акцентом на естественный язык. Реализуется через Cucumber, SpecFlow, Behave.
Когда что использовать
TDD — если ты пишешь юнит-тесты и хочешь использовать их как инструмент дизайна. Преимущественно для разработчиков.
ATDD — если требования сложные и часто меняются. Полезно когда у тебя есть business analyst или PM который активно участвует.
BDD — если хочешь, чтобы acceptance criteria были читаемы продактом. Минус — overhead из-за Gherkin-слоя. Плюс — единый источник правды для всех ролей.
Подводные камни
TDD: догматизм
«Каждая строка кода должна быть закрыта тестом» — путь к 80% покрытию и куче бесполезных тестов на getter’ы. TDD — это инструмент, не религия. Пиши тесты на критичные части, не на тривиальное.
BDD: Gherkin без сценариев
Команды пишут Gherkin потому что «модно», но не привлекают product/QA на этапе обсуждения. В итоге Gherkin-файлы пишет разработчик в одиночку — теряется главная ценность (общее понимание). Лучше тогда уж pytest на Python.
ATDD: разрыв между тестом и реализацией
Acceptance-тест написали → разработчик не смотрит → реализует своё видение → тест проваливается → переписывают тест. Цикл «обсудили → реализовали → подтвердили» сломан.
Что делать QA
— Начни с ATDD — это самое полезное для QA. Просто привлекай разработчиков к обсуждению требований до начала кодинга. Минимум tooling.
— Не пытайся внедрить BDD на старый проект — нужен culture shift всей команды. Лучше для нового проекта.
— TDD оставь разработчикам — это их практика. QA может помочь обзорами тестов, но не писать их за них.
Подробнее: Martin Fowler — TDD, Dan North — Introducing BDD.