❗️ TDD란 ?
TDD란 Test Driven Development의 약자로 '테스트 주도 개발'이라고 한다.
반복 테스트를 이용한 소프트웨어 방법론으로, 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현한다.
❗️ TDD를 사용하는 이유
✅ 초기 버그 감지
기능을 구현하기 전에 테스트를 작성하면 개발 프로세스 초기에 버그와 문제를 파악하는 데 도움이 된다.
이렇게 하면 나중에 디버깅할 때 상당한 시간과 노력을 절약할 수 있습니다.
✅ 코드 신뢰도
TDD는 개발자에게 안전망을 제공하여 코드베이스 변경으로 인해 기존 기능이 중단되지 않도록 보장한다.
수정 시 테스트를 실행하여 모든 것이 여전히 예상대로 작동하는지 빠르게 확인할 수 있다.
✅ 튼튼한 객체 지향적인 코드 생산
TDD는 코드의 재사용 보장을 명시하므로 TDD를 통한 소프트웨어 개발 시 기능 별 철저한 모듈화가 이뤄진다.
이는 종속성과 의존성이 낮은 모듈로 조합된 소프트웨어 개발을 가능하게 하며 필요에 따라 모듈을 추가하거나 제거해도 소프트웨어 전체 구조에 영향을 미치지 않게 된다.
✅ 재설계 시간의 단축
테스트 코드를 먼저 작성하기 때문에 개발자가 지금 무엇을 해야하는지 분명히 정의하고 개발을 시작하게 된다.
또한 테스트 시나리오를 작성하면서 다양한 예외사항에 대해 생각해볼 수 있다. 이는 개발 진행 중 소프트웨어의 전반적인 설계가 변경되는 일을 방지할 수 있다
하지만 다들 좋다고하는 TDD에도 단점이 존재한다
그 중 가장 큰 단점은 바로 생산성의 저하이다.
처음부터 2개의 코드를 짜야하고, 중간중간 테스트를 하면서 고쳐나가야 하기 때문에
TDD 방식의 개발 시간은 일반적인 개발 방식에 비해 대략 10~30% 정도로 늘어난다고 한다.
❗️TDD 개발 주기
Red 단계에서는 실패하는 테스트 코드를 먼저 작성한다.
Green 단계에서는 테스트 코드를 성공시키기 위한 실제 코드를 작성한다.
Yellow 단계에서는 중복 코드 제거, 일반화 등의 리팩토링을 수행한다.
중요한 것은 실패하는 테스트 코드를 작성할 때까지 실제 코드를 작성하지 않는 것과, 실패하는 테스트를 통과할 정도의 최소 실제 코드를 작성해야 하는 것이다. 이를 통해, 실제 코드에 대해 기대되는 바를 보다 명확하게 정의함으로써 불필요한 설계를 피할 수 있고, 정확한 요구 사항에 집중할 수 있다.
❗️ TDD의 종류
✔️ 단위 테스트(Unit Test)
단위 테스트는 함수나 메서드와 같은 작은 단위의 코드를 테스트하는 데 중점을 두는 테스트 유형이다.
즉, 시스템의 전체적인 동작에 중점을 맞추지는 않는다. 단위 테스트의 목적은 코드의 각 단위가 예상대로 작동하고 요구 사항을 충족하는지 확인하는 것이다.
ex) 쇼핑몰에서 상품을 구매하는 경우, 단위 테스트는 구매 기능을 테스트할 때 고객의 잔액에서 상품의 금액 만큼 출금하는지, 구매 후 상품의 재고를 업데이트 하는지, 구매 영수증을 잘 생성하는지 각각 확인한다.
✔️ 통합 테스트(Integration Test)
통합 테스트는 시스템의 여러 단위 또는 구성 요소 간의 상호 작용을 검증하는 테스트 유형이다.
서로 다른 단위가 함께 동작하면서 흐름에 맞게 잘 동작하고, 예상한 결과를 생성하는지를 테스트한다.
ex) 쇼핑몰에서 상품을 구매하는 경우, 통합 테스트는 구매시 고객의 잔액, 재고 업데이트, 영수증 생성시 다른 구성 요소 간의 상호 작용이 잘 되어 구매가 완료되는지 확인한다.
✔️ E2E 테스트 (End-To-End Test)
E2E 테스트는 시스템의 시작부터 끝까지 전체 흐름을 확인하는 테스트 유형이다.
시스템이 예상대로 작동하고 사용자의 요구 사항을 충족하는지 확인하기 위해 모든 구성 요소와 해당 구성 요소의 상호 작용을 테스트하는 것이 포함된다.
ex) 쇼핑몰에서 상품을 구매하는 경우 고객이 상품을 선택하여 장바구니에 추가, 상품 구매, 결제 방식 선택, 구매 완료, 구매 영수증을 고객 메일로 전송까지의 단계가 사용자의 입장에서 전체 Flow가 정상적으로 동작을 하는지 확인한다.
'자바스크립트 - React.js' 카테고리의 다른 글
[React.js] TDD(Test-Driven-Development)방법론 사전 (2) | 2024.02.15 |
---|---|
[ReactQuery] useSuspenseQuery를 사용해서 Suspense 성능 개선 및 최적화를 해보자 ! (0) | 2023.12.16 |
[ReactQuery] useMutation과 useQuery에서 TypeScript 적용하기 (2) | 2023.11.07 |
[React.js] Recoil의 atom, atomfamily와 selector, selectorFamily에 대해서 알아보자 (0) | 2023.09.12 |
[ReactQuery] useMutation에 대해서 알아보자 ! (feat. Optimistic Updates, invalidateQueries) (0) | 2023.07.28 |