유즈케이스 테스팅 (Use Case Testing))
유즈케이스 테스팅은 유즈케이스나 비즈니스 시나리오를 기반으로 테스트를 명세화하는 블랙박스 테스트 설계 기법이다.
이 방법은 액터와 시스템 간의 상호작용을 표현하고, 그 결과를 사용자에게 전달하는 과정을 테스트한다.
실제 예시를 통해 구체적으로 살펴보자.
온라인 쇼핑몰의 상품 주문 기능에 대한 유즈케이스 테스팅을 설계한다고 가정해보면:
기본 흐름(Basic Flow):
- 사용자가 상품을 장바구니에 추가한다
- 시스템이 장바구니 내용을 표시한다
- 사용자가 주문하기 버튼을 클릭한다
- 시스템이 배송 정보 입력 폼을 표시한다
- 사용자가 배송 정보를 입력한다
- 시스템이 결제 수단 선택 화면을 표시한다
- 사용자가 결제 수단을 선택하고 결제한다
- 시스템이 주문 완료 화면을 표시한다
대체 흐름(Alternative Flows):
- 장바구니가 비어있는 경우
- 배송 정보가 불완전한 경우
- 결제가 실패한 경우
예외 흐름(Exception Flows):
- 시스템 오류 발생 시
- 네트워크 연결 끊김 시
- 세션 만료 시
유즈케이스 테스팅의 단계별 수행 과정을 살펴보자:
유즈케이스 분석 단계
먼저 테스트할 유즈케이스의 모든 구성 요소를 파악한다:- 선행 조건(예: 로그인된 상태여야 함)
- 사용자 액션과 시스템 응답
- 대체 흐름과 예외 상황
- 후행 조건(예: 주문 정보가 데이터베이스에 저장되어야 함)
테스트 시나리오 도출 단계
각 흐름별로 구체적인 테스트 시나리오를 작성한다.
기본 흐름뿐만 아니라 모든 대체 흐름과 예외 흐름에 대해서도 시나리오를 만든다.테스트 케이스 설계 단계
각 시나리오를 구체적인 테스트 케이스로 변환한다.
테스트 케이스에는 다음 내용이 포함된다:- 테스트 목적
- 선행 조건
- 테스트 데이터
- 테스트 단계
- 예상 결과
- 판단 기준
테스트 실행 준비 단계
테스트 환경을 설정하고 필요한 테스트 데이터를 준비한다:- 테스트 계정 생성
- 테스트용 상품 데이터 설정
- 결제 시스템 테스트 모드 설정
테스트 실행 및 결과 검증 단계
준비된 테스트 케이스를 실행하고 결과를 검증한다:- 각 단계의 실행 결과 기록
- 예상 결과와의 비교
- 발견된 문제점 문서화
주요 특징
- 프로세스 흐름 중심: 기본 흐름과 대체 흐름을 포함한 전체 프로세스를 테스트한다.
- 사용자 중심 접근: 실제 사용자의 관점에서 시스템을 검증한다.
- 시나리오 기반: 유즈케이스 상세(description)를 바탕으로 테스트 시나리오를 구성한다.
- 다양한 테스트 레벨 적용: 컴포넌트(단위) 레벨과 시스템 레벨에서 모두 적용 가능하다.
장점
- 실제 사용 환경에서의 결함 발견: 시스템이 실제로 사용되는 프로세스 흐름에서 결함을 효과적으로 찾아낼 수 있다.
- 인수 테스트에 유용: 고객이나 사용자 그룹이 참여하는 인수 테스트 설계에 특히 효과적이다.
- 통합 결함 식별: 통합 테스트 단계에서 컴포넌트 간 상호작용 문제를 찾는 데 도움이 된다.
테스트 프로세스
- 테스트 시나리오 구성: 어떤 흐름을 테스트할지 결정한다.
- 필수 상황 선택: 유즈케이스 상세에서 테스트에 필요한 핵심 상황을 식별한다.
- 상황 분류: 입력값, 출력값, 상황 처리 등으로 테스트 요소를 분류한다.
- ID 부여: 각 테스트 상황에 고유 ID를 할당한다.
- 값 결정: 각 상황에 대해 가능한 값(유효/무효, 상한/하한 등)을 정의한다.
테스트 레벨
- 컴포넌트(단위) 레벨: 개별 유즈케이스를 독립적으로 테스트한다.
- 시스템 레벨: 유즈케이스 간의 상호작용을 테스트한다. 활동 기반, 전이 기반, 경로 기반 커버리지 등의 방법을 사용할 수 있다.
효과적인 유즈케이스 테스팅을 위한 고급 전략
경계값 분석 통합
각 입력 필드에 대해 경계값 테스트를 수행한다. 예를 들어, 주문 수량의 최소값과 최대값을 테스트한다.상태 전이 고려
시스템의 상태 변화를 추적하면서 테스트한다. 예를 들어, 주문 상태가 ‘결제 대기’ → ‘결제 완료’ → ‘배송 중’으로 올바르게 변경되는지 확인한다.데이터 일관성 검증
전체 프로세스 수행 후 데이터가 올바르게 저장되고 처리되었는지 확인한다.
이러한 유즈케이스 테스팅은 현대의 복잡한 소프트웨어 시스템을 체계적으로 검증하는 데 매우 효과적인 방법이다. 특히 업무 프로세스가 복잡하거나 여러 시스템이 연계되어 있는 엔터프라이즈 애플리케이션 테스팅에서 큰 가치를 발휘한다.