TDD 에 대하여
TDD 테스트 주도 개발에 대하여
개요
TDD란 ‘Test Driven Development’ 의 줄임말로 번역하자면 테스트 주도 개발이다.
개발 방법론 중의 하나이며, 모든 방법론이 그러하듯 이름이 추상적이기 때문에 정확한 시스템을 파악하기 어렵다.
이해하기 쉽게 표현하자면 실제 코드를 개발하기 전에 로직별로 한 단위로 나누어 테스트 하는 개발 방식을 뜻한다.
여기서 한 단위로 나누어 테스트 하는 것을 ‘unit test’ 즉 단위 테스트라고 부른다.
TDD를 이해하기 위해선 Unit test를 이해하는 것이 먼저이다.
Unit test
- 일반적으로 한 단위란 하나의 객체
단위 테스트란 하나의 객체별로 나누어 테스트를 하는 것을 의미한다.
예를 들어 가계부 서비스가 존재하고, 해당 서비스 안에 사칙연산이 가능한 계산기가 존재한다고 생각해보자.
이 때 계산기 클래스 안에 존재하는 사칙연산 함수들을 각 함수별로 테스트 하는 것을 단위 테스트라고 이해하면 된다.
단위 테스트의 장점
- 안정적으로 리팩토링 할 수 있다.
- 개발 및 테스팅에 대한 비용 감소
- 전체 서비스를 테스트 하기 위해서는 확인하고자 하는 기능 외의 리소스들이 많이 필요하다.
- 코드 수정 및 개발 속도 향상
단위 테스트 규칙
단위 테스트는 다음과 같은 다섯 개의 규칙을 가진다.
- Fast : 빠른 테스트가 가능해야 한다.
- independent : 각각의 테스트는 서로 의존하지 않아야 하며 독립성이 유지되어야 한다.
- Repeatable : 반복 가능해야 한다.
- Self-Validating : 테스트는 자체적으로 검증 되어야 한다.
- Timely : 테스트 시점은 실제 코드를 구현하기 직전이 되어야 한다.
TDD
TDD의 테스트 방식
- 실패하는 단위 테스트 작성
- 테스트를 통과하기 위한 프로덕션 코드 작성
- 가짜로 구현하거나, 여러 테스트 코드를 작성하는 등의 여러 방법이 존재한다.
- 실패 테스트가 없을 경우 성공 테스트 작성
- 새로운 테스트를 통과하기 위해 프로덕션 코드 추가 또는 수정
- 1~4단계를 반복하여 모든 케이스를 테스트
- 테스트를 통과한 코드들에 대하여 리팩토링을 수행
장점
왜들 그렇게 TDD를 외치는지 알아보자.
- OOP한 코드 생산
- 테스트 설계 규칙에 따라 독립성, 반복성을 지키게 코드를 설계할 수 밖에 없는데 이는 객체지향적인 코드를 유도한다.
- 재설계 시간 단축
- 작은 단위 별로 테스트를 진행하기 때문에 개발자는 정확하고 디테일한 목표를 가지고 개발을 시작하게 된다.
- 디버깅 시간 단축
- 단위 테스트를 사용함으로서 딱 필요한 리소스만을 사용해 디버깅 시간을 단축시킨다.
- 쉬운 문서화
- 정확한 테스트 근거와 결과를 산출할 수 있다.
단점
모든 방법론이 그러하듯 단점이 수반된다.
- 생산성 저하
- 작성해야 하는 코드의 절대적인 양 자체가 늘어나기 때문에 개발 속도가 느려진다.
- 새로운 방식에 대한 부담감
- 자신의 개발 방법론 자체를 바꾸는 일은 쉬운 일이 아니다.
- 규칙에 대한 부담감
- restful api가 그러하듯 방법론이 주장하는 규칙들이 있다. 이런 규칙들은 때론 부담이 된다.
- 당연히 방법론이기 때문에 개발자 저 마다의 방식이 존재할 것이다.
댓글남기기