프런트엔드/리팩터링

테스트 전문가인 내가 강력 추천하는 TDD와 BDD 비교하는 방법

조드래곤나인 2024. 1. 16. 15:25

 

TDD와 BDD의 정의

 

TDD(Test-Driven Development)

TDD(Test-Driven Development)는 테스트 주도 개발이라고 하며,

함수나 기능에 대한 테스트 케이스를 최우선 먼저 작성하고,

그 테스트를 통과하기 위한 최소한의 코드를 작성하는 개발 방법론입니다.

BDD(Behavior-Driven Development)
BDD(Behavior-Driven Development)는 행동 주도 개발이라고 하며,

사용자 관점에서 애플리케이션의 행동에 초점을 맞춰 테스트 케이스를 작성하는 개발 방법론입니다.

 

TDD와 BDD의 차이점 3가지

1 테스트 케이스 작성
TDD는 테스트 코드 작성자 관점에서 테스트 케이스를 작성하고, 기능에 초점을 맞춥니다.

 

반면에 BDD는 사용자 관점에서 테스트 케이스를 작성하며, 애플리케이션의 행동을 초점을 맞춥니다.

 


2 언어
TDD는 테스트 코드 작성자들이 이해할 수 있는 테스트 케이스를 작성합니다.

 

반면에 BDD는 테스트 코드 작성자가 아니라도 이해할 수 있는 일반적인 언어로 테스트 케이스를 작성합니다.

 


3 테스트의 목표
TDD는 애플리케이션 소스 코드의 정확성을 검증하는 것이 목표입니다.

 

반면에 BDD는 요구사항을 만족하는지 검증하는 것이 목표입니다.



TDD와 BDD의 자바스크립트 코드 예시

 

간단한 계산 기능을 구현하는 예제로 TDD와 BDD를 비교해 보겠습니다.

 


TDD
mocha와 chai를 사용해서 작성한 예시입니다.

 

const { expect } = require('chai');
const Calculator = require('./calculator');

describe('Calculator', () => {
  let calculator;

  beforeEach(() => {
    calculator = new Calculator();
  });

  it('should add two numbers', () => {
    const result = calculator.add(2, 3);
    expect(result).to.equal(5);
  });

  it('should subtract two numbers', () => {
    const result = calculator.subtract(5, 2);
    expect(result).to.equal(3);
  });
});

 

 

BDD
cucumber와 chai를 사용해서 작성한 예시입니다.

BDD는 TDD와 다르게 자연어로 테스크 케이스를 작성하고,

구현 부분을 프로그래밍 언어로 사용하는 것을 알 수 있습니다.

Feature: Calculator
  As a user
  I want to use a calculator
  So that I can perform basic arithmetic operations

  Scenario: Addition
    Given I have a calculator
    When I add 2 and 3
    Then I expect the result to be 5

  Scenario: Subtraction
    Given I have a calculator
    When I subtract 5 from 2
    Then I expect the result to be -3

  # more scenarios for other operations ...
const { Given, When, Then } = require('cucumber');
const { expect } = require('chai');
const Calculator = require('./calculator');

let calculator;
let result;

Given('I have a calculator', () => {
  calculator = new Calculator();
});

When('I add {int} and {int}', (a, b) => {
  result = calculator.add(a, b);
});

When('I subtract {int} from {int}', (a, b) => {
  result = calculator.subtract(a, b);
});

Then('I expect the result to be {int}', (expected) => {
  expect(result).to.equal(expected);
});

 


 

 

테스트 전문가인 내가 강력 추천하는 TDD와 BDD 비교하는 방법

TDD와 BDD의 정의 TDD(Test-Driven Development) TDD(Test-Driven Development)는 테스...

blog.naver.com

 

728x90