상태전이테스트로 순차 의존 결함 설계하기

상태전이테스트의 FSM 모델, 전이 커버리지, 가드와 액션 검증, 음성 경로 설계 방식을 정리한다.

2026-08-14 · 최초 발행 2025-12-15

요구사항을 상태와 전이로 표현하면 조합적으로 늘어나는 테스트 케이스를 제어하면서 순서 의존성을 검증할 수 있다. 상태전이테스트(State Transition Testing)는 시스템 상태, 이벤트, 가드, 액션의 관계를 모델로 드러낸 뒤 선택한 커버리지 기준에 따라 테스트를 만드는 설계 기법이다.

상태 변화가 테스트 조건이 되는 방식

이 기법은 이벤트가 발생했을 때 시스템이 어느 상태에서 어느 상태로 이동하는지를 기준으로 테스트 케이스를 구성한다. 모델링 기반은 유한상태기계(FSM, Finite State Machine)다.

상태는 노드로, 전이는 상태 사이의 화살표로 표현한다. 이벤트는 전이를 일으키는 트리거이며, 가드는 [조건], 액션은 전이 시 수행되는 작업으로 나타낼 수 있다. 전이 하나는 이벤트[가드]/액션 형식으로 명시한다.

외부에서 관찰 가능한 상태를 우선 모델에 담고, 내부 구현 상태를 과도하게 노출하지 않는 편이 좋다. 복잡도가 높다면 상태를 그룹으로 묶거나 하위 상태를 적용해 모델을 관리한다.

가드에는 경계값과 상태 유지·변화의 판별 기준을 명확히 적어야 한다. 액션은 출력이나 사이드이펙트 같은 외부 효과까지 검증할 수 있도록 오라클을 함께 설계한다. 비허용 이벤트, 잘못된 이벤트 순서, 경쟁 상태 같은 음성 경로와 Retry/Cancel 복구 전이, 타임아웃·롤백 정책도 모델의 일부다.

경로와 전이에서 테스트를 뽑는 기준

실사용 흐름을 따라 경로를 구성하는 방식은 순서 기반 설계에 적합하다. 모든 유효 상태에 최소 1회 도달하도록 만드는 상태 커버리지도 기본 기준이 된다.

전이 중심으로 범위를 넓히면 모든 상태전이를 1회 이상 실행하거나, 위험이 식별된 전이에 집중할 수 있다. 모델에서 금지된 전이가 실제 시스템에서도 차단되는지 확인하는 불가능 전이 검증도 필요하다.

상태 커버리지, 전이 커버리지, N-스텝 전이(전이쌍·스위치 커버리지), 불가능 전이 커버리지는 단계적으로 확장할 수 있다. 위험도에 따라 기준을 섞으면 케이스 수와 결함 검출력 사이의 균형을 잡기 좋다.

모델에서 실행 가능한 케이스로 옮기기

입력에는 요구사항, 상태 정의서, 이벤트 목록, 제약 조건, 타이머 조건, 동시성 조건이 포함된다. 이를 바탕으로 상태의 경계를 정하고, 각 전이를 이벤트[가드]/액션으로 기술한다.

이후 상태·전이·N-스텝·불가능 전이 가운데 커버리지 기준을 정한다. DFS/BFS 또는 최단경로를 사용해 중복을 줄이며 경로를 만들고, 가드에는 경계값 분석과 동등 분할을 결합한다. 오라클은 상태, 출력, 사이드이펙트, 로그, 메트릭을 대상으로 정의한다. 마지막으로 위험·빈도·비용을 기준으로 우선순위를 매겨 스모크 세트를 추린다.

산출물은 상태도 또는 전이표, 테스트 케이스 명세, 요구사항↔전이↔케이스를 잇는 추적성 매트릭스다.

동등 우선순위 전이가 있다면 비결정성을 피할 결정 규칙이 필요하다. 동시 이벤트에는 선점 규칙과 타임아웃 처리를 명시하고, 실패 시에는 원자적으로 상태를 복원할 기준을 둔다. 상태 전이의 원자성, 중복 이벤트의 멱등성, 분산 환경에서의 락과 사건 재처리 정책도 함께 다룬다.

