Study/TDD

TDD - 테스트 범위와 종류

hou27 2023. 2. 21. 18:26

이전 포스트

TDD - 테스트가 가능한 설계

 

TDD - 테스트가 가능한 설계

이전 포스트 https://hou27.tistory.com/entry/TDD-%EB%8C%80%EC%97%AD TDD - 대역 이전 포스트 https://hou27.tistory.com/entry/TDD-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%BD%94%EB%93%9C%EC%9D%98-%EA%B5%AC%EC%84%B1 TDD - 테스트 코드의 구성 이전 포

hou27.tistory.com

 

실습 환경

- Java 17

- Spring Boot 3.0.1

- wsl 2

 

 

테스트 범위

테스트의 목적과 수행하는 사람에 따라 테스트의 범위는 달라진다.

  • 기능 테스트
  • 통합 테스트
  • 단위 테스트

크게 위 3가지로 나눠볼 수 있는데,

 

지금부터 각각 어떤 테스트를 말하는 건지 살펴보도록 하겠다.

 

기능 테스트(인수 테스트)

기능 테스트란 사용자 입장에서 시스템이 올바르게 동작하는지 확인하는 테스트이다.

즉, 시스템에 필요한 모든 구성 요소가 필요한 것이다.

 

사용자가 직접 사용하는 웹 브라우저 또는 모바일 앱부터 시작하여

DB, 외부 api까지 모든 요소를 동작시키며 진행한다.

끝에서 끝까지 테스트한다고 해서 E2E (End to end) 테스트로 볼 수도 있다.

 

통합 테스트

통합 테스트는, 시스템의 각 구성 요소가 올바르게 연동되는지 확인하는 테스트이다.

기능 테스트에서 사용자 입장에서 테스트했다면

이번엔 소프트웨어의 코드를 직접 테스트한다.

 

예를 들어 회원 가입 코드에 대한 통합 테스트라면

해당 로직 혹은 SQL 쿼리가 의도한 대로 동작하는지, DB 트랜잭션이 잘 동작하는지 등을 체크한다.

 

단위 테스트

단위 테스트는 개별 코드가 의도한 대로 동작하는지 확인하는 테스트이다.

지금까지 이전 장에서 해왔던 테스트를 단위 테스트라고 할 수 있다.

하나의 클래스 또는 메서드와 같이 작은 범위를 테스트한다.

일부 의존 대상은 대역을 통해 대체하기도 한다.

 

 

테스트 범위 간 차이

기능 / 통합 테스트단위 테스트와 달리 준비할 것이 많고 실행 시간이 길다.

 

통합 테스트는

DB 연결, 서버 구동을 기본으로 브라우저나 앱을 구동하고 알맞은 상호작용을 해야 하기 때문에

테스트 실행 속도를 느리게 만드는 요인이 많지만

 

단위 테스트는

의존 대상은 대역으로 처리하면 되므로 실행 속도가 빠르다.

 

테스트 코드를 작성하다 보면 단위 테스트를 더 많이 작성하게 되는 경향이 있는데,

각 테스트의 차이가 있고, 확인할 수 있는 것이 다르기 때문에

반드시 통합 테스트도 필요하다.

 

 

 

테스트 실행 속도가 빠른 순으로 나열해 보자면

단위 > 통합 > 기능 테스트 순이다.

테스트 실행 시간이 증가한다면 피드백이 느려진다는 뜻이기 때문에

결국 소프트웨어의 품질 저하로 이어질 수 있다.

 

즉, 

각 테스트에서 다루는 내용의 중복을 줄이고,

기능 또는 통합 테스트에선 주요 상황을 다루며

단위 테스트에선 다양한 상황을 다루는 식으로 

 

테스트 실행 시간을 줄이는 게 바람직하다.

 

 

 


참고자료

 

테스트 주도 개발 시작하기

'Study > TDD' 카테고리의 다른 글

TDD - 테스트가 가능한 설계  (0) 2023.02.14
TDD - 대역  (0) 2023.02.08
TDD - 테스트 코드의 구성  (0) 2023.02.03
TDD - JUnit 5 기초  (0) 2023.01.25
TDD - TDD ∙ 기능 명세 ∙ 설계  (2) 2023.01.16