테스트 코드, 예외 처리
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와 테스트의 중요성을 인지하고 이를 활용하는 것이 필요하다.