TDD(Test Driven Development)의 정의와 효과

Goal

  • TDD의 정의 - ‘결정과 피드백 사이의 갭을 인식하는 것’을 이해할 수 있다.
  • TDD의 효과 - TDD는 언제, 어떻게 사용하면 좋을까
  • TDD를 활용하기 어려운 이유와 잘 하는 방법
  • 프로그래머 외의 사람들에게는 TDD는 어떤 의미가 있을까



[들어가기 전]

TDD란

TDD의 정의

구체적인 행동 레벨에서의 TDD의 개념

테스트를 먼저 만들고 테스트를 통과하기 위한 것을 짜는 것 즉, 만드는 과정에서 우선 테스트를 작성하고 그걸 통과하는 코드를 만들고를 반복하면서 제대로 동작하는지에 대한 피드백을 적극적으로 받는 것이다.

추상적인 레벨에서의 TDD의 핵심 개념(중요)

결정과 피드백 사이의 갭에 대한 인식, 더 나아가 결정과 피드백 사이의 갭을 조절하기 위한 테크닉이라고도 할 수 있다.

TDD의 효과

TDD를 왜 해야할까

애자일이란에서 설명한 것과 같이 불확실성이 높을 때 ‘피드백’과 ‘협력’이 중요하다.

TDD는 어떤 상황에서 해야할까

TDD의 효과

모든 애자일의 실천법은 피드백과 협력을 동시에 증진시킨다.

1. 피드백

2. 협력(이 부분이 핵심!)

TDD의 장단점

그렇다면 TDD는 왜 좋을까

피드백과 협력을 증진시키기 때문에 불확실성에 대해 대비를 하게 해준다.

TDD의 장단점

  1. TDD를 하면 개발 시간이 늘어난다.
    • 개발 시간의 정의?
      • 본인이 ‘다했다고’생각할 때까지, 기능 구현이 끝났을 때까지
    • 개발 시간이 TDD를 하지않을 때에 비해 대략 10~30%가 늘어난다.
  2. TDD를 하면 결함이 줄어든다.
    • 결함이 1/2~1/10 까지 줄어든다.
    • SW를 개발하면서 예상하지 못했던 시간을 많이 소요하는 것은 대부분이 버그 때문이다.
    • TDD를 하면 이런 버그를 줄일 수 있다.
  3. TDD를 하면 코드 복잡도가 떨어진다.
    • 엔트로피(Entropie)가 낮아진다.
    • 깨끗한 코드 가 나온다.
    • 유지보수 비용이 낮아진다.

TDD를 활용하기 어려운 이유와 잘 하는 방법

왜 다들 TDD를 활용하지 못할까? TDD를 하기 여려운 이유는 무엇일까?

  1. 개발 시간이 증가한다.
    • 많은 기업들이 단기적인 성과에 집중해 있다.
    • 전체 개발 시간을 줄이는 것보다 오늘 일을 끝내는 것을 강조하기 때문에 TDD 도입이 어렵다.
    • 단기적인 것에 집중되어 있으니.. 그때까서 또 고치면 되니까.. 고객이 화내면 안되니까.. 급한 불을 끄면서 허덕이면서 살기 때문에..
  2. TDD가 어렵다.
    • 왜?
      • 이제까지 자신이 개발하던 방식을 많이 바꿔야 하기 때문에
    • 몸에 체득한 것이 많을수록 바꾸기가 어렵다.
      • 언러닝(Unlearning): 이미 배운것을 까먹는 과정
    • TDD는 오히려 개발을 별로 안해본 사람에겐 적용하기가 쉽다.
  3. TDD는 이렇게 해야된다는 이미지/틀이 있다.(핵심)
    • ‘반드시 툴(단위 테스트 프레임워크)을 써서 이렇게 해야된다.’라고 생각한다.
    • 하지만 이런 규칙에 얽매이는 것은 애자일이 아니다.
    • 결국엔 규칙에 얽매여 똑같은 테스트를 copy&paste 한다.
    • 너무 도구/규칙에 집착하니까 TDD가 어려워지는 것이다.

TDD를 잘하는 방법?

적응적, 진화적으로 접근해야 한다.

프로그래머 외의 사람들에게 TDD는 어떤 의미가 있을까

프로그래머가 아닌 일반인은 TDD를 어떻게 사용할 수 있을까

프로그래머 외의 사람들에게 TDD는 어떤 의미가 있을까


관련된 Post


References