반응형
1. 소프트웨어 테스트
1-1. 소프트웨어 테스트란?
- 소프트웨어가 의도한대로 동작하는지를 테스트하는 행위를 의미
옛날에는 소프트웨어가 올바르게 동작하는지를 확인하는 테스트팀이 별도로 존재하며, 개발자는 테스팅 과정에 대해서는 큰 관여를 하지 않았다. 최근에는 개발자가 자동화 할 수 있는 소프트웨어 테스트를 구현하고 실행하는것이 보편화고 있다.
자동화 된 테스트란 사람이 아닌 컴퓨터를 통해서 소프트웨어를 테스트하는 것을 의미한다.
1-2. 소프트웨어를 통한 자동화 된 테스트의 이점
- 컴퓨터를 통해서 실행하기에 사람이 실행하는 것보다 빠르다.
- 정해진 스크립트에 따라 일관성있게 동작하기에 사람이 테스트 할 경우 발생할 수 있는 휴먼에러를 기피할 수 있다.
- 가장 큰 이점은 “피드백을 빠른 주기로 개발 중에 받을 수 있다" 이다.
그래서 개발자가 소프트웨어 테스트를 작성하고 이를 실행하며 개발을 할 경우에는
- 만들어진 개발중인 소프트웨어가 정상적으로 동작하는지를 수시로 확인할 수 있다.
- 피드백을 받는 주기가 굉장히 빠르다. 따라서 거의 실시간으로 소프트웨어의 동작에 대해서 피드백을 받으며 올바른 방향으로 수정해나갈 수 있다.
- 소프트웨어가 최소한 작성한 테스트 코드 안에서는 제대로 동작한다는 확신을 가질 수 있게 된다. 이는 곧 개발자의 생산성 향상을 야기합니다.
- 자동화 된 테스트는 추후 CI/CD와 같은 프로세스에서도 해당 소스코드들이 정상적으로 동작하는지 확인하는 과정에서 사용할 수 있는 등 다방면으로 활용할 수 있다.
2. 소프트웨어 테스트의 종류
소프트웨어 테스트는 테스트가 확인하고자 하는 범위, 복잡성에 따라서 크게 3가지 종류로 나눌 수 있다.
1) Unit Test (단위 테스트)
- 테스트 중에서 가장 로우 레벨이며, 가장 작은 범위를 테스트
- 개별 함수, 메서드, 클래스, 컴포넌트 등의 동작을 테스트한다.
- 제일 간단한 형태의 테스트로 실행하는데 가장 적은 비용이 든다. 따라서 개발 과정에서 가장 빈번하게 수행할 수 있는 테스트입니다.
2) IntegrationTest (통합 테스트)
- 두개 이상의 모듈이 결합해서 동작을 잘 수행하는지에 대한 테스트
- 여러 모듈들을 통합하는 과정이 필요하기에 유닛 테스트보다는 많은 비용이 드는 테스트
예를들어 컴포넌트 안에서 렌더링이 정상적으로 되는지만을 테스트한다면 이는 개별 컴포넌트에 대한 유닛 테스트이지만, 이 컴포넌트가 Redux등의 상태관리 라이브러리와 통합했을 때 두 모듈이 잘 어우러져서 최종적으로 의도한 결과를 도출하는지 테스트하는 것은 통합 테스트라고 할 수 있다.
3) End - to - End Test (E2E Test)
- 실제 유저가 애플리케이션을 사용하는 것과 유사한 환경을 구축한 후 실제 유저의 동작을 흉내내서 테스트하는 것
- 실제 유저의 동작 흐름을 그대로 모방해서 테스트할 수 있다는 장점
- 환경을 구축해야 하며, 유저의 행동 시나리오를 구축해야 하기에 굉장히 비싼 테스트
- 따라서 실제 개발 환경에서 소스코드에 변화가 있을때마다 빈번하게 수행할 수는 없다.
- 대부분 핵심 기능에 대해서 E2E 테스트를 구축 한 후 확인이 필요한 순간에만 실행하는 것이 일반적
프론트엔드에서의 E2E 테스트는 실제 브라우저와 유사한 환경을 구축 한 후, 거기서 실제로 여러가지 이벤트를 발생시킨 후 일련의 과정을 테스트하는 방식으로 진행된다.
e.g. 회원가입 전체 플로우를 테스트
3. Jest & React Testing Library (RTL) 를 이용한 리액트 테스트
반응형
'Computer Sceience > etc.' 카테고리의 다른 글
TDD (Test Driven Development) - 테스트 주도 개발 (0) | 2022.11.03 |
---|---|
Design Pattern (MVC & Flux) (0) | 2022.10.28 |
의존성 / DIP / 의존성 주입 (0) | 2022.10.27 |
횡단 관심사 (Cross-cutting-concerns) (0) | 2022.10.26 |