BDD

2020. 4. 2. 15:30코드 품질 관리

728x90

1. BDD란

 BDD(Behavior Driven Development)로 TDD를 근간으로 파생된 개발 방법입니다. TDD에서 한 발 더 나아가 테스트 케이스 자체가 요구 사항이 되도록 하는 개발 방법입니다. BDD를 통해 개발을 하게 된다면 테스트 메소드의 이름을 “이 클래스가 어떤 행위를 해야한다.”라는 식의 문장으로 작성하여 행위에 대한 테스트에 집중할 수 있습니다.

2. BDD의 기본 패턴

 BDD는 시나리오를 기반으로 테스트 케이스를 작성하며 함수 단위 테스트를 권장하지 않습니다. 이 시나리오는 개발자가 아닌 사람이 봐도 이해할 수 있을 정도의 레벨을 권장합니다. 하나의 시나리오는 Given, When, Then 구조를 가지는 것으로 기본 패턴을 권장합니다.

  • Feature: 테스트에 대상의 기능 / 책임을 명시합니다.
  • Scenario: 테스트 목적에 대한 상황을 설명합니다
  • Given: 시나리오 진행에 필요한 값을 설정합니다.
  • When: 시나리오를 진행하는데 필요한 조건을 명시합니다.
  • Then: 시나리오를 완료했을 때 보장해야 하는 결과를 명시합니다.

위의 내용을 개발 측면에서 더 간략하게 정리하면 테스트 대상의 상태 변화를 테스트하는 것입니다.

작성 예시

    @Test
    fun `aliases for behavior driven development`() {
        //given
        given(calculatorService.add(20.0, 10.0)).willReturn(30.0)

        //when
        val result = calculatorService.add(20.0, 10.0)

        //then
        Assert.assertThat(30.0, CoreMatchers.`is`(result))
    }

3. TDD와 BDD의 차이

TDD

  • 코드에 집중된 테스트 코드를 작성
  • 비즈니스 요구 사항에 따른 로직을 파악하기 힘듬
  • 추후 코드를 수정할 때, BDD보다 코스트가 클 수가 있음

BDD

  • 시나리오(비즈니스 요구 사항)에 집중된 테스트 코드를 작성
  • 일반적인 TDD에 비해 의도와 목적을 구체적으로 작성하기 때문에 요구 사항을 파악하기 쉬움
728x90

'코드 품질 관리' 카테고리의 다른 글

Given-When-Then 패턴  (0) 2020.04.01
TDD  (0) 2020.04.01
System Test  (0) 2020.03.29
Integration Test  (0) 2020.03.29
Code Coverage  (0) 2020.03.28