[CS] TDD와 BDD

khj·2024년 11월 22일

Computer Science

목록 보기
8/26
post-thumbnail

TDD(Test-Driven Development)BDD(Behavior-Driven Development)는 소프트웨어 개발 과정에서 품질을 보장하기 위해 사용되는 두 가지 주요 방법론입니다. 두 방법 모두 테스트를 기반으로 코드 구현을 진행하지만, 접근 방식과 초점에 차이가 있습니다.

1. TDD: Test-Driven Development

TDD는 "테스트 우선 개발" 방식으로, 코드를 작성하기 전에 테스트를 먼저 작성합니다.

구조

TDD는 테스트 작성 → 코드 구현 → 리팩터링 세 단계로 이루어져 있습니다.
1. 테스트 작성: 기능에 대한 실패 테스트를 작성합니다.
2. 코드 구현: 테스트를 통과할 최소한의 코드를 작성합니다.
3. 리팩터링: 코드의 품질을 개선합니다.

특징

  • 코드가 예상대로 작동하는지 항상 보장할 수 있습니다.
  • 작은 단위의 테스트를 통해 디버깅 시간을 단축합니다.
  • 코드 품질과 유지보수성이 향상됩니다.

예제 (Java)

// 테스트 코드 작성
@Test
public void testAddition() {
    Calculator calculator = new Calculator();
    int result = calculator.add(2, 3);
    assertEquals(5, result);
}

// 최소한의 코드 작성
public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
}

2. BDD: Behavior-Driven Development

BDD는 "행동 중심 개발" 방식으로, 소프트웨어의 행동과 기대 결과에 초점을 맞춥니다.

구조

BDD는 테스트 시나리오를 Given-When-Then 구조로 작성합니다.
1. Given: 초기 조건 설정
2. When: 사용자의 행동 정의
3. Then: 기대 결과 확인

특징

  • 비즈니스 언어를 사용하여 테스트를 정의합니다.
  • 기술적인 관점(TDD)보다 사용자 관점에서 시스템의 행동을 명확히 표현합니다.

예제 (Cucumber)

Feature: Calculator addition
  Scenario: Add two numbers
    Given the calculator is on
    When I add 2 and 3
    Then the result should be 5

3. TDD와 BDD의 차이점

구분 TDD (Test-Driven Development) BDD (Behavior-Driven Development)
초점 코드의 기능 검증 시스템의 행동 정의
언어 프로그래밍 언어로 작성 비즈니스 언어(Gherkin 등)로 작성
대상 주로 개발자 개발자, 비즈니스 관계자, 테스터 모두 참여 가능
테스트 구조 작은 단위 테스트 중심 사용자 시나리오 중심

4. TDD와 BDD의 통신 과정 비교

TDD는 코드 내부의 동작에 초점을 맞추는 반면, BDD는 시스템 전체의 행동과 사용자 요구를 반영합니다.

  • TDD:

    • 입력값과 예상 결과를 바탕으로 테스트를 작성합니다.
    • 각 메서드와 로직이 테스트를 통과하도록 개발합니다.
    • 테스트는 주로 함수 호출이나 내부 구현 중심입니다.
  • BDD:

    • 사용자 관점에서 시스템의 동작을 정의합니다.
    • 정의된 행동에 따라 테스트를 작성하고, 코드로 구현합니다.
    • 요구사항과 시스템 동작 간의 의사소통을 강조합니다.

5. 결합하여 사용하기

TDD와 BDD는 대립적인 방법론이 아닙니다.

  • TDD는 세부적인 코드 구현에 초점을 맞추고,
  • BDD는 시스템의 전반적인 동작을 정의하며,

이 두 방법을 함께 사용하면 테스트 가능하고 사용자 요구사항을 충족하는 소프트웨어를 개발할 수 있습니다.
예를 들어, BDD로 전체적인 사용자 시나리오를 작성한 뒤, 세부적인 로직 구현은 TDD로 진행할 수 있습니다.

profile
Spring, Django 개발 블로그

0개의 댓글