본문 바로가기
Software Engineering

TDD(Test-Driven Development)

by 차가운개발 2024. 10. 23.

 

테스트 주도 개발은 소프트웨어 개발 방법론 중 하나로, 실제 코드를 작성하기 전에 테스트 코드를 먼저 작성하는 방식이다. 이 접근법은 작은 단위의 테스트를 작성하고, 그 테스트를 통과하기 위한 최소한의 코드를 구현하는 과정을 반복한다.

이를 통해 요구사항을 명확히 하고, 코드 품질을 향상시키며, 버그를 조기에 발견할 수 있다.

 

ㅇ 기본 사이클 

TDD는 다음과 같은 세 가지 단계를 반복하는 짧은 개발 사이클을 따른다.

  • Red 단계
    실패하는 테스트를 작성한다. 아직 기능이 구현되지 않았기에 테스트는 실패해야 한다.
  • Green 단계
    테스트 통과를 위한 최소한의 코드를 작성한다. 완벽한 구현보다 테스트 통과에 초점을 맞춘다.
  • Refactor 단계
    코드와 테스트를 리팩토링하여 품질을 개선한다. 중복 제거, 가독성 높이기 등 최적의 설계를 추구한다.

 

ㅇ 장점

  • 품질 향상
    테스트를 먼저 작성함으로 요구사항을 정확히 이해하고 예상치 못한 버그를 줄일 수 있다.
  • 디자인 개선
    작은 단위로 개발하고 리팩토링하므로 코드 구조와 설계가 개선된다.
  • 유지 보수성 증가
    자동화된 테스트 스위트를 통해 코드 변경 시 기존 기능이 정상적으로 동작하는지 확인할 수 있다.
  • 개발 효율성 향상
    초기에 시간이 더 걸릴 수 있지만 장기적으로 버그 수정에 드는 시간을 절약하여 전체 개발 효율을 높일 수 있다.

 

ㅇ 한계와 고려

  • 학습 곡선
    TDD에 익숙하지 않은 개발자는 초기 도입 시 어려움을 겪는다.
  • 시간 투자
    테스트 코드를 작성하는데 추가 시간이 필요하며 프로젝트 일정에 영향을 미칠 수 있다.
  • 과도한 테스트 작성 위험
    모든 코드를 테스트하면 생산성이 떨어질 수 있으므로 중요 로직에 집중한다.
  • 디자인 경직성
    초기 설계에 문제가 있을 경우, 많은 테스트로 인해 구조 변경이 어렵게 느껴질 수 있다.

 

** TDD를 활용하는 이유

딱 봐도 귀찮아 보일 수 있지만 처음 시작하는 단계에서는 테스트 케이스 설계를 위한 초기 비용이 확실히 더 들게 된다. 하지만 전체 개발과정에 있어서 초기 비용보다 유지 보수 비용이 더 클 수 있다는 것을 명심해야한다. 

안정성이 필요한 프로젝트에서는 안정성을 개발 초기단계부터 확실히 다져놓고 가는 것이 중요하다.

유지보수 비용이 더 크거나, 안정성이 중요한 비행기, 배 등의 프로젝트의 경우 TDD가 활발하게 이루어진다.

 

출처: https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Software%20Engineering/TDD(Test%20Driven%20Development).md

'Software Engineering' 카테고리의 다른 글

Third Party  (2) 2024.10.23
DevOps  (1) 2024.10.23
OOP 객체 지향 프로그래밍(Object-Oriented Programming)  (1) 2024.10.23
애자일(Agile) 방법론  (1) 2024.10.23
클린코드 & 시큐어 코드 & 리팩토링  (0) 2024.10.23