개념
동등분할과 경계값 분석은 입력값 하나를 다뤘다. 이 레슨의 두 기법은 그보다 복잡한 상황 — 시간에 따라 상태가 바뀌는 경우와 여러 조건이 동시에 맞물리는 경우를 다룬다.
상태 전이 테스트 (State Transition Testing)
주문, 로그인, 게시글처럼 정해진 상태들 사이를 오가는 대상에 쓴다.
주문 상태: 결제대기 → 결제완료 → 배송중 → 배송완료 (결제대기에서 "취소"로도 갈 수 있다)
이걸 표로 그리면 어떤 상태에서 어떤 이벤트가 오면 어떤 상태로 가는지, 그리고 어떤 조합은 애초에 불가능한지가 드러난다.
| 현재 상태 | 이벤트 | 다음 상태 |
|---|---|---|
| 결제대기 | 결제 성공 | 결제완료 |
| 결제대기 | 주문 취소 | 취소됨 |
| 결제완료 | 배송 시작 | 배송중 |
| 배송중 | 배송 완료 | 배송완료 |
| 배송완료 | 주문 취소 | (불가능 — 정의되지 않은 전이) |
표에 없는 조합, 즉 "배송완료 상태에서 취소를 시도하면?" 같은 **비정상 전이(invalid transition)**를 테스트하는 게 이 기법의 핵심 가치다. 시스템이 이런 시도를 제대로 막는지가 실무에서 자주 놓치는 결함이다. 커버리지는 보통 세 단계로 늘려간다 — 모든 상태를 한 번씩 거치기(0-switch), 모든 정상 전이를 한 번씩 실행하기(1-switch), 그리고 비정상 전이가 정말 막히는지 확인하기.
결정 테이블 (Decision Table)
여러 개의 독립적인 조건이 동시에 맞물려 결과를 결정하는 규칙에 쓴다. 상태전이가 "시간 순서"를 다룬다면, 결정 테이블은 "그 순간의 조건 조합"을 다룬다.
규칙: 회원이고 쿠폰이 있으면 20% 할인. 회원이 아니지만 쿠폰이 있으면 10% 할인. 회원이지만 쿠폰이 없으면 5% 할인. 둘 다 아니면 할인 없음.
| 조건: 회원 여부 | Y | Y | N | N |
|---|---|---|---|---|
| 조건: 쿠폰 보유 | Y | N | Y | N |
| 결과: 할인율 | 20% | 5% | 10% | 0% |
조건이 2개면 2×2=4가지 조합이지만, 조건이 늘어날수록(3개면 최대 8가지) 표가 커진다. 표로 정리하면 **"이 조합, 규칙에 정의되어 있나?"**를 빠뜨리지 않고 확인할 수 있다 — 글로 풀어 쓴 규칙만 보고는 조합을 놓치기 쉽다.
두 기법의 차이
| 상태 전이 | 결정 테이블 | |
|---|---|---|
| 무엇을 다루는가 | 시간에 따른 상태 변화 | 동시에 존재하는 조건들의 조합 |
| 핵심 질문 | "이 상태에서 저 상태로 갈 수 있나?" | "이 조건 조합이면 결과가 뭔가?" |
| 놓치기 쉬운 결함 | 비정상 전이가 허용됨 | 정의 안 된 조합이 처리 안 됨 |
실무에서 왜 필요한가
상태 관련 결함(예: 취소된 주문을 다시 결제 시도, 이미 삭제된 게시글을 수정 시도)은 동등분할·경계값으로는 안 잡힌다 — 그 기법들은 "값 하나"를 보지 "이전에 어떤 상태를 거쳐왔는가"를 안 보기 때문이다. 결정 테이블도 마찬가지로, 조건이 2~3개만 넘어가도 글로 풀어 쓴 요구사항에서는 조합 하나가 조용히 빠지기 쉽다. 실제로 "쿠폰 두 개를 동시에 쓰면?" 같은, 애초에 요구사항에 없던 조합이 결정 테이블을 그려보는 과정에서 발견되는 경우가 흔하다 — 이건 모듈 2에서 배운 "누락 찾기"가 표라는 도구로 구체화된 것이다.
실습 과제
과제 1 — 상태 전이표 그리기 (12분)
"게시글" 기능의 상태가 임시저장 → 게시됨 → 삭제됨 이렇게 세 가지가 있고, 임시저장에서 바로 삭제도 가능하다고 하자. 상태 전이표를 만들고, **비정상 전이(막혀야 하는 조합)**를 최소 2개 찾아 적는다.
과제 2 — 결정 테이블 만들기 (12분)
다음 규칙으로 결정 테이블을 만든다: "첫 구매이고 5만원 이상 구매하면 무료배송. 첫 구매가 아니어도 10만원 이상이면 무료배송. 그 외에는 배송비 3천원." (조건 두 개: 첫 구매 여부, 구매 금액 — 구매 금액은 "5만원 미만/5만원~10만원/10만원 이상" 세 구간으로 나눠본다.)
자가 체크리스트
- 상태 전이 테스트와 결정 테이블의 차이를 "시간 vs 조건 조합"으로 설명할 수 있다
- 상태 전이표에서 비정상 전이(정의되지 않은 조합)를 찾아낼 수 있다
- 조건 2~3개짜리 결정 테이블을 직접 만들 수 있다
- 왜 비정상 전이·정의 안 된 조합이 실무에서 자주 놓치는 결함 유형인지 설명할 수 있다
흔한 실수
- 정상 전이만 테스트하고 비정상 전이를 빼먹는다. "배송완료 후 다시 취소를 누르면?"처럼, 표에 없는 칸이야말로 테스트해야 할 대상이다.
- 결정 테이블의 조건을 너무 잘게 쪼개 표가 감당 안 되게 커진다. 조건이 4개를 넘어가면(16가지 조합) 조합 테스트 기법(다음다음 레슨의 페어와이즈)으로 넘어가는 게 낫다.
- 상태 다이어그램만 그리고 실제 테스트 케이스로 옮기지 않는다. 다이어그램은 이해를 돕는 도구고, 실제로는 각 전이를 실행하는 테스트 케이스가 있어야 한다.
참고 자료
- ISTQB Foundation Level Syllabus — State Transition Testing — 0-switch/1-switch 커버리지 개념 포함
- ISTQB Glossary — Decision Table Testing — 결정 테이블의 공식 정의