상태 전이 테스팅(State Transition Testing)
상태 전이 테스트는 시스템이나 객체의 상태 변화를 모델링하고, 이벤트에 따른 상태 전이와 그 결과를 검증하는 기법이다.
이 방법은 시스템의 현재 상황(Conditions)과 이전 이력(History)을 반영하는 상태(States) 및 그 변화(Transition)에 따라 시스템이 어떻게 동작하는지를 테스트한다.
상태 전이 테스트의 목적
- 시스템의 모든 가능한 상태와 전이를 식별하고 테스트
- 유효한 상태 전이뿐만 아니라 유효하지 않은 전이도 테스트
- 상태 변화에 따른 시스템의 반응과 출력을 검증
상태 전이 테스트의 주요 구성 요소
시스템의 상태 전이를 테스트하기 위해서는 다음 요소들을 이해하고 정의해야 한다:
- 상태(States): 시스템이 특정 시점에 가질 수 있는 조건이나 상황을 의미한다. 예를 들어, 로그인 시스템의 경우 ‘로그아웃 상태’, ‘로그인 상태’, ‘잠금 상태’ 등이 있을 수 있다.
- 이벤트(Events): 상태 변화를 촉발하는 트리거를 말한다. ‘로그인 버튼 클릭’, ‘비밀번호 입력’, ‘시간 초과’ 등이 이벤트의 예시이다.
- 전이(Transitions): 한 상태에서 다른 상태로의 변화를 의미한다. 이는 특정 이벤트에 의해 발생하며, 조건이 충족되어야 실행된다.
- 액션(Actions): 전이가 발생할 때 실행되는 동작이다. ‘에러 메시지 표시’, ‘데이터 저장’, ‘화면 갱신’ 등이 여기에 해당한다.
상태 전이 테스트 설계 방법
상태 전이 다이어그램 작성: 시스템의 모든 상태와 상태 간 전이를 표현하는 다이어그램을 작성한다.
상태-이벤트 테이블 구성: 상태 전이 다이어그램을 바탕으로 모든 상태와 이벤트의 관계를 테이블로 정리한다.
전이 트리 구성: 상태-이벤트 테이블을 기반으로 상태가 전이되는 경로를 트리 형태로 표현한다.
테스트 케이스 도출:
- 유효 테스트 케이스: 정상적인 상태 전이를 검증하는 케이스
- 무효 테스트 케이스: 유효하지 않은 상태 전이를 검증하는 케이스
- 가드 조건 테스트 케이스: 상태 전이에 조건이 있는 경우, 해당 조건을 검증하는 케이스
테스트 프로시저 구성: 테스트 케이스를 실행 순서에 따라 나열하여 테스트 프로시저를 작성한다.
실제 적용 예시
자동판매기의 상태 전이 테스트를 예로 들어보자:
상태:
- 대기 상태
- 금액 입력 상태
- 제품 선택 상태
- 제품 배출 상태
- 거스름돈 반환 상태
테스트 시나리오:
- 정상 흐름: 대기 → 금액 입력 → 제품 선택 → 제품 배출 → 거스름돈 반환 → 대기
- 예외 상황:
- 잘못된 금액 투입
- 재고 없는 제품 선택
- 거스름돈 부족 상황
테스트 수행 전략
상태 전이 테스트는 다음과 같은 전략을 통해 수행된다:
- 0-스위치 커버리지: 모든 상태를 최소한 한 번씩 방문하는 테스트.
- 1-스위치 커버리지: 모든 전이를 최소한 한 번씩 수행하는 테스트.
- 라운드-트립 커버리지: 시작 상태로 돌아오는 순환 경로를 테스트.
- N-스위치 커버리지: N개의 연속된 전이를 포함하는 경로를 테스트.
테스트 결과 분석 및 문서화
테스트 수행 후에는 다음 사항들을 철저히 분석하고 문서화해야 한다:
발견된 결함:
- 잘못된 상태 전이
- 누락된 상태 처리
- 예외 상황 처리 미흡
테스트 커버리지:
- 방문한 상태의 비율
- 수행된 전이의 비율
- 테스트되지 않은 경로
개선 제안:
- 발견된 문제점에 대한 해결 방안
- 추가 테스트 필요 영역
상태 전이 테스트의 장점
- 복잡한 시스템의 동작을 체계적으로 모델링하고 테스트할 수 있다.
- 누락되거나 잘못된 상태 전이를 효과적으로 발견할 수 있다.
- 시스템의 동작을 사용자 관점에서 검증할 수 있다.
상태 전이 테스트의 적용 분야
- 임베디드 소프트웨어 시스템
- 자동화가 필요한 기술 분야
- 비즈니스 객체 모델링
- 인터넷 애플리케이션의 화면 흐름 테스트
- 워크플로우 기반 시스템:
- 문서 관리 시스템
- 결재 시스템
- 주문 처리 시스템
- 사용자 인터페이스:
- 로그인 시스템
- 회원가입 프로세스
- 온라인 쇼핑 카트
주의사항
- 상태 전이 다이어그램이 복잡해질 경우 테스트 설계와 실행이 어려워질 수 있다.
- 모든 가능한 상태와 전이를 식별하고 테스트하는 것이 중요하므로, 시스템에 대한 깊은 이해가 필요하다.