TDD

2020. 4. 1. 17:49코드 품질 관리

TDD란

TDD의 개념

TDD(Test Driven Development)란 테스트를 먼저 만들고 테스트를 통과하기 위한 코드를 만드는 방법을 의미합니다. 일반적으로는 SW개발을 할 때 코딩을 전부 끝낸 후에 테스트를 진행합니다. 이 순서를 역전시킨 것이 TDD를 적용하는 것입니다. SW를 만드는 과정에서 우선 테스트를 작성합니다. 그리고 테스트를 통과하는 코드를 만드는 것을 반복하면서 제대로 동작하는지에 대한 피드백을 적극적으로 받는 것입니다.

TDD가 필요한 이유

  • 특정 모듈의 개발 기간이 길어질수록 목표 의식이 흐려집니다.
  • 작업 분량이 늘어날수록 확인이 어려워집니다.
  • 논리적인 오류를 찾기 어렵습니다.
  • 코드의 사용 방법이나 변경 이력을 개발자의 기억력에 의존하게 되는 경우가 대부분입니다.
  • 코드 수정 시에 기존 코드의 정상 동작에 대한 보장이 어렵습니다.
  • 테스트를 위해서 선행 작업이 필요할 경우 존재합니다.
  • 회귀 테스트를 수행하기 어렵습니다.

TDD의 장점과 단점

TDD의 장점

  • 작업과 동시에 테스트를 진행함으로써 실시간 오류 상황을 파악하여 시스템 결함을 방지
  • 짧은 개발 주기를 통해 고객의 요구 사항을 빠르게 수용하거나 피드백을 줄 수 있고 현재 진행 상황을 쉽게 파악
  • 자동화 도구를 이용해 TDD의 테스트 케이스를 단위 테스트로 사용이 가능
  • 테스트는 요구 사항에 맞추어 작성하므로 개발자가 보다 요구사항에 집중할 수 있음

TDD의 단점

  • 기존의 개발 프로세스에 테스트 케이스 설계까지 추가되므로 코드 생산 비용이 높아짐
  • 어떻게 테스트할 것이며, 프로젝트 성격에 따른 테스트 프레임워크 선택 등 여러 부분에 대한 고려가 필요
  • 동시성이 걸려있는 코드에 대한 테스트 케이스 작성을 할 때, 테스트 자체를 무결성있게 유지하기가 어려움

TDD를 활용하지 못 하는 이유

  • 많은 기업들이 단기적인 성과에 집중하다 보니 전체 개발 시간을 줄이는 것보다 오늘 일을 끝내는 것을 강조합니다. 이 때문에 TDD 도입이 어렵습니다.
  • TDD로 개발하지 않던 사람들이 자신이 개발하던 방식을 많이 바꾸어야 하기 때문에 TDD 도입이 어렵습니다. 이 때문에 TDD는 오히려 개발을 별로 안 해본 사람에게 적용하기가 더 쉽습니다.
  • TDD는 ‘반드시 툴(프레임워크)를 써서 이렇게 해아한다.’라고 생각하게 하는 이미지 / 틀이 있기 때문입니다. 이러한 도구와 규칙에 집착하다 보니 TDD가 어렵게 느껴집니다.
728x90

'코드 품질 관리' 카테고리의 다른 글

BDD  (0) 2020.04.02
Given-When-Then 패턴  (0) 2020.04.01
System Test  (0) 2020.03.29
Integration Test  (0) 2020.03.29
Code Coverage  (0) 2020.03.28