박종훈 기술블로그

E2E(End-to-End) 테스트

원문: https://microsoft.github.io/code-with-engineering-playbook/automated-testing/e2e-testing/


E2E(End-to-End) 테스트는 여러 하위 시스템으로 구성된 애플리케이션의 기능 및 데이터 흐름을 종합적으로 테스트하는 소프트웨어 테스트 방법론입니다.

하나의 어플리케이션을 개발하지만, 서로 다른 팀 또는 조직으로 나누어 서로 다른 기술 스택으로 개발을 하게 되는 경우가 있습니다. 이러한 경우에는 단일 시스템을 테스트하는 것만으로는 충분하지 않기 때문에 E2E 테스트를 통해 어플리케이션의 모든 구성 요소를 종합적으로 확인해야 합니다.

end to end testing

왜 E2E 테스트를 해야하나요?

최신 소프트웨어들은 여러 하위 시스템들의 연결로 구성되어 있습니다. 이러한 하위 시스템들은 같은 조직 내에 있을 수도 있겠지만 서로 다른 조직으로 묶여 있을 수 있습니다. 뿐만 아니라 하위 시스템들은 서로 다른 릴리즈 주기를 가질 수도 있습니다. 결과적으로 하나의 하위 시스템이라도 이슈가 발생 되었을 경우, 전체 소프트웨어 시스템을 붕괴시키는 부정적인 영향을 줄 수도 있습니다.

testing pyramid

위의 그림은 Kent C. Dodd’s blog 에 있는 테스트 피라미드입니다. Martin Fowler’s blog와 Google Testing Blog의 피라미드를 합친 것입니다.

각 테스트 유형은 용도, 적용 분야 및 적용 범위에 따라 다릅니다. 소프트웨어를 개발하면서 진행되는 대부분의 시험들은 아래쪽에 있을 것이고, 위로 올라갈수록 시험 횟수는 점점 줄어듭니다. 위로 올라갈수록 더 실행하는데 더 많은 시간이 소요되고 작성, 실행 및 유지 비용이 많이 들게 됩니다.

E2E 테스트 설계 블록

E2E Testing Design Blocks

세 가지 범주를 하나씩 살펴보도록 하겠습니다.

사용자 기능

사용자 기능 구축의 일부로 다음 작업들을 수행해야 합니다.

  • 소프트웨어 시스템 및 상호 연결된 하위 시스템 에서 사용자가 수행할 수 있는 기능들을 나열합니다.
  • 모든 사용자 기능에 대해 수행되는 작업과 입력 및 출력 데이터를 추적합니다.
  • 다른 사용자 기능 사이의 관계가 있는 경우 이를 찾습니다.
  • 사용자 기능들의 특성(즉, 독립적 인지, 재사용 가능 한지)을 확인합니다.

조건

사용자 기능을 기반으로 하여 조건들을 만들어 나가기 위해서 다음 작업들을 수행해야 합니다.

  • 각각의 모든 사용자 기능에 대해 일련의 조건이 준비되어야 합니다.
  • 사용자 기능에 영향을 미치는 타이밍, 데이터 조건 및 기타 요소를 매개변수로 고려할 수 있습니다.

테스트 케이스

테스트 케이스를 구축하려면 다음 요소들을 고려해야 합니다.

  • 모든 시나리오에 대해 사용자 기능의 모든 기능을 테스트하기 위해 하나 이상의 테스트 케이스를 만들어야 합니다. 최종적으로는 CI/CD 빌드 파이프라인을 통해 이러한 테스트 케이스들에 대해 성공 및 실패 여부를 확인할 수 있도록 자동화되어야 합니다.
  • 모든 단일 조건은 별도의 테스트 케이스로 참여해야 합니다.

E2E 테스트 적용하기

다른 테스트와 마찬가지로 E2E 테스트도 계획, 테스트 실행 및 종료 단계를 거칩니다. E2E 테스트는 다음 단계로 수행됩니다.

계획

  • 비즈니스 및 기능 요구 사항 분석
  • 테스트 계획 개발
  • 테스트 케이스 개발
  • 테스트를 진행하기 위한 ‘프로덕션과 동일한 환경’ 설정
  • 테스트 데이터 설정
  • 종료 기준 결정
  • 시스템에 가장 적합한 E2E 테스트 방법을 선택하십시오. 다양한 테스트 방법에 대한 정의는 테스트 방법 문서를 참조하십시오.

전제조건

  • 참여하는 모든 시스템에 대해 시스템 테스트를 완료해야 합니다.
  • 모든 서브시스템은 하나의 완전한 응용 프로그램으로 작동하도록 결합되어 있어야 합니다.
  • 테스트를 진행하기 위한 ‘프로덕션과 동일한 환경’이 준비 되어 있어야 합니다.

테스트 실행

  • 테스트 케이스 실행
  • 테스트 결과 기록 및 합격/불합격 판정
  • 버그 보고 도구에서 버그 보고
  • 버그 수정후 재확인

테스트 종료

  • 시험 보고서 준비
  • 종료 기준 기반 평가
  • 테스트 단계 종료

테스트 지표

테스트 지표 추적을 통해 테스트의 현재 상태를 파악할 수 있습니다. E2E 테스트의 몇 가지 일반적인 지표는 다음과 같습니다.

  • 테스트 케이스 준비 상태 준비된 테스트 케이스 수 vs 총 테스트 케이스 수입니다.

  • 빈번한 테스트 진행 일관되고 빈번한 방식으로 실행된 테스트 케이스의 수와 동일한 기간(e.g. 매주)에 테스트 케이스의 목표 수와 비교합니다.

  • 결함 상태 테스트 중에 발견된 결점의 상태를 나타냅니다. 결함은 결함 추적 도구의 심각도와 우선순위에 따라 해결해야 합니다. 따라서 심각도 및 우선 순위에 따른 열린 결함과 닫힌 결함의 백분율은 이 메트릭을 추적하기 위해 계산해야 합니다.

  • 테스트 환경 가용성 E2E 테스트에 사용된 기간과 예상한 할당 기간을 비교합니다.

결론

소프트웨어 상용 릴리스의 경우 E2E 테스트 검증은 네트워크 통신, 미들웨어 및 백엔드 서비스 상호 작용 등과 같은 실제 사용자를 정확하게 모방하는 환경에서 전체 애플리케이션을 테스트하기 때문에 중요한 역할을 합니다.

E2E 테스트는 이러한 테스트 사례를 자동화하는 비용이 너무 높아 조직에서 감당할 수 없기 때문에 종종 수동으로 수행됩니다. 그렇긴 하지만 각 조직의 궁극적인 목표는 프로세스에 전체 및 반자동 테스트 구성 요소를 추가하여 e2e 테스트를 최대한 간소화하는 것입니다.