BDD

Coastby·2022년 10월 23일
0

Keyword

목록 보기
4/8
post-custom-banner

BDD 란?

  • TDD는 테스트를 먼저 작성하고 그 테스트를 통과시키는 코드를 작성하는 흐름을 기본으로 한다.

  • 테스트 단위도 함수 단위로 매우 작아서 거의 모든 함수가 테스트 대상에 포함된다.

  • 개발 중후반에 수정되는 내용에 대해서 까지는 테스트 케이스를 계속 유지하면서 가져가기 쉽지 않다.

  • BDD는 시나리오를 기반으로 테스트 케이스를 작성하며, 함수 단위 테스트를 권장하지 않는다. 이 시나리오는 개발자가 아닌 사람이 봐도 이해할 수 있을 정도의 레벨을 권장한다.

  • TDD와의 차이 :

    • TDD는 개발을 하다보면 예외사항에 대해 생각하고 testcode를 매번 작성해야 한다. 함수에 대한 평가로 기획 또는 설계의 문제를 문제 발생 전에 파악할 수 없다.
    • BDD는 코드 작성 전에 미리 시나리오를 설계하며 발생 가능한 문제를 미리 파악할 수있다.
    • 따라서 이미 작성된 요구사항이나 기획서가 있고, 그에 맞추어 테스트 케이스를 작성하게 된다면 시간에 대한 비용이 줄어들게 된다.
    • 즉, BDD는 TDD에서 파생된 개발 방법론으로 개발자와 비개발자의 협업 과정을 녹여낸 방법이다.
    • 두 방법은 상호 보완적인 관계이다.
      • BDD의 테스트케이스로 시나리오 검증을 하고, 해당 시나리오에서 사용하는 각 모듈들은 TDD의 테스트케이스로 검증을 하는 방법이 좋다.

  • 시나리오는 Given, When, Then 구조를 가지는 것을 기본 패턴으로 한다.
    • Feature : 테스트에 대상의 기능/책임을 명시한다.
    • Scenario : 테스트 목저에 대한 상황을 설명한다.
    • Given : 시나이롱 진행에 필요한 값을 설정한다.
    • When : 시나리오를 진행하는데 필요한 조건을 명시한다.
    • Then : 시나리오를 완료햇을 때 보장해야 하는 결과를 명시한다.
  • 테스트 대상의 상태 변화를 테스트하는 것이다.
  • 테스트 대상은 A 상태에서 출발하여 (Given), 어떤 상태 변화를 가했을 때 (When), 기대하는 상태로 완료되어야 한다. (Then)
  • 또는 side effect가 전혀 없는 테스트 대상이라면 테스트 대상의 환경을 A 상태에 두고 (Given) 어떤 행동을 요구했을 때 (When), 기대하는 결과를 돌려받아야 한다. (Then)
  • 계산기 프로그램에서 사용자가 어떤 flow로 이용하게 되는지를 생각하고, 테스트 코드를 짤 수 있다. 아래는 계산기의 + 기능을 구현할 때의 BDD예시이다.
Given 
  - 사용자가 처음에 페이지에 접속하고 나면, display 값이 0이다. 
When 
  - 유저는 2를 클릭하고, 디스플레이에 2가 보여진다. 
  - 유저는 +를 클릭한다. 
  - 유저는 4를 클릭하고, 디스플레이에 4가 보여진다. 
  - 유저는 =를 클릭한다. 
Then 
  - 디스플레이 값은 6이 된다.
  • 테스트 대상이 가지고 있는 인터페이스에 대한 테스트 시나리오가 중요한 것이지 내부적으로 사용되는 모든 함수가 명시적인 테스트 대상은 아니다.
  • 인터페이스가 변하지 않는 이상 내부적인 리팩토링을 거친 코드는 테스트 코드 수정없이 모두 통과되어야 한다.

참고 : https://mingule.tistory.com/43

profile
훈이야 화이팅
post-custom-banner

0개의 댓글