개발자 테스트의 장단점
- 장점
- 예상 동작과 실제 동작을 빠르고 정확하게 테스트 가능하다
- 테스트의 자동화가 가능하다
- 리팩토링 후 기존 동작에 문제가 없는지 보장해 준다.
- 단점
- 테스트 코드 작성 시간이 추가되어 개발 시간이 오래 걸림
- 코드가 변경되면 테스트 코드도 이에 맞추어 변경해야 하므로 테스트코드를 유지보수하는 비용이 추가된다.
단위 테스트
단위 테스트란
단위 테스트는 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트이다. 모듈이란 애플리케이션에서 작동하는 하나의 기능 또는 메소드이다. 일반적으로 실무에서 테스트 코드는 단위 테스트를 의미한다.
단위 테스트 작성의 필요성
- 문제 발생 시 어느 부분이 잘못되었는지를 빠르게 확인할 수 있다.
- 프로그램을 작은 단위로 쪼개 각 단위가 정확하게 동작하는지 확인 할 수있다.
- 리펙토링하여도 빠르게 문제 여부를 파악해 안정성을 확보할 수 있다.
- 테스트에 대한 시간과 비용을 절약할 수 있다.
단위 테스트의 특징
일반적으로 요구 사항은 계속해서 변하므로 이에 따라 코드 및 테스트 코드도 변경되어야 한다. 따라서 테스트 코드는 가독성이 있게 작성하는 것을 기본으로 해야 한다.
- 1개의 테스트 함수에 대해 assert를 최소화한다.
- 1개의 테스트 함수는 1가지 개념만 테스트 한다.
좋고 깨끗한 테스트 코드는 FIRST라는 규칙을 따라야 한다.
- Fast : 테스트는 빠르게 동작하여 자주 돌릴 수 있어야 한다.
- Independent : 각각의 테스트느독립적이며 서로 의존해서는 안된다.
- Repeatabele : 어느 환경에서도 반복 가능해야 한다.
- Self-Validationg : 테스트는 bool 값으로 결과를 내어 자체적으로 검증되어야 한다.
- Timely : 실제 코드를 구현하기 직전에 구현해야한다.
통합 테스트
통합 테스트란
일반적으로 애플리케이션은 여러 개의 모듈들로 구성이 되고, 모듈들끼리 메세지를 주고 받으면서 기능을 수행한다. 따라서 통합 테스트는 두 개 이상의 모듈이 연결된 상태에서 테스트하는 것을 말한다.
통합 테스트의 특징
- 모듈 간의 연결에서 발생하는 에러를 검증 가능하다
- 단위 테스트보다 많은 코드를 테스트하므로 문제 발생 위치를 찾는 것이 어렵다.
- 여러 모듈이 동시 다발적으로 테스트를 수행하므로 일반적으로 교육받은 전문 테스터와 함께 하게된다.
통합 테스트의 종류
- 빅뱅 접근법
- 시스템을 구성하는 모듈을 각각 따로 구현하고 전체시스템을 한번에 테스트하는 방식
- 테스트를 위한 Driver나 Stub없이 실제 모듈들로 진행
- 단시간 테스트를 수행 할 수 있다.
- 결함의 격리가 어렵다.
- 점증적 접근법
- 상향식
- 최하위 모듈을 통합후에 상부의 모듈부터 순차적으로 테스트하는 방식
- 테스트 드라이버로 테스트 진행
- 결함 격리가 쉽다.
- 하향식
- 최상위 모듈부터 통합한 후 하부의 모듈부터 테스트를 순차적으로 진행하는 방식
- 스텁으로 테스트 진행
- 결함 격리가 쉽다.
- 샌드위치 접근법
- 상향식과 하향식의 장점을 이용하는 방식
- 대규모 프로젝트에 사용한다.
- 병렬 테스트가 가능하고 시간 절약이 가능하다.
- 스텁과 드라이버의 필요성이 매우 높은 방식
- 비용이 많이 들어간다.
Driver
컴포넌트나 시스템을 제어하거나 호출하는 컴포넌트를 대체하는 소프트웨어 컴포넌트.
상위 모듈 없이 하위 모듈이 있는 경우 > 하위 모듈 구동
Stub
골격만 있거나 특별한 목적의 소프트웨어 컴포넌트를 구현한 것
상위 모듈 있지만 하위 모듈 없는 경우 > 하위 모듈 대체
통합 테스트 절차
- 통합 테스트 계획을 준비한다.
- 테스트 시나리오, 사례 및 스크립트를 설계한다.
- 결함들을 보고한 다음에 테스트 사례를 실시한다.
- 결함들을 추적하고 다시 테스트한다.
- 통합이 완료될 때 까지 4,5를 반복한다.
E2E 테스트
E2E(end to end) 테스트란
테스트를 사용자 관점에서 테스트하는 방법으로 실제 사용자의 실행 환경과 거의 동일한 환경에서 테스트를 진행하는 것을 말한다. Endpoint 간 테스트로 사용자의 입장에서 사용자가 사용하는 상황을 가정한다.
예를 들면 버튼을 클릭할시 올바른 동작을 수행하는지 url이 제대로 나타나는지 등의 테스트이다.
E2E 테스트의 특징
- 일반적으로 웹이나 어플에서 GUI를 통해 테스트를 수행한다.
- 사용자가 직접적으로 사용하는 부분을 점검한다.
- 사용자의 관점에서 테스트가 가능하다.
- 다양한 앱의 의존관계가 정확이 작동하는지 확인 할 수 있다.