[TDD] 1. TDD란?

Choi Sang Rok·2022년 4월 28일
3

MVI, Paging, Deep link 에 대해 스터디 하기 전에 TDD에 대한 내용을 이해하고 가면 관심사의 분리 등, 코드 개발에 도움이 될 것 같아 TDD를 먼저 알아보게 되었습니다.



🤷‍♀️TDD란?


Test Driven Development의 약자로 [테스트 주도 개발] 이라는 뜻 입니다.
즉, “테스트가 개발을 이끌어 간다” 라는 모토입니다. 이름부터 테스트를 중시하고 있음을 알 수 있고, 실제로도 테스트가 우선입니다.

단순히 안드로이드, 서버 등 한 분야에서만 사용되는 것이 아닌 소프트웨어 방법론의 하나 입니다.

작은 단위의 테스트 케이스를 작성하고, 이를 통과하는 코드를 추가하는 단계를 반복해서 구현하는 개발 방법론 이라고 할 수 있습니다.

짧은 개발 주기(스프린트)의 반복에 의존하는 개발 프로세스로, XP에서 가장 중요한 실천 방안 중 하나 입니다.


♻TDD 개발 주기



위 그림은, TDD의 개발 주기를 표현했습니다. 위 이미지에서 보는 것처럼, TDD 개발 주기는 저 3단계를 반복합니다.

  1. Write a failing test : 실패하는 테스트 코드를 먼저 작성합니다. 실패하는 코드를 먼저 작성함으로써 기대되는 바를 보다 명확하게 정의하고 불필요한 설계를 피할 수 있습니다.
  2. Make the test pass : 테스트 코드를 성공시키기 위한 실제 코드를 작성합니다.
  3. Refactor : 중복 코드 제거나, 일반화 등의 Refactoring을 수행할 수 있습니다.


🥊 VS 폭포수 모델


전통적 개발 프로세스인 [폭포수 모델]에 대해 알고 계신가요?

  1. 요구사항 분석
  2. 설계
  3. 개발
  4. 테스트
  5. 배포

의 개발 주기를 가지고 있는데, 위 방식은 작업량을 예측하기 힘들고, 변화에 민감하지 못하는 등 많은 단점을 가지고 있습니다.

요구 사항에 민감해야 하고, 민감하고 개방적인 최근의 개발 프로세스는
애자일 개발 프로세스로 향하고 있습니다.

💡 갑자기 비교한 이유는,
TDD는 애자일 개발방법론의 하나인 XP의 중요한 실천 항목 중 하나 이기 때문입니다.



⭕TDD 개발 방식의 장점


  • 보다 튼튼한, 객체 지향적 코드 생산 기능 별 철저한 모듈화, 관심사의 분리가 이루어지므로 종속성과 의존성이 낮은 모듈로 조합된 소프트웨어 개발을 가능하게 합니다.
  • 재 설계 시간의 단축 내가 지금 무엇을 해야 하는지 분명히 정의하고 개발을 시작하게 됩니다. 또한 시나리오를 작성하면서 다양한 예외 상황에 대해 생각해 보게 되므로 완성도 높은 설계로 이어집니다. 이는 곧 미래의 유지보수 비용을 줄이게 됩니다.
  • 디버깅 시간의 단축 통합 테스팅이 아닌 유닛 테스팅을 진행하게 된다면 특정 버그를 쉽게 찾아낼 수 있어 디버깅 시간을 단축 시킵니다.
  • 테스트 문서의 대체 가능 테스팅을 자동화 시킴과 동시에 정확한 테스트 근거를 산출할 수 있어 테스트 코드 자체로도 하나의 문서가 되거나 자료가 될 수 있습니다.
  • 추가 구현의 용이함 첫 번째 내용과 연계되는데, 종속성과 의존성이 낮은 모듈로 조합된 소프트웨어이기 때문에 관심사의 분리가 철저하게 되어 있습니다. 따라서 추가 구현에 긍정적인 영향을 끼칩니다.


❌TDD 개발 방식의 단점


단점은 조금 애매합니다. 소프트웨어의 목적, 규모에 따라 달라진다고 볼 수 있습니다.

  1. 테스트 코드가 feature에 포함되는 경우 : 테스트 코드를 작성하는 것 자체가 생산성에 영향을 주므로 생산성이 오히려 증가합니다.
  2. 코드의 규모가 작은 경우 : 테스트 코드의 작성이 생산성을 떨어뜨릴 수 있습니다.
  3. 품질이 중요하지 않은 경우 : 품질에 그렇게 큰 비중을 두지 않는 SI의 경우에는 테스트 코드의 작성이 단점으로 작용할 수 있습니다.

💡 TDD 라는 개발 방식 자체에 모순이 생기는 경우가 있다고 합니다.
테스트 코드 작성이 어려울 때, 작성하는데 드는 비용이 상당하다고 판단될 때, 이런 경우
원칙을 지켜야 한다는 강박 관념 때문에 이러지도 저러지도 못한다고 합니다.


참고 자료
https://hanamon.kr/tdd란-테스트-주도-개발/
https://velog.io/@hanblueblue/spring-boot-테스트-코드-작성하기-2.-TDD

profile
android_developer

2개의 댓글

comment-user-thumbnail
2022년 4월 28일

폭포수 모델은 제가 잘 알고있습니다! 정처기 공부하면 매일 그 부분만 공부하거든요😏

답글 달기
comment-user-thumbnail
2022년 4월 28일

다음부터는 3줄 요약 부탁드립니다.

답글 달기