테스팅
Last updated
Last updated
소프트웨어가 해야 할 일을 하고 있는지 확인하는 방법
테스팅은 그저 코드에 관한 것뿐만 아니라 그 자체가 문화라는 것
엔지니어링 아이디어에 테스팅을 구축해야만 한다.
실수할 것임을 이해하라, 그 실수를 막는 방법의 하나가 테스트를 작성하는 것
테스트 작성을 위한 하나의 표준을 마련하고 거기에 모든 사람을 맞추는것이 훨씬 나음
그리고 그것을 문화로 만들어라
"이 코드를 위한 테스트는 작성했나요?", "이 코드를 위한 테스트는 왜 없나요?"
, 도구를 사용하면 시간 경과에 따른 코드 커버리지를 모니터링하고 특정 임곗값보다 낮아지면 알람을 보내는 등의 설정이 가능
앱의 (나머지 코드베이스와 격리된) 개별 컴포넌트 또는 기능 검증에 초점을 둠
테스트를 명확하고 간결한 형태로 구조화하기 위해 널리 받아들여지는 접근법
여러 컴포넌트와 서비스에 걸쳐 발생하는 실세계 사용자 상호작용을 시뮬레이션해 완전한 기능을 평가
프론트, 백엔드, 외부 시스템과의 모든 통합을 포함한 모든 시스템이 사용자의 관점에서 기대한 대로 작동함을 보장
E2E 테스팅 시나리오에서는 개별 함수나 컴포넌트를 격리한 상태에서 테스트하는 것이 아니라 어떻게 하면 앱 전체를 테스트할 수 있을지 생각해야함
컴포넌트와 API 서비스 사이의 통합 및 전체적인 사용자 경험에 초점을 둬야함
즉, 개별 함수 혹은 컴포넌트의 테스트를 고려하지 않고 전체 앱 흐름 및 다양한 부분들 사이의 상호작용을 검증하는데 초점을 둬야함
핵심 애플리케이션 흐름에 대해서만 작성할것을 권장?
앱의 여러 단위 혹은 컴포넌트 사이의 상호작용을 테스트하는데 초점
컴포넌트 사이의 상호작용을 테스트하고, API 요청 모킹, 앱 흐름의 특정 부분에 초점을 두는 것이 특징
통합테스트는 E2E 테스트의 충분함과 유닛테스트의 효율성의 균형을 제공하는것을 목적으로함
개별 컴포넌트가 함께 잘 작동하고, 전체 앱 컨텍스트 안에서 예상한 대로 기능함을 보장
컴포넌트의 UI 출력을 캡처하고 이를 미래의 출력과 비교함으로써 의도치않은 변경이 발생하지 않았음을 보장
UI 일관성이 중요한 경우
디자인 시스템 혹은 복잡한 시각적 세부 요소를 가진 컴포넌트를 사용하는 경우에 매우 적합
스냅샷 테스트는 보조적으로 작성, 기본 테스트 방법이 되서는 안됨
전체 페이지보다 작은 개별 컴포넌트 테스트에 초점을 둬라, 작을수록 쉽게 이해하고 유지보수 가능
가능한 한 각 스냅샷 테스트로 커버하는 테스트 케이스를 문서화, 해당 테스트 목적과 스냅샷 테스트가 어떤 결과/UI를 검증하는지 이해하도록 도움
코드에 대한 테스트를 먼저 작성하고, 실제 코드를 작성하는 개발 접근법
개선된 코드 품질
이른 시점부터 기대 동작과 결과에 초점을 둘 수 있음
잘 정의된 보다 견고한 코드 구현으로 이어짐
쉬운 디버깅과 유지보수
테스트가 실패했을 때 이미 기대 결과를 알고 있기 때문에 쉽게 이슈를 식별하고 수정 가능
장기적으로 디버깅에 소요되는 수고를 줄임
빠른 개발
특정 시점에 구체적인 기능과 컴포넌트에 초점을 둠으로써 개발자들이 큰 태스크를 작고 관리가능한 덩어리로 나누도록 독려함
생산성을 높이고 기술부채가 발생할 가능성을 줄임
올바른 답은 없다.
단, 프로젝트 규모, 복잡성, 팀 전문성 및 가용 리소스 등 다양한 요소에 기반하여 다양한 테스트 전략이 존재
통합 테스트에 더욱 초점을 둘것을 강조
통합테스트는 E2E 테스팅과 관련된 오버헤드를 발생시키지 않으면서도 실세계의 시나리오에서 컴포넌트들이 상호작용하는 방법을 보다 종합적으로 이해할 수 있음
크리티컬 패스(로그인, 회원가입, 결제 등)을 테스트할 때는 반드시 실제 API 요청을 사용하되 너무 많이 사용하지 말라고 권장함