TDD(Test Driven development)란?

노력하는백엔드·2026년 3월 8일

이론 정리

목록 보기
10/14

TDD란?

  • Test Driven Development의 약자
  • 테스트 코드를 먼저 작성하고 그 테스트를 통과하도록 실제 코드를 구현하는 개발 방법론
  • 짧은 개발 주기의 반복에 의존하는 개발 프로세스
  • 애자일 방법론 중 하나인 eXtream Programming의 Test-First 개념에 기반을 둔 단순한 설계를 중요시한다.

개발 사이클

Red -> Green -> Refactor

  • Red
    • 먼저 실패하는 테스트를 작성
    • 아직 기능이 구현되지 않았기 때문에 테스트는 실패
    • ex)
      test("두 숫자를 더하면 결과가 나온다", () => {
        expect(add(2,3)).toBe(5);
       });
  • Green
    • 테스트가 통과하도록 최소한의 코드만 작성
    • ex)
      function add(a,b){
        return a+b;
      }
  • Refactor
    • 테스트가 통과하는 상태에서 코드를 개선한다.
    • 중복 제거
    • 구조 개선
    • 가독성 개선
    • ex)
      function add(a,b){
        return a+b;
      }

일반적인 개발 방식 vs TDD 개발 방식

  • 일반 개발 방식
    • 방식
      • 요구사항 분석 -> 설계 -> 개발 -> 테스트 -> 배포
    • 장점
      • 개발 속도가 빠르다.
      • 테스트 코드 유지 비용이 없다.
      • 유연한 개발이 가능하다.
    • 단점
      • 소비자의 요구 사항이 명확하지 않을 수 있다.
      • 자체 버그 검출 능력 저하 또는 소스코드의 품질이 저하될 수 있다.
      • 기능이 많아질수록 버그가 발견되는 시점이 늦어진다.
      • 작은 기능 수정 시 모든 부분을 테스트 진행해야되므로 버그 발견이 어렵다
  • TDD 개발 방식
    • 장점
      • 테스트 코드를 작성하는 도중에 발생하는 예외 사항(버그, 수정사항)들은 테스트 케이스에 추가하고 설계를 개선한다.
      • 테스트 통과된 코드만이 개발 단계에서 실제 코드로 작성되므로 안정성이 있다.
    • 단점
      • 테스트 코드를 먼저 작성해야되므로 초기 개발 속도가 느리다.
      • 테스트 코드 작성 난이도가 높다.
      • 모든 기능에 적용하기 어렵다.

TDD 효과

  • 버그를 조기에 발견할 수 있다.
    • 선 테스트를 진행하므로 초기에 버그를 발견할 수 있다.
  • 안정적인 리팩토링이 가능하다.
  • 코드 설계 품질이 향상된다.
    • 의존성 감소, 모듈화, 유지보수 용이 장점
  • 요구사항을 명확하게 정의할 수 있다.
  • 추가 구현이 용이하다.
profile
열심히 노력하는 백엔드입니다.

0개의 댓글