기존의 폭포수 모델 에서 동일하게 가지고 있는 문제를 해결하기 위한 개발 방법론.
TDD는 매우 짧은 개발 서클의 반복에 의존하는 소프트웨어 개발 프로세스이다.
우선 개발자는 요구되는 새로운 기능에 대한 자동화된 테스트 케이스를 작성하고, 해당 케스트를 통과하는 가장 짧고 가독성이 좋고 유지보수성이 뛰어난 코드를 작성한다. 일단 테스트 통과하는 코드를 작성하고 상황에 맞게 리팩토링하는 과정을 거치는 것이다.
BDD은 TDD를 근간으로 파생된 프로그래밍 개발 프로세스이다. TDD에서 한발 더 나아가 테스트 케이스 자체가 요구사양이 되도록 하는 개발 방식이다. TDD에서는 유닛 테스트로 작성된 테스트 코드의 가독성을 높이고 테스트 케이스에 대한 문서를 작성해왔는데, BDD는 이것을 결합테스트와 시나리오 테스트까지 확장하여 각각에 해당하는 문서들을 대체했다.
어디서부터 테스트를 시작할지, 어떤 것을 테스트하고 어떤 것은 하지 않을지, 한 번에 얼마만큼을 테스트할지, 테스트에 어떤 이름을 붙일지 그리고 테스트가 왜 실패했는지 등에 대한 고민을 BDD를 통해 해결할 수가 있게 된 것이다. 테스트 메소드의 이름을 “이 클래스가 어떤 행위를 해야한다. (should do something)”라는 식의 문장으로 작성하여 행위를 위한 테스트에 집중을 하게 하는 것이다.
Scenario: User uses wrong password
Given a username 'Steve';
And a password 'Passw0rd';
When the user logs in with username and password
Then the login form should be shown again
DDD는 도메인 그 자체와 도메인 로직에 초점을 맞춘다. 일반적으로 많이 사용하는 데이터 중심의 접근법을 탈피하여 순수한 도메인의 모델과 로직에 집중하는 것을 말한다.
보편적인 언어의 사용을 추구하여, 도메인 전문가(현업, 업무 전문가), 와 소프트웨어 개발자 간의 커뮤니케이션 문제를 없애고 상호가 이해할 수 있고 모든 문서와 코드에 이르기까지 동일한 표현과 단어로 구성된 단일화된 언어체계를 구축해나간다.
분석 작업과 설계 그리고 구현까지 통일된 방식으로 커뮤니케이션이 가능해지는 것이다. DDD는 소프트웨어 엔티티와 도메인 컨셉트를 가장 가까이 일치시킨다. 분석 모델과 설계가 다르고 그것과 코드가 다른 구조가 아니라 도메인 모델부터 코드까지 항상 함께 움직이는 구조의 모델을 지향한다.
테스트 주도 개발에 대하여 - TDD와 BDD 그리고 DDD