로그인 잠금 정책을 상태로 표현하면

로그인 잠금 정책은 상태전이테스트의 대표적인 적용 대상이다. 이벤트, 가드, 액션을 전이 라벨에 함께 적으면 허용 경로와 차단 경로를 같은 모델에서 확인할 수 있다.

로그인실패[시도<3]/시도+1로그인실패[시도 =3]/'잠금처리'고위험로그인['리스크점수=임계']/2차인증요구2차인증성공/세션발급·시도초기화2차인증실패[재시도<3]/재시도+12차인증실패[재시도=3]/'잠금처리'타임아웃/요청무효화비밀번호재설정성공/'잠금해제'로그인시도/'거부·감사로그기록'정상 상태2차 인증 대기 상태잠김 상태

예를 들어 정상 상태에서 비밀번호재설정성공 이벤트가 발생하는 전이는 불허로 설계하고, 시스템이 이를 차단하는지 검증한다.

상태 모델이 효과적인 업무 흐름

인증과 접근제어에서는 정상·잠김·비활성 계정 상태, MFA 흐름, 타임아웃과 락 정책을 검증할 수 있다. 무차별 대입, 세션 재사용, 리플레이 차단 같은 공격 시나리오도 포함한다.

결제와 주문 라이프사이클에서는 승인·보류·취소·환불 상태의 이동을 확인한다. 사가와 보상 트랜잭션 모델에서는 실패 보상, 롤백, 재시도 정책이 주요 검증 대상이다.

통신과 IoT 펌웨어 업데이트는 다운로드·검증·적용·롤백 상태를 다룬다. 전원 손실이나 네트워크 분절이 발생했을 때 복구 전이가 올바르게 동작하는지도 확인해야 한다.

커버리지 수준을 선택하는 기준

기준 결함 검출력 케이스 수 증가율 일관성(모델↔테스트) 안정성(변경 영향) 운영 편의
상태 커버리지 낮음 높음 높음
전이 커버리지 중~높음 높음
N-스텝 전이(2+) 높음 높음 높음 중~낮음
불가능 전이 높음 낮음 높음 높음

전이 커버리지를 기본으로 두고, 고위험 경로에 한해 2-스텝 전이를 더하며, 불가능 전이의 차단 검증을 함께 적용하는 방식이 권장된다.

모델을 운영 가능한 테스트 자산으로 유지하기

불필요한 내부 상태를 줄여 상태 수를 관리하고, 가드에는 경계값·단위·타임존을 명시한다. 중복 이벤트가 들어와도 일관되게 처리되도록 멱등성을 설계한다.

N-스텝 경로는 2-스텝을 우선 적용하고 3-스텝은 고위험 경로에 한정한다. 가드의 데이터는 경계값 분석과 동등 분할로 설계하며, 불가능 전이의 오라클에는 거부 메시지, HTTP 코드, 감사로그, 메트릭을 포함한다.

전이 ID를 테스트 이름에 넣으면 모델과 테스트의 추적성을 유지하기 쉽다. 상태 조회 API, 로그 시그니처, DB 스냅샷의 오라클을 일관되게 구현하고, 병렬 실행 시에는 시드 데이터와 네임스페이스를 분리해 상태 격리를 확보한다.

순차 의존 결함 검출률은 경험치 기반으로 1535%p 개선될 수 있다. 경로 중복을 제거하면 스모크 세트 기준 케이스 수는 2040% 절감될 수 있으며, 모델 기반 추적성을 도입하면 회귀 결함 재발률은 30% 이상 감소한다. 요구사항의 모호성을 줄이고 설계와 테스트를 정렬하는 효과도 있으며, 복잡한 조건·타이밍·재시도 시나리오의 누락 방지와 변경 영향 범위 파악, 선택적 테스트 실행에 도움이 된다.

상태전이테스트소프트웨어 테스트FSM모델 기반 테스트테스트 설계