10/16

졸용·2025년 10월 16일

TIL

목록 보기
94/144

🔹 TDD란?

TDD(Test-Driven Development, 테스트 주도 개발)은

테스트를 먼저 작성하고, 그 테스트를 통과하는 최소한의 코드를 작성한 후, 코드를 개선(리팩터링)

하는 개발 방법론을 말한다.


🔸 TDD의 기본 사이클 (Red → Green → Refactor)

  1. Red (실패하는 테스트 작성)

    • 먼저 구현할 기능에 대한 테스트 코드를 작성한다.
    • 이 시점에서는 실제 코드를 작성하지 않았기 때문에 테스트는 반드시 실패해야 한다.
  2. Green (테스트 통과시키기)

    • 테스트를 통과시키기 위한 최소한의 코드를 작성한다.
    • 일단 돌아가게 만드는 것이 목적이다. (예쁘게 만들 필요 없음)
  3. Refactor (리팩터링)

    • 테스트가 모두 통과한 후, 코드 품질을 개선한다.
    • 중복 제거, 변수명 개선, 구조 정리 등을 하면서 동작은 그대로 유지한다.
    • 리팩터링 후에도 테스트가 통과하면 안정성이 검증된다.

이 과정을 반복하며 점진적으로 완성도 높은 코드를 만들어간다.



🔸 예시: 덧셈 기능을 TDD로 구현

1️⃣ 실패하는 테스트 작성

@Test
void addNumbers() {
    Calculator calculator = new Calculator();
    assertEquals(5, calculator.add(2, 3));  // 아직 Calculator가 없으니 실패
}

2️⃣ 테스트 통과를 위한 최소 코드 작성

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

테스트를 실행하면 통과힌다 ✅

3️⃣ 리팩터링

  • 코드가 단순하므로 지금은 변경할 게 없지만,
  • 복잡한 로직의 경우 중복 제거, 책임 분리 등을 이 단계에서 수행한다.


🔹 TDD의 장점

항목설명
신뢰성 향상코드가 언제나 테스트로 검증되므로 버그 발생 확률이 낮다.
리팩터링 용이테스트가 있으니 안심하고 코드 구조를 바꿀 수 있다.
명확한 요구사항 반영테스트를 먼저 작성하므로 “어떤 기능이 필요한가”를 먼저 정의하게 된다.
유지보수성 향상시간이 지나도 테스트로 기존 동작이 보장된다.


🔹 TDD의 단점 (현실적 고려)

  • 초기 개발 속도가 느려진다. (테스트 작성 비용)
  • 테스트 설계 능력이 부족하면 오히려 복잡해질 수 있다.
  • UI나 비동기 로직처럼 테스트 작성이 어려운 영역에서는 적용이 까다롭다.


🔸 TDD와 연관된 개념

개념설명
BDD (Behavior-Driven Development)TDD에서 발전한 형태로, “사용자 행동(시나리오)” 중심으로 테스트를 작성한다.
Unit Test (단위 테스트)TDD의 핵심 단위. 하나의 메서드나 클래스 단위로 동작을 검증한다.
CI/CD 파이프라인자동 테스트가 포함되어 배포 전 품질을 보장한다.
profile
꾸준한 공부만이 답이다

0개의 댓글