개념
리파인먼트에서 QA가 실제로 하는 일
모듈 7(레슨 8)에서 "백로그 리파인먼트에서 스토리의 모호함과 테스트 가능성을 지적한다"고 정리했다. 이 레슨은 그 한 줄을 절차 로 펼친다. 실제로 리파인먼트에서 QA가 하는 일은 세 단계다.
1. 캐묻기 이 스토리에서 아직 정해지지 않은 것은 무엇인가
2. 예시화 말로 합의한 규칙을 구체적인 숫자와 상황으로 바꾼다
3. 자르기 지금 크기로는 스프린트 안에 못 끝나는 것을 조각낸다세 단계는 순서가 있다. 자르기를 먼저 하면 잘못된 선을 따라 자른다 — 모호함이 남아 있는 상태에서 쪼개면 조각마다 같은 모호함이 복제된다.
1단계 — 질문을 즉흥으로 던지지 않는다
모듈 2(레슨 3)에서 요구사항의 모호함과 공백을 찾는 법을 배웠다. 리파인먼트는 그 기법을 시간 제한 아래에서 쓰는 자리다. 스토리 하나에 쓸 수 있는 시간은 보통 10~20분이고, 그 안에 모든 질문을 던질 수는 없다. 그래서 위험 순으로 질문 세트를 미리 만들어 둔다 .
| 카테고리 | 질문 | 언제 특히 중요한가 |
|---|---|---|
| 경계 | 값의 상·하한은? 0·음수·최대치일 때는? | 금액·수량·날짜가 나올 때 |
| 상태 | 이 동작이 불가능한 상태가 있는가? 그때는 무엇을 보여 주는가 | 주문·예약·결제처럼 상태 기계가 있을 때 |
| 동시성 | 두 사람이 동시에 하면? 같은 사람이 두 탭에서 하면? | 재고·좌석·쿠폰처럼 한정 자원일 때 |
| 실패 | 외부 연동이 죽으면? 타임아웃이면? 절반만 성공하면? | 결제·알림·외부 API가 낄 때 |
| 기존 데이터 | 이미 쌓인 데이터는 어떻게 되는가? 마이그레이션이 필요한가 | 스키마·정책이 바뀔 때 |
| 권한 | 역할별로 다르게 보이는가? 비로그인은? | 관리자 기능·다중 테넌트 |
| 되돌리기 | 취소·환불·수정이 가능한가? 어디까지? | 돈과 계약이 걸릴 때 |
| 관측 | 이게 잘 동작하는지 운영에서 어떻게 아는가 | 항상 |
마지막 관측 질문은 QA가 아니면 아무도 하지 않는 질문이다. "이 기능이 망가진 걸 우리가 어떻게 알게 되나요? 사용자 문의로 알게 되나요?"
질문을 던지는 순서도 기술이다. 모든 질문을 한 번에 쏟으면 개발자와 PO가 방어적으로 변한다. 위험이 큰 카테고리 두세 개만 고르고, 나머지는 미해결 질문 목록 에 적어 비동기로 답을 받는다.
2단계 — 예제 매핑으로 25분 안에 정리하기
질문과 답이 대화로만 오가면 다음 날 기억이 갈린다. Matt Wynne이 제안한 예제 매핑(Example Mapping) 은 그 대화를 네 가지 색 카드로 눈에 보이게 만든다.
┌──────────────────────────────────────────────┐
│ 노랑 : 스토리 "장바구니 쿠폰 적용" │ 1장
└──────────────────────────────────────────────┘
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ 파랑: 규칙 │ │ 파랑: 규칙 │ │ 파랑: 규칙 │
│ 쿠폰 1장만 │ │ 최소주문금액 │ │ 만료쿠폰 불가 │
└───────────────┘ └───────────────┘ └───────────────┘
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ 초록: 예시 │ │ 초록: 예시 │ │ 초록: 예시 │
│ 2장 담으면 │ │ 29,900원에 │ │ 어제 만료 → │
│ 두 번째 거부 │ │ 3만원 쿠폰 거부│ │ 목록에 안 보임 │
└───────────────┘ └───────────────┘ └───────────────┘
┌─────────────────────────────┐
│ 빨강: 미해결 질문 │
│ 포인트와 중복 사용 가능한가? │
└─────────────────────────────┘운영 규칙은 단순하다.
- 한 번에 한 스토리, 25분 타임박스. 25분 안에 끝나지 않으면 그 자체가 신호다.
- 초록(예시)은 반드시 구체적인 값으로. "최소 주문 금액 미만이면 거부"는 규칙이지 예시가 아니다. "29,900원 장바구니에 3만 원 이상 쿠폰 → 적용 불가"가 예시다.
- 빨강이 쌓이면 멈춘다. 미해결 질문이 서너 장 넘으면 스토리를 스프린트에 넣지 않는다. 지금 답을 못 찾는 것을 스프린트 안에서 찾을 확률은 낮다.
세션이 끝나면 읽는 법 이 있다.
| 지도 모양 | 해석 | 조치 |
|---|---|---|
| 파랑 1 | 준비됨 | 스프린트에 넣는다 |
| 파랑이 6장 이상 | 스토리가 크다 | 규칙 경계를 따라 쪼갠다(3단계 R) |
| 한 파랑에 초록이 7~8장 | 그 규칙이 실은 여러 규칙 | 규칙을 분해한다 |
| 빨강이 3장 이상 | 아직 모른다 | 스파이크로 돌린다(3단계 S) |
| 초록이 하나도 없는 파랑 | 아무도 그 규칙을 이해 못 함 | 가장 위험한 신호 |
마지막 행이 중요하다. 예시를 못 만드는 규칙은 구현도 못 한다. 리파인먼트에서 이것 하나만 잡아도 스프린트 중반의 하루가 절약된다.
3단계 — 슬라이싱 패턴
이제 자른다. Mike Cohn의 SPIDR 은 다섯 개의 절단선을 제시한다.
| 글자 | 절단선 | 예 — "회원이 주문을 취소할 수 있다" |
|---|---|---|
| S (Spike) | 모르는 것을 먼저 조사 | 결제사 부분 환불 API가 되는지 하루 조사 |
| P (Path) | 경로가 여러 개면 하나씩 | 카드 결제 취소 먼저 → 다음에 간편결제 취소 |
| I (Interface) | 인터페이스별로 | 웹 먼저 → 앱은 다음 스프린트 |
| D (Data) | 데이터 종류·범위별로 | 단일 상품 주문 먼저 → 다음에 묶음/예약 주문 |
| R (Rules) | 비즈니스 규칙별로 | 배송 전 취소 먼저 → 다음에 부분 취소·배송 후 반품 |
각 절단선의 판정 기준은 하나다. 잘린 조각 하나만 릴리스해도 사용자에게 가치가 있는가. "프런트엔드만" "백엔드만"으로 자르는 것은 슬라이싱이 아니라 작업 분해(task breakdown)다. 그렇게 자르면 조각 하나로는 아무것도 못 하고, 결국 둘 다 끝나는 스프린트 마지막 날에 테스트가 몰린다(레슨 1의 몰림 지표).
나쁜 자르기 (레이어 분해) 좋은 자르기 (기능 슬라이스)
┌──────────────┐ ┌──────────────┐
│ UI 작업 │ ← 혼자선 쓸모없음 │ 카드 결제 │ ← 이것만 나가도
├──────────────┤ │ 취소 (전체) │ 사용자가 쓴다
│ API 작업 │ ├──────────────┤
├──────────────┤ │ 간편결제 │
│ DB 작업 │ │ 취소 (전체) │
└──────────────┘ └──────────────┘QA가 슬라이싱에서 내는 고유한 기여
슬라이싱은 보통 PO와 개발의 일로 여겨지지만, QA가 던질 수 있는 질문이 따로 있다.
- "이 조각만 릴리스했을 때 테스트할 수 있나요?" — 테스트할 수 없는 조각은 완료를 판정할 수 없다.
- "이 조각과 저 조각 사이에 반쪽 상태가 생기나요?" — 카드 취소만 있고 간편결제 취소가 없는 동안 사용자가 보는 화면은 어떻게 되는가. 그 중간 상태 자체가 테스트 대상이다.
- "조각 순서를 바꾸면 위험이 줄어드나요?" — 가장 불확실한 조각을 먼저 하면 스프린트 후반의 놀람이 줄어든다.
세 번째가 특히 강력하다. 팀은 대개 쉬운 조각부터 하려 하지만, 위험 기반 사고(모듈 4 레슨 2)로 보면 불확실한 조각부터 해야 한다.
테스트 가능성 판정 — INVEST의 T
Bill Wake의 INVEST 기준 중 마지막 T가 Testable이다. 잘린 조각마다 이것만 확인한다.
| 확인 | 통과 기준 |
|---|---|
| 관측 가능한가 | 결과를 화면·API 응답·DB·로그 중 하나에서 확인할 수 있다 |
| 제어 가능한가 | 테스트에 필요한 사전 상태를 만들 수 있다(계정·데이터·시각) |
| 기대 결과가 있는가 | 통과/실패를 가르는 구체적인 값이 정해져 있다 |
| 격리 가능한가 | 다른 미완성 조각에 막히지 않고 이 조각만 검증할 수 있다 |
네 개 중 하나라도 "아니오"면 리파인먼트에서 해결한다. 스프린트가 시작된 뒤에 발견하면 그 스토리는 늦는다.
실무에서 왜 필요한가
리파인먼트에서 발견한 모호함 하나의 가치는 시점으로 계산된다. 같은 모호함을 스프린트 중반에 발견하면 개발이 멈추고 되돌아가고, 릴리스 후에 발견하면 운영 데이터를 고쳐야 한다. 모듈 1에서 배운 "결함은 일찍 발견할수록 싸다"가 스크럼에서 가장 구체적으로 적용되는 자리가 리파인먼트다.
슬라이싱은 여기에 한 가지를 더 준다. 작은 조각은 테스트 시점을 앞당긴다. 스토리가 크면 개발이 끝나는 시점이 스프린트 후반일 수밖에 없고, 그러면 레슨 1에서 본 몰림이 구조적으로 생긴다. "테스트할 시간이 없다"의 진짜 원인이 스토리 크기인 경우가 대부분이다.