프로그래밍을 할 때 코드만 작성하는 것이 아니라 그 코드가 제대로 작동 하는지 확인하는 테스트가 필수적이다. 테스트는 코드 작성 직후부터 시작되어야 하며 이는 자주 실행 되며 자동화된 방식으로 진행되는 것이 바람직하다.
실무에서 테스트의 중요성을 강조하는 가장 큰 이유 중 하나는 서비스 운영 중 발생하는 버그나 이슈에 대응하기 위함이다. 개발이 완료된 후에도 예상치 못한 상황이 발생했을 때, 만약 테스트가 부족했다면 보완하고, 아예 없었다면 새로 추가하는 것이 필요하다. 이러한 대응 능력은 테스트의 핵심 요건 중 하나라고 생각한다.
무엇을, 어떻게, 언제 테스트할 것인가?
테스트의 시작
코드를 작성한 직후에 테스트를 시작하고, 빌드 할때 마다 테스트를 실행하는 것은 효과적이며, 버그를 빠르게 발견하면 큰 비용 절감 효과가 있으므로 작은 단위로 코드를 작성하며 지속적으로 테스트하는 것이 바람직하다.
테스트의 중요성
개발 과정에서 테스트 코드를 함께 작성하면 제품의 완성도를 향상 시키며, 이로 인해 결함이 적은 제품을 만들 수 있고, 목표한 테스트를 통과하기 전까지는 개발이 완료된 것으로 볼수 있겠다.
테스트의 시기
제품에 포함될 코드는 작성 하자마자 테스트 하고, 테스트는 자동화 해서 주기적으로 실행되는 것이 좋다.
6가지 테스트 유형
- 단위 테스트: 하나의 모듈을 검증.
- 통합 테스트: 단위 테스트의 확장 버전으로 전체 시스템의 동작을 검증.
- 유효성 평가 및 검증: 사용자의 필요에 맞는 기능인지 검증.
- 자원 고갈, 에러, 복구: 실제 환경에서의 동작을 검증.
- 성능 테스트: 실제 환경에서의 성능을 검증.
- 사용자 편의성 테스트: 사용자 중심의 편의성을 검증.
4가지 테스트 방법
- 회귀 테스트: 이전과 현재의 출력 값을 비교하여 검증.
- 테스트 데이터: 실제 데이터와 가상의 데이터를 활용하여 테스트.
- GUI 시스템 구동: E2E 테스트를 통해 시스템의 동작을 검증.
- 테스트의 검증: 테스트 코드의 문제점이 없는지 검증.
테스트 도구
- 단위 테스트 도구: Jest, Mocha, ..
- 브라우저 테스트 도구: Cypress, Puppeteer, ..
- 데이터 검증 도구: Validator.js, Faker, ..
- 성능 및 모니터링 도구: Lighthouse, Sentry, ..