기록

[TDD] Test Driven Development, Red-Green-Refactor 본문

교육/강의

[TDD] Test Driven Development, Red-Green-Refactor

youngyin 2025. 1. 23. 00:00

TDD(Test Driven Development)

소프트웨어 개발이 점점 복잡해지면서 코드 품질과 유지보수성은 중요한 과제가 되었습니다. TDD(Test Driven Development, 테스트 주도 개발)는 이러한 과제를 해결하기 위해 고안된 개발 방법론으로, 코드 작성 전에 테스트를 먼저 작성하고 이를 통해 개발을 진행합니다.

TDD의 핵심 원칙:
1. 테스트 작성 → 코드 작성 → 리팩토링을 반복합니다.
2. 테스트는 코드의 안정성과 품질을 보장하는 필수 요소입니다.
3. 작은 단위로 빠른 피드백을 얻어 점진적으로 기능을 개발합니다.

왜 TDD가 중요한가?

  • 코드 품질 향상: 테스트가 요구사항을 보장하며, 불필요한 코드 작성을 방지합니다.
  • 빠른 피드백: 코드 작성 후 바로 동작 여부를 확인할 수 있어 개발 속도를 높입니다.
  • 안정적인 리팩토링: 테스트를 기반으로 코드 구조를 개선해도 기능이 보장됩니다.

TDD의 세 단계 (Red-Green-Refactor)

TDD는 세 단계의 반복적인 사이클로 이루어집니다. 이를 통해 개발자는 항상 명확한 목표에 집중하며 작업을 진행할 수 있습니다.

1. Red 단계: 실패하는 테스트 작성

  • 먼저, 구현되지 않은 기능에 대한 테스트를 작성합니다.
  • 테스트는 당연히 실패해야 합니다. 이는 우리가 아직 코드를 작성하지 않았다는 것을 나타냅니다. 
  • @Test @DisplayName("숫자 두 개를 더했을 때 결과를 반환한다") void addTwoNumbers() { Calculator calculator = new Calculator(); int result = calculator.add(2, 3); assertThat(result).isEqualTo(5); // 실패 (add 메서드 미구현) }

2. Green 단계: 테스트를 통과하도록 최소한의 코드 작성

  • 테스트를 통과하기 위해 필요한 최소한의 코드를 작성합니다.
  • 이 단계에서는 기능 구현에만 집중하며, 코드의 완벽성을 추구하지 않습니다.
    public class Calculator {
        public int add(int a, int b) {
            return a + b; // 최소한의 코드로 테스트 통과
        }
    }

3. Refactor 단계: 중복 제거 및 코드 개선

  • 테스트를 통과한 후, 중복된 코드나 구조적 문제를 개선합니다.
  • 테스트가 작성되어 있으므로 리팩토링 후에도 안정성을 보장받을 수 있습니다.
  • 리팩토링 예제: 새로운 요구사항으로 "음수를 허용하지 않는 추가 기능"이 필요할 경우
public class Calculator {
    public int add(int a, int b) {
        if (a < 0 || b < 0) {
            throw new IllegalArgumentException("음수는 허용되지 않습니다.");
        }
        return a + b;
    }
}

 

Comments