TDD(Test-Driven Development)란?

그냥 준현·2024년 5월 20일
0

Computer Science

목록 보기
2/16

소개

TDD(Test-Driven Development)는 소프트웨어 개발 방법론 중 하나로, 한국어로는 테스트 주도 개발이라고 부릅니다.
TDD의 가장 큰 특징은 테스트를 먼저 작성하고 기능을 나중에 작성하는 것입니다.

단위 테스트

TDD에서 얘기하는 테스트는 "단위 테스트"를 의미하므로 정의를 간단하게 짚고 가겠습니다.

하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트

쉽게 생각하면 메서드, 함수 하나하나를 테스트하는 방식입니다.

예시로 하나의 API 처리에 대해서 여러 개발자가 개발하는 상황에서는,
각 개발자가 본인이 담당한 파트에 대해서 각각 단위 테스트를 진행하고
여러 개발자가 모여서 API의 전체 동작이 잘 되는지 통합 테스트를 진행한다고 생각하면 됩니다.

TDD 진행 방식

TDD는 다음과 같은 세 가지 단계로 이루어집니다.

  1. 테스트 코드 개발
  2. 기능 개발
  3. 리팩터링

Spring 프레임워크에서 jUnit을 활용한 예시와 함께 각 단계를 살펴보겠습니다.

테스트 코드 개발 (Red 단계)

이 단계에서는 실패하는 단위 테스트를 작성합니다.
기능을 구현하기 전에 테스트를 먼저 작성하므로, 당연히 테스트는 실패하게 됩니다.
이 단계의 목적은 구현할 기능의 요구사항을 명확히 정의하는 것입니다.

@Test
public void testAddition() {
    Calculator calculator = new Calculator();
    assertEquals(5, calculator.add(2, 3));
}

가장 집중력이 좋은 시작 단계에서 테스트 코드를 먼저 작성함으로써 요구사항을 실수 없이 정확히 정의할 수 있습니다.

기능 개발 (Green 단계)

이 단계에서는 Red 단계에서 작성한 테스트를 통과하도록 최소한의 코드를 작성합니다.
목표는 가능한 한 빠르게 테스트를 통과시키는 것입니다.
빠르게 통과시키기 위해 개발에서 지양하는 방식을 사용해도 괜찮습니다. (ex. 하드 코딩)

public class Calculator {
    public int add(int a, int b) {
    	// 테스트를 통과할 수 있는 결과를 강제로 반환
        return 5;
    }
}

리팩터링 (Refactor 단계)

이 단계에서는 Green 단계에서 작성한 코드를 리팩터링하여 코드의 품질을 향상시킵니다.
리팩터링 과정에서 테스트가 깨지지 않도록 주의하며, 코드를 개선하고 최적화합니다.

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
}

이미 테스트를 통과하는 코드였기 때문에, 리팩터링 과정에서 계속 테스트를 수행하며 올바르게 리팩터링을 진행하고 있는 지 점검할 수 있습니다.

profile
잘해야 재밌어

0개의 댓글

관련 채용 정보