인식론적 전환
TDD와 BDD의 차이는 단순한 도구의 차이가 아니다. 이는 소프트웨어의 진실이 어디에 있는가에 대한 철학적 입장의 차이다.
TDD는 “코드가 명세다”라는 전제에서 출발한다. 테스트가 곧 문서이며, 통과하는 테스트가 시스템의 진실을 증명한다. 이는 실증주의에 가깝다.
BDD는 “행동이 명세다”라고 주장한다. 코드가 아닌, 시스템이 보이는 외부적 행동이 진정한 명세다. 이는 행동주의 심리학과 유사한 인식론적 입장이다.
통찰: BDD는 소프트웨어의 사회적 계약을 명시화한다
소프트웨어 개발은 결국 사회적 계약의 연속이다. 개발자와 비즈니스 사이, 시스템과 사용자 사이의 암묵적 계약을 BDD는 명시적 시나리오로 전환한다. TDD가 기술적 부채를 줄인다면, BDD는 의미론적 부채를 줄인다.
실용적 함의
- BDD 도입은 테스트 도구 변경이 아닌, 커뮤니케이션 방식의 혁신이다
- Given-When-Then 패턴은 모든 이해관계자가 동일한 언어로 시스템을 논의할 수 있는 기반을 제공한다
- 진정한 BDD는 ubiquitous-language의 발견과 정제 과정을 수반한다