Study2
by
180212 재미 그래밍 3기
파이썬을 이용한 테스트 주도 개발 (TDD)
TDD
- 번역을 그대로 하면 ‘테스트 주도 개발’이지만, ‘테스트 우선 개발’이라는 표현으로 이해하는 것이 더 좋다!!
왜 TDD를 해야하는가??
-
일반적인 개발 프로세스
- 일반적인 개발 절차는 먼저 어떻게 개발할지 디자인하고 디자인을 바탕으로 실제 코드를 작성하고 최종적으로 테스트를 작동시켜보면서 해보는 과정이었다.
-
TDD(Test-driven Development)
- RED : 실패하는 테스트를 만들기
- GREEN : 테스트에 통과할 만한 작은 코드를 작성하기
- REFACTOR : 반복되는 코드, 긴 메소드, 큰 클래스, 긴 매개변수 목록 등등 코드를 좀 더 효율적으로 바꾸기
TDD != 단위 테스트
TDD != 테스팅 전략
TDD == 개발 기법 (개발 방법론 중의 하나)
반증가능성의 의미
-
TDD는 개발자로 하여금 내 코드의 논리적 반증가능성을 사유하게 해준다
-
반증가능성이란, 가설 A가 실험이나 관찰에 의해서 반증될 가능성이 있다는 것을 의미한다.
- 예) 언젠가 외계인이 침공할것이다!! - 반증가능성이 없다.
- 예) 무게가 있는 모든 물체는 아래로 떨어진다 - 반증가능성이 있다. (무중력 상태에서는 가능)
실제 코드를 작성하기 전에 테스트 코드부터 작성하기 때문에 자연스럽게 가설에 이용할 데이터를 여러가지로 생각하게 된다. 실제 서버에 반영할 때 TDD를 진행하면서 만든 테스트 코드들은 추후에 안전장치 역할을 해준다. 내가 미처 생각하지 못한 반증에 대해 작성한 많은 테스트 코드들은 내가 세운 가설들을 검증한다.
TDD의 장점
-
개발자가 찾아내지 못한 반증에 대해 안전장치 역할을 하면서 서비스를 안정적으로 운영하게 한다
-
유지 보수가 쉽다
-
개발자가 의도한대로 코딩이 진행된다
-
테스트는 문서가 된다
-
개발 소요시간이 줄어든다
결론
납기일이 정해져 있지 않고 끝없이 발전해야하고 최초설계가 여러번 바뀌며 지속적으로 버전이 올라가는 소프트웨어의 개발에서는 TDD로 생산성이 급격히 높아진다.
반대로 납기일이 정해져있고 설계대로 만들어져야하고 한번 만들어서 큰 변화없이 일정 수명정도만 가지는 소프트웨어의 개발에서는 TDD 제값을 못한다.
Subscribe via RSS