TDD(테스트 주도 개발)

고범규·2025년 11월 7일

CS

목록 보기
6/8

개발 방법론

폭포수 모델(Waterfall Model)

순차적 개발 과정, 각 단계를 선행적으로 진행

장점

  • 관리가 용이
  • 체계적인 문서화 용이
  • 요구사항의 변화가 적은 프로젝트에 적합

단점

  • 각 단계는 앞 단계가 완료되어야 수행 가능
  • 각 단계가 완벽하게 작성되어야 다음 단계에 오류를 넘기지 않음
  • 사용자가 중간에 가시적인 결과를 볼 수 없음

애자일 방법론(Agile Methodologies)

짧은 개발 주기(스프린트, Sprint)를 통한 반복적이고 점진적인 개발 방법, 유연성과 빠른 적응력을 갖춤

agile: 날렵한, 민첩한

애자일 프로세스 모델: 고객의 요구에 민첩하게 대응하고 그때그때 주어지는 문제를 풀어나가는 방법론

장점

  • 유연한 변화 대응
  • 빠른 피드백
  • 고객 만족도 향상
  • 개발 리스크 감소
  • 팀 커뮤니케이션 강화

단점

  • 문서화 부족
  • 고객 참여 부담
  • 일정 예측 어려움
  • 큰 조직에서 적용 어려움

eXtream Programming(XP)

미래에 대한 예측을 최대한 하지 않고, 지속적으로 포로토타입을 완성하는 애자일 방법론 중 하나

TDD(Test Driven Development)

'Test-First' 개념에 기반, 반복 테스트를 이용한 소프트웨어 방법론으로 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현

TDD 개발주기

Red 단계에서 실패하는 테스트 코드 작성
Green 단계에서 이를 보완한 실제 코드 작성
Blue 단계에서 리팩토링

장점

디버깅 시간 단축

  • 데이터가 잘못 나온다면 어느 레이어의 문제인지 몰라 전부 디버깅 해야하지만 TDD의 경우에는 어느 부분이 잘못됐는지 손쉽게 찾아냄

빠른 피드백

  • 인수 테스트를 할 때 이미 거의 완성된 코드로 테스트하기 때문에, 문제가 생겨도 정확하게 원인 파악이 힘듦
  • TDD는 기능 단위로 테스트를 하기 때문에 빠른 피드백 가능

재설계 시간 단축

  • 테스트 코드를 작성하기 때문에 당장 무엇을 해야하는지가 명확
  • 개발 진행 중 소프트웨어의 전반적인 설계가 변경되는 일을 방지

추가 구현 용이

  • 보통의 경우 기능을 추가하려면 기존 코드에 미치는 영향을 고려해야 함
  • TDD의 경우 자동화된 유닛 테스팅을 전제하므로 테스트 기간을 획기적으로 단축

단점

초기 개발 속도 저하

  • 테스트 코드를 작성해야 하므로 초반 개발 속도가 느림

유지보수 비용 증가

  • 기능이 자주 바뀌면 테스트 코드도 수정해야 하므로 테스트 관리 비용 증가

테스트 작성의 한계

  • UI, 그래픽, 네트워크 등 테스트하기 어려운 영역은 적용이 힘듦

생산성 저하

  • 테스트 코드 양이 실제 코드보다 많아지면 비효율적일 수 있음

유리한 경우

  • 복잡한 로직이 많은 시스템
  • 장기적인 유지보수가 필요한 프로젝트
  • 팀 규모가 큰 협업 프로젝트
  • CI/CD를 사용하는 환경
  • 요구사항이 명확하고 자주 바뀌지 않는 경우

Reference

0개의 댓글