|
| 1 | +## 일반적인 테스트 유형 |
| 2 | + |
| 3 | +| 고수준 ( 높은 신뢰도 ) | E2E/UI 통합 테스트 | |
| 4 | +| --- | --- | |
| 5 | +| | E2E/UI 격리 테스트 | |
| 6 | +| | API 테스트(시스템 외부에서 실행) | |
| 7 | +| | 통합 테스트(인메모리) | |
| 8 | +| | 컴포넌트 테스트(인메모리) | |
| 9 | +| 저수준 ( 빠른 속도 ) | 단위 테스트(인메모리) | |
| 10 | + |
| 11 | +테스트 수준이 높을 수록 실제 의존성을 더 많이 사용하게 되어 전체 시스템 정확성에 대한 신뢰도가 높다. |
| 12 | + |
| 13 | +하지만 테스트는 더 느려지고 불안정해질 수 있는 단점이 있다. |
| 14 | + |
| 15 | +“사실 각각에 대한 명확한 구분은 못하겠음..” |
| 16 | + |
| 17 | +양 극단만 보자면. |
| 18 | + |
| 19 | +E2E 테스트 : 가짜가 없다. 실제 운영 환경에 가장 가까운 상태 ( 사용자가 마주할 실제 시나리오가 제대로 동작하는지 테스트 ) |
| 20 | + |
| 21 | +단위 테스트 : 직접 제어할 수 없는 외부 의존성은 없다. ( 테스트 내에서 모든 것을 제어 가능 ) |
| 22 | + |
| 23 | +## 각 테스트 수준마다 존재하는 안티 패턴 |
| 24 | + |
| 25 | +**E2E 테스트만 사용하는 경우** |
| 26 | + |
| 27 | +- 이 수준의 테스트는 매우 느리고, 유지 보수하기 어렵고, 디버깅이 힘들며, 불안정성이 높다. |
| 28 | +- 처음 테스트 통과할 때는 큰 신뢰감을 줄 수 있겠지만, n번째 테스트를 진행할 수록 그 효율성은 떨어진다.. |
| 29 | +- 가장 중요한 기능만 확인하는 용도로 소수의 E2E 테스트를 사용하는 것이 가장 효율적! |
| 30 | + |
| 31 | +**저수준 테스트만 사용하는 경우** |
| 32 | + |
| 33 | +- 이 테스트들이 통과해도 애플리케이션 전체가 제대로 작동한다고 확신하기에는 신뢰도가 충분하지 않다. |
| 34 | +- 전체 테스트를 위해서 수동으로 디버깅과 테스트를 해봐야함! |
| 35 | +- 고수준의 테스트도 함께 작성하자! |
| 36 | + |
| 37 | +테스트 유형 간 균형을 맞추려면 ***고수준 테스트와 저수준 테스트 간에는 1:5 또는 1:10 비율을 유지하면 좋다.*** |
| 38 | + |
| 39 | +ex ) 단위테스트가 100개라면.. 통합 테스트는 10개.. E2E 테스트는 1개.. |
| 40 | + |
| 41 | +## 테스트 레시피 전략 |
| 42 | + |
| 43 | +조직 내 테스트 유형 간 균형을 맞추기 위해, **테스트 레시피 전략**을 추천한다. |
| 44 | + |
| 45 | +→ 특정 기능을 어떻게 테스트할지 간단한 계획을 세우는 것. |
| 46 | + |
| 47 | +→ 고정된 산출물 아님. 테스트 시나리오가 새로 추가되거나 없어질 수 있으니까. |
| 48 | + |
| 49 | +→ 테스트 레시피가 통과해야 기능이 완성되었다고 본다. |
| 50 | + |
| 51 | +→ 개발 돌입하기 전에 레시피 작성하는 것이 좋다. ( 요구사항 분석과 비슷한 느낌일까..? ) |
| 52 | + |
| 53 | +## 빌드 파이프라인 관리 |
| 54 | + |
| 55 | +자동화 파이프라인을 통해 수행하는 테스트 작업을 두 가지 그룹으로 나누면 다음과 같다. |
| 56 | + |
| 57 | +**배포 중단 테스트** : 변경 사항에 문제 없는지 배포 전에 판단하는 테스트 ( 실패하면 문제 해결하고 배포해야 함 ) |
| 58 | + |
| 59 | +**참고용 테스트** : KPI를 파악하고 지속적으로 모니터링하는데 사용 ( 배포에 큰 영향을 주지 않음 ) |
| 60 | + |
| 61 | +이 두 테스트 그룹을 통합으로 테스트하자니, 참고용 테스트는 배포에 중요한 영향을 끼치지 않음에도 불구하고 시간을 차지함..! |
| 62 | + |
| 63 | +배포에 직접적인 영향을 미치는 테스트와 그렇지 않은 테스트를 구분하여 두 가지 파이프라인으로 운영해야한다. |
| 64 | + |
| 65 | +**배포 파이프라인** : 배포를 결정하는 테스트에 사용 ( 통과하면 코드를 자동으로 프로덕션에 배포해도 괜찮다. 이 테스트의 실행결과는 빠르게 알려져야 함 ) |
| 66 | + |
| 67 | +**탐색 파이프라인** : 참고용 테스트에 사용 ( 배포 파이프라인과 병렬로 실행. 배포 기준에 포함 되지 않음. 테스트가 오래 걸려도 무방 ) |
| 68 | + |
| 69 | +테스트 결과를 신속하게 얻는 것은 중요하기 때문에 파이프라인의 각 테스트 계층을 병렬로 실행하는 것이 일반적이다. |
| 70 | + |
| 71 | +배포 파이프라인은 특정 시간에 실행하기보다 코드가 커밋될 때마다 실행하면 좋다. 훨씬 세밀하고 빠르게 결과를 받을 수 있기 때문에! |
0 commit comments