새로운 방식의 탄생에넌 분명 기존 방식의 단점을 보완하고자
함이 있을 것. 애자일의 탄생 배경에는 워터폴 방식이 있다

주문 -> 디자인 -> 기능구현 -> 테스팅 -> 베포
주문 ➪ 디자인 ➪ 기능구현 ➪ 테스팅 ➪ 배포" x ∞

TDD란
Test Driven Development(테스트 주도 개발)

이름에서 유추할 수 있듯 테스트를 중요시하는 개발 방법론이며,
작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현한다.
짧은 개발 주기의 반복에 의존하는 개발 프로세스이며, 애자일 방법론 중 하나인 eXtream Programming(XP)의 Test-First 개념에 기반을 둔 단순한 설계를 중요시한다. 프로그래밍 전에 테스트 코드를 먼저 작성하는
특징이 있다. 중요한 것은 실패하는 테스트 코드를 작성할 때까지
실제 코드를 작성하지 않는 것과, 실패하는 테스트를 통과할 정도의
최소 실제 코드를 작성해야하는 것이다.
이를 통해 실제 코드에 대해 기대되는 바를 보다 명확하게 정의함으로써 불필요한 설계를 피할 수 있고, 정확한 요구 사항에 집중할 수 있다.
행위 주도 개발은 테스트 주도 개발 (TDD)에서 파생된 개발 방법론이다.
쉽게 생각하면 코드를 작성하기 전에 코드가 일할 행위에 대한 명세를 먼저 작성해야 한다 하면좋은 습관이라고 수긍하게 되지 않을까? 아직 존재하지 않은 코드에 대해 테스트를 작성하기 보다는, 행위에 대한 명세를 작성하는 것이라고 생각하면 직관적으로 쉽게 이해가 된다. 이것이 BDD의 핵심이다
BDD는 비 기술적 언어를 사용하여 더 많은 사람들이 쉽게 이해하도록 하며 고객과 개발자의 관점에서 시스템이 어떻게 작동해야 하는지에 초점을 맞춘다.
BDD에서 주로 사용하는 디자인 패턴은 다음과 같다.
Given-When-Then Pattern
Given : 시나리오 진행에 필요한 값을 설정한다.
사용자가 로그인이 된 상태에서
When : 시나리오를 진행하는데 필요한 조건을 명시한다.
포인트 조회를 한다면
Then : 시나리오를 완료했을 때 보장해야 하는 결과를 명시한다.
사용자의 포인트가 보여진다.
인수 테스트 주도 개발은 말 그대로 인수테스트가 주도하는 개발 방법론을 의미한다.
인수테스트가 무엇인지 궁금하다면 이전 게시글을 참고하자.
(단위테스트, 통합테스트, 인수테스트란)
BDD와 ATDD는 유사하나 BDD는 개발자 관점에서 기능의 동작에
중점을 두는 반면 ATDD는 사용자 시나리오 관점에서 정확한
요구 사항을 캡처하는 데 중점을 둔다.
구현 전에 사용자, 테스터 및 개발자가 인수 조건(Acceptance Criteria)을 정의한다. 이를 통해 모든 프로젝트 구성원이 수행해야 할 작업과 요구 사항을 정확히 이해할 수 있도록 도와준다.
백엔드 시스템에서는 소프트웨어 인수테스트를 위해 주로 API 에 인수테스트 코드를 작성한다. 그 과정에서 주로 RestAssured를 사용한다.