시스템의 동작이 "무엇을 입력했는가"뿐만 아니라 "어떤 순서로 입력했는가"에 따라 달라진다면 어떨까요?
예를 들어, ATM 기기에서 비밀번호를 한 번 틀리는 것과, 세 번 연속으로 틀리는 것은 완전히 다른 결과를 낳습니다. 이처럼 이벤트의 순서와 시스템의 현재 '상태(State)'가 중요한 경우, 우리는 상태 전이 테스팅(State Transition Testing)이라는 새로운 지도가 필요합니다.
상태 전이 테스팅은 시스템이 가질 수 있는 유한한 상태(States)와, 특정 이벤트(Events)에 의해 상태가 변하는 전이(Transitions) 과정을 모델링하고, 이 모든 상태와 전이를 체계적으로 검증하는 블랙박스 테스트 설계 기법입니다.
시스템의 모든 상태와 상태 간의 전이를 시각적으로 표현한 그림입니다.
(예시: 로그인 시스템 상태 전이 다이어그램)
현재 상태 | 이벤트 | 결과 | 다음 상태 |
---|---|---|---|
로그아웃 | 로그인 성공 | 대시보드 표시 | 로그인 |
로그아웃 | 로그인 실패 | 에러 메시지 표시 | 1회 실패 |
1회 실패 | 로그인 성공 | 대시보드 표시 | 로그인 |
1회 실패 | 로그인 실패 | 에러 메시지 표시 | 2회 실패 |
2회 실패 | 로그인 성공 | 대시보드 표시 | 로그인 |
2회 실패 | 로그인 실패 | 계정 잠김 알림 | 계정 잠김 |
로그인 | 로그아웃 | 로그아웃 페이지 표시 | 로그아웃 |
계정 잠김 | 로그인 시도 | '계정 잠김' 메시지 | 계정 잠김 |
상태 전이 다이어그램 대신, 상태 전이 테이블(State Transition Table) 로 모델을 정리할 수 있습니다.
아래 예시는 로그인 시스템의 전이를 정리한 표입니다.
현재 상태 | 이벤트 | 결과 | 다음 상태 |
---|---|---|---|
로그아웃 | 로그인 성공 | 대시보드 표시 | 로그인 |
로그아웃 | 로그인 실패 | 에러 메시지 표시 | 1회 실패 |
1회 실패 | 로그인 성공 | 대시보드 표시 | 로그인 |
1회 실패 | 로그인 실패 | 에러 메시지 표시 | 2회 실패 |
2회 실패 | 로그인 성공 | 대시보드 표시 | 로그인 |
2회 실패 | 로그인 실패 | 계정 잠김 알림 | 계정 잠김 |
로그인 | 로그아웃 | 로그아웃 페이지 표시 | 로그아웃 |
계정 잠김 | 로그인 시도 | '계정 잠김' 메시지 | 계정 잠김 |
모든 전이 경로를 테스트하는 것은 비현실적일 수 있습니다. 따라서 커버리지 수준을 정하고, 리스크 기반으로 우선순위를 매기는 것이 중요합니다.
TC Level 0 (상태 커버리지)
모든 '상태'를 최소 한 번씩 방문하는 가장 기본적인 테스트.
예시:
로그아웃 → (성공) → 로그인 → (로그아웃) → 로그아웃 → (실패) → ... → 계정 잠김
TC Level 1 (전이 커버리지)
모든 '전이'(화살표)를 최소 한 번씩 실행하는 더 강력한 테스트. 대부분의 경우 이 수준을 목표로 합니다.
시간이 부족할 경우, 다음 기준으로 위험도가 높은 전이를 먼저 테스트하세요:
Happy Path
가장 일반적이고 중요한 성공 경로
예: 로그아웃 → 로그인 성공
가장 위험한 실패 경로
비즈니스에 치명적인 영향을 주는 경로
예: 2회 실패 → 계정 잠김
자주 발생하는 전이
사용자들이 가장 빈번하게 실행할 것으로 예상되는 경로
상태 전이 모델은 정의된 경로뿐만 아니라, 정의되지 않은 경로를 테스트하는 데에도 매우 유용합니다.
비정상 전이(Invalid Transitions) 테스트
특정 상태에서 발생할 수 없는 이벤트를 의도적으로 발생시켜, 시스템이 어떻게 반응하는지 확인합니다.
예시:
로그인 상태에서 로그인 성공 이벤트를 다시 발생시키면 어떻게 되는가? (중복 로그인 방지)
계정 잠김 상태에서 비밀번호 찾기 이벤트는 정상적으로 동작하는가?
예상치 못한 이벤트 처리
네트워크 끊김, 뒤로가기 버튼 연타 등 예상치 못한 이벤트를 만났을 때,
시스템이 이전 상태로 안전하게 복구(롤백)하거나 적절한 예외 메시지를 표시하는지 확인합니다.