TDD도 잘 모르는데 이번엔 BDD라고 한다..
이번 기회에 둘은 무엇이 다르고, 어떤 때에 사용하는 것인지 "가볍게" 파헤쳐 보고자 한다.
if(kakao)2020을 듣고 정리를 한 내용입니다.
Test Driven Development
의 준말로, 테스트 주도 개발이라고 한다.테스트 코드 작성 -> 실패 -> 코드 작성 후 다시 테스트
를 반복하며 개발하게 된다.
- TDD는
테스트케이스
를 우선적으로 작성하고, 그 다음 코드를 작성하는 방법이다.- !TDD(not TDD)는
코드
를 우선적으로 작성하고, 그 다음 테스트를 하는 방법이다.
Testable Code
는 역할 단순화가 된 모듈의 작성이 가능하다.... 테스 형도 모른다고 한다.
Behavior Driven Development
의 준말로, 행동 주도 개발이라고 한다.
TDD에서 파생된 개발 방법론으로써, 개발자와 비개발자 간의 협업 과정을 녹여낸 방법이다.
사용자의 행위를 작성하고 결과 검증을 진행하는 방식으로 이루어진다.
BDD로 테스트코드를 작성함에 따라 설계 또한 행위의 중심이 되는 도메인 기반의 설계
가 된다.
TDD에 쓰이는 고민의 시간은 곧 비용이 된다.
사용자의 행위들
이 정의되어 있다.선배 개발자들의 노력으로 이미 정해진 형식을 만나볼 수 있었다.
아래 세 가지 틀을 통해 요구사항을 하나하나씩 구조화된 시나리오로 작성할 수 있다.
Given
: 사용자 행위 시 주어진 환경When
: 실제 사용자의 행위Then
: 그 행위에 따른 기대 결과Example (이모티콘 스튜디오 검수 등록 화면 기획서 기반 BDD TestCase)
예시를 보면 기획서의 내용이 그대로 담겨있음이 확인 가능하다.
이제 Test Case에 대한 부담이 줄어들었을 뿐만 아니라, 요구사항이나 기획서를 꼼꼼히 읽기 때문에 개발자가 서비스에 대한 이해도 또한 높아질 수 있다고 한다.
그런데 이는 TDD를 그냥 확장한 방식이라고 해도 될텐데, 굳이 BDD라고 따로 부르는 이유가 뭘까?
- TDD의 TC : 테스트할 모듈의 기능을 확인하는 관점에서 작성
- add(1,1)이 2인지 확인
- BDD의 TC : 시나리오 주체를 기준으로 한 행위를 확인하기 위한 관점에서 작성
- 사용자가 "="를 눌렀을 때, 1+1의 값이 2가 화면에 표시되는지 확인
유저 시나리오의 흐름
을 확인할 수 있다.Test Coverage
(테스트가 충분함을 가지는지에 대한 척도)를 가질 수 있다.add
함수 자체는 작동을 잘 하더라도, 결국 사용자가 원하는 결과물을 얻지 못하기 때문에, BDD의 Test Case에서 실패할 수 있게 된다.아래 예제를 통해 인증 방식 이슈가 추가로 기획이 필요하다는 것을 알 수 있게 된다.
Example (이모티콘 스튜디오 검수 등록 화면 기획서 기반 BDD TestCase)
이렇게 기획 단계에서 빠진 부분들을 일정 연기 없이 추가하려다가 누더기 코드가 잔뜩 쌓이게 되는 것을 BDD를 통해 방지할 수 있게 된 것이다!!
BDD를 통해 시나리오 검증 및 리스크 감소 효과를 볼 수 있다. (탄탄한 설계의 밑거름이 된다.)
TDD | BDD | |
---|---|---|
테스트 코드의 목적은? | 기능 동작의 검증 | 서비스 유저 시나리오 동작의 검증 |
테스트 코드의 설계중심은? | 제공할 모듈의 기능 중심 | 서비스 사용자 행위 중심 |
테스트 코드 설계 재료는? | 모듈 사양 문서 (개발자가 작성) | 서비스 기획서 (서비스 기획자가 작성) |
어떤 프로젝트에 적합한가? | 모듈/라이브러리 프로젝트 | 서비스 프로젝트 |
장점은? | 설계 단계에서 예외 케이스들을 확인 가능 | 설계 단계에서 누락된 기획을 확인 가능 |