본문 바로가기

개발

TDD

 코드를 작성하기 전에 테스트를 먼저 작성하고, 이 테스트가 통과되도록 코드를 개발하는 방법

TDD의 기본 사이클

  1. 테스트 작성: 실패하는 테스트 케이스를 먼저 작성, 추가하고자 하는 새 기능이나 수정할 버그를 명확하게 표현
  2. 코드 작성: 테스트를 통과하기 위한 최소한의 코드를 작성, 효율성보다는 테스트 통과에 집중
  3. 리팩토링: 코드를 개선하고 최적화, 이 과정에서 코드의 가독성을 높이고 유지보수를 용이하게 만듦

프론트엔드 개발에서의 TDD 적용

1. 유닛 테스트 (Unit Test)

  • 작은 단위의 코드, 함수나 컴포넌트 하나하나를 독립적으로 테스트
  • 각 유닛이 예상대로 동작하는지, 예외 처리가 적절한지, 반환 값이 정확한지 등을 검사
  • Jest, RTL 등 사용

2. 통합 테스트 (Integration Test)

  • 다양한 모듈이나 컴포넌트가 서로 잘 작동하는지 확인
  • API 호출이 컴포넌트에 데이터를 제대로 전달하는지, 다양한 컴포넌트 간의 데이터 흐름이 적절한지 등을 테스트
  • 통합 테스트는 유닛 테스트보다 더 큰 범위의 기능을 다루며, 모듈 간의 인터페이스를 중점적으로 검사
  • Jest, RTL 등 사용

3. 종단간 테스트 (E2E Test)

  • 사용자의 입장에서 애플리케이션의 전체 흐름을 테스트하여 실제 사용자 시나리오를 시뮬레이션
  • 예를 들어, 사용자가 로그인하고 특정 페이지로 이동한 후 데이터를 입력하고 결과를 보는 전체 과정을 테스트
  • 시스템의 모든 요소가 함께 잘 작동하는지를 확인하며, 프론트엔드와 백엔드 간의 통합 상태도 검사
  • Cypress, Paywright 등 사용

TDD의 장점

  1. 버그 감소: 개발 초기 단계에서 버그를 발견하고 수정함으로써, 나중에 복잡한 문제로 발전하는 것을 방지
  2. 리팩토링 용이성: 테스트 케이스가 이미 구현되어 있기 때문에, 코드를 리팩토링하거나 기능을 추가할 때 기존 기능이 손상되지 않는다는 확신을 가지고 작업 가능
  3. 개발자 신뢰성 향상: 테스트를 통과한 코드는 기능이 검증된 것이므로, 개발자는 코드의 안정성에 대해 확신을 가질 수 있음

고려해야 할 점

  • 시간과 자원: 테스트를 작성하고 유지하는 데 추가적인 노력이 필요
  • 테스트 커버리지: 테스트가 모든 가능한 시나리오를 커버하지 못할 수도 있으므로, 완벽한 테스트 커버리지를 기대하기 어려움

'개발' 카테고리의 다른 글

소스 코드 관리 전략(모노레포 vs 멀티레포)  (0) 2024.05.11
아키텍처(모놀리식 vs. MSA)  (0) 2024.05.11
프로그래밍 패러다임  (0) 2024.05.11
워터폴과 애자일  (0) 2024.05.11
브랜치 관리(Git Flow, GitHub Flow)  (0) 2024.05.11