Software Testing이란?
코드를 작성 후 기대하는 결과에 도달하는지 혹은 그렇지 못하는지 확인하는 절차
Build product Right vs Build Right product
Why Bother to Test?
- 결함의 식별 및 사전 방지를 통한 시간 절약
- 테스트 중 얻은 인사이트를 바탕으로 구조 및 품질 개선
- 확장성을 고려한 개발이 가능
Manual Testing
사람이 직접 테스트하는 방식
- 불안정성이 항상 존재
- 인력소모와 비용이 크다
- 테스트 속도가 느리다
Automation Testing
자동화 방식
- 안정성 향상
- 인력을 감축하고 비용이 감소한다
- 테스트 속도가 빠르다
- 확장성이 높다
시스템 테스트 전략 3가지
End-to-End(E2E) Tests
전체적인 Flow(ex. 브라우저 상 클릭 후 생기는 변화에 대한 검증)
Integration Tests(통합 테스트)
모듈 간의 호환성 검증(ex. 웹페이지 혹은 Postman을 통한 API 호출 시 올바르게 동작하는지 확인)
Unit Tests(단위 테스트)
독립적으로 진행되는 가장 작은 단위의 테스트(ex. 하나의 기능 또는 메소드)
- 테스트의 복잡도는 단위 > 통합 > E2E 순으로 증가한다
- 구글에서 제안하는 단위, 통합, E2E 테스트의 비율은 각각 7:2:1이다
단위 테스트 작성의 필요성
- 문제를 빠르게 파악할 수 있다
- 시간과 비용 절감
- 리팩토링 시 안정성 확보
(테스트 코드만 봐도 코드의 목적과 용도를 알 수 있다)
- 코드에 대한 문서로 활용