본문 바로가기

ETC/TIP

TDD 테스트 주도 개발

작동하는 깔끔한 코드 (clean code that works). 론 제프리즈의 핵심을 찌르는 이 한마디가 테스트 주도 개발의 궁극적인 목표다.

작동하는(모든 테스트를 통과하는) 깔끔한 코드(중복성이 제거된)는 사실 모든 프로그래머가 지향하는 목표점이라 할 수 있다.

 

TDD는 기존의 프로그래밍 방식을 뒤엎는 개념이기 때문에 지속적인 훈련과 경험을 통해 올바른 습관을 쌓아가야 하며

당분간의 생산성 저하도 감내해야 한다.

TDD는 하나의 기술이지만 이면에는 사고의 근원적 변화가 있다.

테스터가 아닌 프로그래머가 자기 작업의 품질에 대한 우선적 책임을 진다는 것이다.

 

TDD의 프로그래밍 순서는 아래와 같다.

1. 빨강 - 실패하는 작은 테스트를 작성한다. 처음에는 컴파일조차 되지 않을 수 있다.

2. 초록 - 빨리 테스트가 통과하게끔 만든다.

3. 리펙토링 - 일단 테스트를 통과하게만 하는 와중에 생겨난 모든 중복을 제거한다.

 

TDD의 리듬은 5단계로 요약될 수 있다.

1. 재빨리 테스트를 하나 추가한다.

2. 모든 테스트를 실행하고 새로 추가한 것이 실패하는지 확인한다.

3. 코드를 조금 바꾼다.

4. 모든 테스트를 실행하고 전부 성공하는지 확인한다.

5. 리팩토링을 통해 중복을 제거한다.

 

묘미는 문제를 작은 단위로 쪼개고, 단순화 시켜 개발에 대한 막연한 모호함과 두려움을 제거하는 것에 있다고 느낀다.

호흡을 짧게 가져가고 한 순간에는 하나의 문제에 집중하게 해줄 수 있는 TDD라는 기술은 애자일 방법론과 맞물려 큰 시너지를 낼 수 있다고 생각한다.

 

TDD를 익히기 위해서는 일단 관련 서적을 한 권 읽어보는 것이 좋겠다.

최근에는 각 언어 또는 IDE별로 유닛 테스팅 프레임워크를 충실히 제공해주고 있기 때문에 개발 환경 구축에는 큰 어려움이 없는 듯 하다.


'ETC > TIP' 카테고리의 다른 글

[알고리즘] Dijikstra 최단경로 알고리즘  (0) 2014.03.04
Git Data Transport Commands  (0) 2014.03.03
바인딩이란?  (0) 2014.02.22
[펌] 개발자를 위한 그래픽 강좌 #1 - 버튼편  (0) 2014.02.22
Subversion(SVN) 용어 및 사용법  (0) 2014.02.22