[TDD를 적용해보자 1편]TDD란?(Test-Driven-Development)

TwentyFiveSeven·2021년 1월 5일
2

TDD(Test-Driven-Development)란?

  • 테스트 주도 개발(Test-Driven-Development) : 테스트가 개발을 이끌어 나간다.

일반 개발 방식 VS TDD 개발 방식

이해하기 쉽게 일반 개발 방식과 TDD 개발 방식을 비교해보겠습니다.

일반 개발 방식

  • 우리가 일반적으로 개발하는 방식은 위 사진처럼 설계 -> 개발 -> 테스트 -> 배포의 형태를 갖습니다.
  • 이러한 개발 방식은 몇가지의 문제점을 발생시킵니다.
    1. 테스트가 실패하게 되면 매번 설계단계로 다시 돌아오게 되어 많은 시간이 소요됩니다.
    2. 작은 기능 수정에도 모든 부분을 함께 테스트해야하기 때문에 테스트 비용이 증가됩니다.


TDD 개발 방식

  • 일반 개발 방식과의 큰 차이점은 실패테스트 코드를 먼저 작성하고, 테스트 코드를 성공하기 위한 코드를 작성한다는 것입니다.
  • 필요하다면 재설계 후에 테스트 코드에 바로 적용할 수 있기 때문에 설계의 개선이 빠르고 쉽습니다.
  • 테스트코드에서 필요한 예외 사항들에대한 테스트를 추가하는 반복적인 단계가 진행되면서 코드의 버그를 자연스럽게 줄일 수 있습니다.

왜 TDD를 적용해야할까?

우선 TDD가 왜 필요한지 부터 알아봅시다.

  • TDD는 애자일한 방법으로 개발에 도움이 됩니다.
    • 애자일에서 중요한 것은 피드백협력입니다.
    • TDD 또한 피드백협력을 증진시키는 방식이고, 이는 곧 불확실성이 높은 작업에 도움을 주는 것입니다.

TDD를 모든 곳에 적용해야할까?

  • 이미 검증된 방법이고, 결과가 뻔한 작업이라면 TDD를 하지 않아도 됩니다.
  • 테스트해야하는 방식이 너무 복잡하지만, 얻을 수 있는 결과가 정말 보잘 것 없다면 하지 않는 것이 더 좋습니다.
  • TDD를 적용해야할 대표적인 상황들
    • 처음해보는 프로젝트의 주제
    • 고객의 요구조건이 얼마든지 바뀔 수 있는 프로젝트
    • 개발하는 사람과 유지보수하는 사람이 서로 다른 사람일 때
  • 즉 불확실성이 높을 때 TDD를 진행하면 됩니다.

TDD의 효과

애자일한 방법인 TDD는 피드백협력에 도움이 됩니다.

  1. 피드백
  • 테스트를 통해 작업의 성공/실패 유무를 결정하고 이에 따라 피드백을 얻을 수 있습니다.
  • 눈에 보이기 때문에 쉽게 알 수 있습니다.
  1. 협력✨
  • 일반적으로 테스트할 때 사용하는 방법은 다음과 같습니다.
    • 결과 찍어보기
    • 문자 출력해보기
  • 하지만 TDD는 기록으로 남깁니다.
    • 이말은 곧 다른사람들이 직접 테스트코드를 돌릴 수 있고, 결과를 확인할 수 있다는 것입니다.
  • 이러한 방식으로 개발을 진행한다면 다음과 같은 장점이 있습니다.
    • 코드를 통해 개발자의 의도를 파악하는 능력이 증가합니다.
    • 한번에 길고 많은양의 코드를 보는 것이 아니라 순서대로 이어지는 테스트코드를 보며 코드의 의도를 쉽게 파악할 수 있습니다.

TDD를 활용하기 어려운 이유

부스트캠프를 하면서 느낀 것은 TDD에 대한 필요성은 어느정도 강조해줬지만, 나 역시 그랬듯이 생각보다 시도조차 해보지 않은 사람들이 꽤 있었습니다.
왜 이러한 현상이 생겼고, 어떻게 TDD를 접근해야할지 알아가 봅시다.

  1. 개발 시간이 증가한다.
  • 대부분의 기업들은 단기적인 성과에 집중해있습니다.
  • 단기적인 성과에 집중하다보면 유지보수 측면을 놓치게 되고, 결국 테스트비용이 증가하게됩니다.
  1. TDD는 낯설다.
  • 일반 개발 방식을 고집해오던 '실패테스트코드 작성'은 시작부터 거부감이 드는 작업입니다.
  • 개발 방식의 변화를 학습하고 적응하기위해 노력한다면 TDD를 이해하고 장점을 느낄 수 있습니다.
  1. TDD의 방식은 정해져있다.
  • 정해진 규칙이 있기 때문에 결국에는 불필요한 반복되는 작업이라고 생각합니다.
  • TDD는 애자일한 방식이기 때문에 이러한 문제를 피드백협력을 통해 해결하고, 정해진 규칙에서 벗어난다면 다양하고 더욱 애자일한 방식이 될 수 있습니다.

TDD 잘해보기

적응, 진화의 측명으로 접근해봅시다.

  • 피드백협력의 측면을 어떻게 끌어올릴지 생각하고 고민하면서 발전해 나가야한다.
    • 간단한 예시는 자주 이뤄지는 피드백피드백을 통해 이뤄지는 협력입니다.
  • 피드백협력의 측면을 끌어올리는 방법은 TDD를 적용하는 것 입니다.
    • 어떤 작업이 3단계로 이루어져있습니다.
    • 3단계의 피드백을 얻기위해서는 1단계, 2단계 테스트도 함께 이루어져야합니다.
      • 이러한 방식은 테스트 비용을 증가시키게됩니다.
    • 때문에 TDD를 통해 3단계 테스트를 바로 진행할 수 있도록 개발하여 테스트 비용을 감소시킬 수 있습니다.
  • 중복적으로 하는 노력들을 자동화되도록 개발하여 발전할 수 있습니다.
profile
부지런한 웹개발자🌙

0개의 댓글