TDD, ATDD và BDD đều dùng tests để định hướng development. Và là bộ 3 hay bị hỏi trong các buổi phỏng vấn 😅
1. Test-Driven Development (TDD)
TDD định hướng việc lập trình bằng test cases thay cho thiết kế phần mềm quá chi tiết từ đầu. Chu kỳ phổ biến là:
- Red: viết một test mới và thấy test fail.
- Green: viết lượng code tối thiểu để test pass.
- Refactor: cải thiện test và code mà vẫn giữ hành vi đúng.
TDD thường tập trung ở mức unit, do developer tự thực hiện.
2. Behavior-Driven Development (BDD)
BDD diễn đạt hành vi mong muốn bằng ngôn ngữ tự nhiên dễ hiểu với stakeholder, thường dùng cấu trúc Given / When / Then. Các scenario này nên được chuyển thành executable tests. Ngôn ngữ này gọi là Gherkin
Given tài khoản đang active
When người dùng nhập đúng email và mật khẩu
Then hệ thống chuyển đến trang Dashboard
3. Acceptance Test-Driven Development (ATDD)
ATDD tạo tests từ acceptance criteria như một phần của system design. Business representative, developer và tester cùng làm rõ kỳ vọng trước khi phần chức năng được phát triển.
Level này có thể viết như ngôn ngữ con người, không cần dùng Gherkin cũng được
Bảng so sánh
| Tiêu chí | TDD | ATDD | BDD |
|---|---|---|---|
| Trọng tâm | Thiết kế và coding | Acceptance criteria | Hành vi có thể hiểu chung |
| Người tham gia chính | Developer | Business, tester | Business, tester |
| Mức thường gặp | Unit Test | Acceptance/System | Integration |
| Cách thể hiện | Unit/component tests | Acceptance tests | Scenario ngôn ngữ tự nhiên |
| Câu hỏi chính | Code nên hoạt động ra sao? | Điều gì được chấp nhận? | Hệ thống nên cư xử thế nào? |
Chúng có thay thế nhau không?
Không. Dùng hết cũng được. Hoặc dùng 1 số. Tuỳ effort team. Một team có thể dùng TDD cho component logic, ATDD để thống nhất acceptance criteria và BDD để diễn đạt behavior chung. Các tests sau đó có thể được giữ lại trong automated regression suite để bảo vệ chất lượng khi refactor hoặc thay đổi sản phẩm.
Kết luận
Cách nhớ ngắn gọn:
- TDD là do dev làm, viết unit test trước khi code, code sao cho các test xanh hết là ok
- ATDD do tester hoặc PO viết, dựa trên Acceptance Criteria, luồng E2E hướng người dùng cối
- BDD do tester hoặc PO viết, sử dụng cú phảp given/when/then, tái hiện hành vi ở nhiều mức




