테스트 코드, 예외 처리

TDD(Test-Driven-Development) 테스트 주도 개발

korea-wongi 2024. 6. 16. 13:16

테스트와 TDD의 기본 개념

  • 테스트 : 제품이나 시스템의 성능, 오류 여부를 확인하는 과정
  • TDD : 테스트 코드를 먼저 작성한 후 실제 코드를 작성하는 개발 방법론

테스트의 중요성

  • TDD의 방법론 보다는 테스트를 작성하는 것 자체가 더 중요하다
  • 테스트의 목적 : 코드의 품질을 보장하고, 버그를 발견하며, 리팩토링과 유지보수를 용이하게 한다.

테스트의 중요성

  • 수동 테스트 : 사람이 직접 테스트하는 방법. QA가 주로 수행
  • 자동 테스트 : 코드로 작성된 테스트를 통해 자동으로 수행. Pytest, JUnit 등 도구 사용

수동 테스트의 단점

  • 실수와 누락 가능성
  • 반복 작업으로 인한 비효율성
  • 마음의 불안함

자동 테스트의 장점

  • 반복 작업을 줄여 효율성 향상
  • 버그 발견과 코드 품질 향상
  • 유지보수와 협업이 용이함

테스트 커버리지

  • 코드 커버리지 : 코드의 테스트 정도를 나타내는 지표. 높다고 반드시 안정성을 보장하지는 않음
  • 적절한 커버리지 목표 : 특정 수치에 도달을 목표로 잡기 보다는 적절한 테스트 범위를 설정하는 것이 중요하다.

TDD의 프로세스

  • 작성(Fail) : 테스트 코드를 작성하고 실패하도록 만든다.
  • 통과(Pass) : 최소한의 코드로 테스트를 통과시킨다.
  • 개선(Refactor) : 리팩토링을 통해 코드를 개선한다.

TDD의 장단점

  • 장점 : 
    • 회귀 방지
    • 효율적인 설계 유도
    • 에러 발생 가능성 최소화
  • 단점 : 
    • 학습곡선이 존재
    • 적용 시간 소요
    • 불필요한 테스트 작성 가능성이 있다
    • 오히려 오류를 증가시킬 가능성이 있다.

테스트 구조

  • given(준비) : 테스트 대상 및 협력자 준비
  • when(실행) : 테스트 대상 실행
  • then(검증) : 예상 결과와 실제 결과 검증

다양한 테스트 기법

  • 단위 테스트 : 작은 단위로 독립적으로 테스트
  • 통합 테스트 : 여러 요소를 복합적으로 테스트
  • E2E 테스트 : 시스템 전체를 처음부터 끝까지 테스트
  • 인수 테스트 : 최종 환경과 유사한 상태에서 테스트

테스트의 궁극적인 목표

  • 코드의 회귀 방지와 잠재적 오류 발견
  • 테스트 통과 후 운영 코드 배포
  • Github Action, Bitbucket Pipeline 등 도구를 통해 자동화 가능

결론 : TDD는 완벽하지 않다. 완벽한 방법론은 아니지만, TDD와 테스트의 중요성을 인지하고 이를 활용하는 것이 필요하다.