상태 전이 테스팅

DoTheTest·2025년 8월 7일
0

테스트 지식

목록 보기
17/24

시스템의 동작이 "무엇을 입력했는가"뿐만 아니라 "어떤 순서로 입력했는가"에 따라 달라진다면 어떨까요?
예를 들어, ATM 기기에서 비밀번호를 한 번 틀리는 것과, 세 번 연속으로 틀리는 것은 완전히 다른 결과를 낳습니다. 이처럼 이벤트의 순서와 시스템의 현재 '상태(State)'가 중요한 경우, 우리는 상태 전이 테스팅(State Transition Testing)이라는 새로운 지도가 필요합니다.


1. 상태 전이 테스팅이란 무엇인가?

상태 전이 테스팅은 시스템이 가질 수 있는 유한한 상태(States)와, 특정 이벤트(Events)에 의해 상태가 변하는 전이(Transitions) 과정을 모델링하고, 이 모든 상태와 전이를 체계적으로 검증하는 블랙박스 테스트 설계 기법입니다.

  • 핵심 철학: 시스템의 동작을 '상태'와 '전이'의 관점에서 바라봄으로써, 특정 순서로 이벤트가 발생했을 때만 나타나는 결함을 효과적으로 찾아내는 것을 목표로 합니다.
  • 언제 사용하는가: 사용자 로그인 상태, 온라인 쇼핑몰의 주문 상태, 은행 ATM 등 명확한 상태를 가진 시스템이나, 특정 순서로 기능을 사용해야 하는 워크플로우를 가진 모든 소프트웨어에 매우 유용합니다.

2. 상태 전이 모델링: 테이블

2.1 상태 전이 다이어그램 (State Transition Diagram)

시스템의 모든 상태와 상태 간의 전이를 시각적으로 표현한 그림입니다.
(예시: 로그인 시스템 상태 전이 다이어그램)

현재 상태이벤트결과다음 상태
로그아웃로그인 성공대시보드 표시로그인
로그아웃로그인 실패에러 메시지 표시1회 실패
1회 실패로그인 성공대시보드 표시로그인
1회 실패로그인 실패에러 메시지 표시2회 실패
2회 실패로그인 성공대시보드 표시로그인
2회 실패로그인 실패계정 잠김 알림계정 잠김
로그인로그아웃로그아웃 페이지 표시로그아웃
계정 잠김로그인 시도'계정 잠김' 메시지계정 잠김

2.2 상태 전이 모델링: 테이블

상태 전이 다이어그램 대신, 상태 전이 테이블(State Transition Table) 로 모델을 정리할 수 있습니다.
아래 예시는 로그인 시스템의 전이를 정리한 표입니다.

현재 상태이벤트결과다음 상태
로그아웃로그인 성공대시보드 표시로그인
로그아웃로그인 실패에러 메시지 표시1회 실패
1회 실패로그인 성공대시보드 표시로그인
1회 실패로그인 실패에러 메시지 표시2회 실패
2회 실패로그인 성공대시보드 표시로그인
2회 실패로그인 실패계정 잠김 알림계정 잠김
로그인로그아웃로그아웃 페이지 표시로그아웃
계정 잠김로그인 시도'계정 잠김' 메시지계정 잠김

3. 테스트 케이스 도출: 커버리지 전략과 우선순위

모든 전이 경로를 테스트하는 것은 비현실적일 수 있습니다. 따라서 커버리지 수준을 정하고, 리스크 기반으로 우선순위를 매기는 것이 중요합니다.

  • TC Level 0 (상태 커버리지)
    모든 '상태'를 최소 한 번씩 방문하는 가장 기본적인 테스트.
    예시:
    로그아웃 → (성공) → 로그인 → (로그아웃) → 로그아웃 → (실패) → ... → 계정 잠김

  • TC Level 1 (전이 커버리지)
    모든 '전이'(화살표)를 최소 한 번씩 실행하는 더 강력한 테스트. 대부분의 경우 이 수준을 목표로 합니다.

우선순위 설정 가이드

시간이 부족할 경우, 다음 기준으로 위험도가 높은 전이를 먼저 테스트하세요:

  1. Happy Path
    가장 일반적이고 중요한 성공 경로
    예: 로그아웃 → 로그인 성공

  2. 가장 위험한 실패 경로
    비즈니스에 치명적인 영향을 주는 경로
    예: 2회 실패 → 계정 잠김

  3. 자주 발생하는 전이
    사용자들이 가장 빈번하게 실행할 것으로 예상되는 경로


4. 비정상 전이와 예외 처리 테스트

상태 전이 모델은 정의된 경로뿐만 아니라, 정의되지 않은 경로를 테스트하는 데에도 매우 유용합니다.

  • 비정상 전이(Invalid Transitions) 테스트
    특정 상태에서 발생할 수 없는 이벤트를 의도적으로 발생시켜, 시스템이 어떻게 반응하는지 확인합니다.
    예시:

  • 로그인 상태에서 로그인 성공 이벤트를 다시 발생시키면 어떻게 되는가? (중복 로그인 방지)

  • 계정 잠김 상태에서 비밀번호 찾기 이벤트는 정상적으로 동작하는가?

  • 예상치 못한 이벤트 처리
    네트워크 끊김, 뒤로가기 버튼 연타 등 예상치 못한 이벤트를 만났을 때,
    시스템이 이전 상태로 안전하게 복구(롤백)하거나 적절한 예외 메시지를 표시하는지 확인합니다.

0개의 댓글