image de chargement
Back to glossary

ATDD (Acceptance Test-Driven Development)

Development methodology driven by acceptance tests, fostering collaboration between business, developers and testers.

Updated on January 8, 2026

Acceptance Test-Driven Development (ATDD) is a collaborative software development approach where acceptance tests are defined before writing code. It brings together business stakeholders, developers, and testers to create executable specifications that serve as living documentation. This practice ensures that developed features exactly match expressed needs and collectively validated acceptance criteria.

ATDD Fundamentals

  • Three-way collaboration between business, development, and testing from the specification phase
  • Definition of executable and automated acceptance criteria before implementation
  • Use of a common language (often Gherkin) understandable by all stakeholders
  • Continuous feedback through automated execution of acceptance tests

Benefits of ATDD

  • Reduction of misunderstandings and interpretation errors between business and technical teams
  • Always up-to-date and executable documentation reflecting actual system behavior
  • Early detection of gaps between business expectations and technical implementation
  • Improved product quality through continuous validation of requirements
  • Enhanced communication and alignment across all stakeholders

Practical ATDD Example

For a user login feature, the team first defines acceptance tests in Gherkin syntax understandable by everyone:

authentication.feature
Feature: User Authentication
  As a registered user
  I want to log in with my credentials
  So that I can access my personal space

  Scenario: Successful login with valid credentials
    Given a registered user with email "user@example.com"
    And the password "SecurePass123!"
    When the user submits the login form
    Then they are redirected to the dashboard
    And a welcome message is displayed
    And a session token is created

  Scenario: Failed login with incorrect password
    Given a registered user with email "user@example.com"
    And an incorrect password "WrongPass"
    When the user submits the login form
    Then an error message "Invalid credentials" is displayed
    And the user remains on the login page
    And no session token is created

These scenarios are then implemented with a framework like Cucumber or SpecFlow:

authentication.steps.ts
import { Given, When, Then } from '@cucumber/cucumber';
import { expect } from 'chai';
import { AuthService } from '../services/auth.service';

let authService: AuthService;
let loginResult: any;
let userCredentials: { email: string; password: string };

Given('a registered user with email {string}', (email: string) => {
  userCredentials = { email, password: '' };
  // Prepare test data
});

Given('the password {string}', (password: string) => {
  userCredentials.password = password;
});

When('the user submits the login form', async () => {
  authService = new AuthService();
  loginResult = await authService.login(
    userCredentials.email,
    userCredentials.password
  );
});

Then('they are redirected to the dashboard', () => {
  expect(loginResult.redirectUrl).to.equal('/dashboard');
});

Then('a welcome message is displayed', () => {
  expect(loginResult.message).to.include('Welcome');
});

Then('a session token is created', () => {
  expect(loginResult.sessionToken).to.exist;
  expect(loginResult.sessionToken).to.have.length.greaterThan(0);
});

ATDD Implementation

  1. Organize a collaborative specification meeting (Three Amigos) with business, dev, and test
  2. Identify user stories and collectively define measurable acceptance criteria
  3. Write test scenarios in natural language (Gherkin) validated by all parties
  4. Automate acceptance tests with appropriate frameworks (Cucumber, SpecFlow, Behave)
  5. Execute tests (which initially fail) to validate their relevance
  6. Develop minimal code necessary to pass acceptance tests
  7. Refactor code while keeping tests green
  8. Integrate acceptance tests into CI/CD pipeline for continuous validation

Pro tip

Schedule Three Amigos sessions at sprint start for each user story. Limit them to 30-45 minutes and focus on 2-3 main scenarios per feature. Use example tables in Gherkin to cover multiple cases with a single scenario, making tests more maintainable and coverage more comprehensive.

ATDD Tools and Frameworks

  • Cucumber (Java, JavaScript, Ruby) - BDD/ATDD framework with Gherkin support
  • SpecFlow (.NET) - ATDD solution for Microsoft ecosystem
  • Behave (Python) - BDD framework inspired by Cucumber for Python
  • FitNesse - Collaborative wiki for defining and executing acceptance tests
  • Robot Framework - Generic framework for acceptance test automation
  • Gauge - Open-source tool with Markdown syntax for specifications

ATDD transforms how teams build software by placing collaboration and business validation at the heart of the development process. By defining executable acceptance criteria upfront, organizations significantly reduce time-to-market, maintenance costs, and the risk of developing unsuitable features. This approach represents a strategic investment to ensure continuous alignment between product vision and technical realization.

Themoneyisalreadyonthetable.

In 1 hour, discover exactly how much you're losing and how to recover it.