1 분 소요

TDD 테스트 주도 개발에 대하여


개요


TDD란 ‘Test Driven Development’ 의 줄임말로 번역하자면 테스트 주도 개발이다.


개발 방법론 중의 하나이며, 모든 방법론이 그러하듯 이름이 추상적이기 때문에 정확한 시스템을 파악하기 어렵다.


이해하기 쉽게 표현하자면 실제 코드를 개발하기 전에 로직별로 한 단위로 나누어 테스트 하는 개발 방식을 뜻한다.


여기서 한 단위로 나누어 테스트 하는 것을 ‘unit test’ 즉 단위 테스트라고 부른다.


TDD를 이해하기 위해선 Unit test를 이해하는 것이 먼저이다.


Unit test


  • 일반적으로 한 단위란 하나의 객체


단위 테스트란 하나의 객체별로 나누어 테스트를 하는 것을 의미한다.


예를 들어 가계부 서비스가 존재하고, 해당 서비스 안에 사칙연산이 가능한 계산기가 존재한다고 생각해보자.


TDD_1

이 때 계산기 클래스 안에 존재하는 사칙연산 함수들을 각 함수별로 테스트 하는 것을 단위 테스트라고 이해하면 된다.


단위 테스트의 장점


  • 안정적으로 리팩토링 할 수 있다.
  • 개발 및 테스팅에 대한 비용 감소
    • 전체 서비스를 테스트 하기 위해서는 확인하고자 하는 기능 외의 리소스들이 많이 필요하다.
  • 코드 수정 및 개발 속도 향상


단위 테스트 규칙


단위 테스트는 다음과 같은 다섯 개의 규칙을 가진다.


  • Fast : 빠른 테스트가 가능해야 한다.
  • independent : 각각의 테스트는 서로 의존하지 않아야 하며 독립성이 유지되어야 한다.
  • Repeatable : 반복 가능해야 한다.
  • Self-Validating : 테스트는 자체적으로 검증 되어야 한다.
  • Timely : 테스트 시점은 실제 코드를 구현하기 직전이 되어야 한다.


TDD


TDD의 테스트 방식


test-driven-development-process-cycle-xenonstack


  1. 실패하는 단위 테스트 작성
  2. 테스트를 통과하기 위한 프로덕션 코드 작성
    • 가짜로 구현하거나, 여러 테스트 코드를 작성하는 등의 여러 방법이 존재한다.
  3. 실패 테스트가 없을 경우 성공 테스트 작성
  4. 새로운 테스트를 통과하기 위해 프로덕션 코드 추가 또는 수정
  5. 1~4단계를 반복하여 모든 케이스를 테스트
  6. 테스트를 통과한 코드들에 대하여 리팩토링을 수행


장점


왜들 그렇게 TDD를 외치는지 알아보자.


  1. OOP한 코드 생산
    • 테스트 설계 규칙에 따라 독립성, 반복성을 지키게 코드를 설계할 수 밖에 없는데 이는 객체지향적인 코드를 유도한다.
  2. 재설계 시간 단축
    • 작은 단위 별로 테스트를 진행하기 때문에 개발자는 정확하고 디테일한 목표를 가지고 개발을 시작하게 된다.
  3. 디버깅 시간 단축
    • 단위 테스트를 사용함으로서 딱 필요한 리소스만을 사용해 디버깅 시간을 단축시킨다.
  4. 쉬운 문서화
    • 정확한 테스트 근거와 결과를 산출할 수 있다.


단점


모든 방법론이 그러하듯 단점이 수반된다.


  1. 생산성 저하
    • 작성해야 하는 코드의 절대적인 양 자체가 늘어나기 때문에 개발 속도가 느려진다.
  2. 새로운 방식에 대한 부담감
    • 자신의 개발 방법론 자체를 바꾸는 일은 쉬운 일이 아니다.
  3. 규칙에 대한 부담감
    • restful api가 그러하듯 방법론이 주장하는 규칙들이 있다. 이런 규칙들은 때론 부담이 된다.
    • 당연히 방법론이기 때문에 개발자 저 마다의 방식이 존재할 것이다.

댓글남기기