개념
"애자일이라 테스트 계획이 없어요"
레슨 4에서 워터폴·스크럼·칸반을 비교하며 방법론이 테스트 시점을 결정한다는 것을 봤다. 이 레슨은 그중 스크럼 안에서 QA가 실제로 무엇을 하는지 를 이벤트 단위로 내려간다.
시작하기 전에 흔한 오해 하나를 정리하자.
"애자일이니까 문서와 계획이 없다" 는 애자일 선언의 오독이다. 선언은 "포괄적인 문서보다 작동하는 소프트웨어를", "계획을 따르기보다 변화에 대응하기를" 더 가치 있게 여긴다고 했다. 왼쪽 항목에도 가치가 있다 는 문장이 뒤에 붙어 있다.
실제로 바뀌는 것은 문서의 유무가 아니라 크기와 주기 다. 100쪽짜리 테스트 계획서가 한 번 나오는 대신, 짧은 전략 문서 하나와 스프린트마다 갱신되는 범위 판단이 있다. 모듈 4(레슨 1)에서 본 "애자일에서 계획이 축약되는 방식"이 그것이다.
스크럼 이벤트별로 QA가 하는 일
스크럼에는 정해진 이벤트가 있고, 각각에 QA의 자리가 있다.
| 이벤트 | QA가 하는 일 | 하지 않으면 생기는 일 |
|---|---|---|
| 백로그 리파인먼트 | 스토리의 모호함·테스트 가능성 지적, 인수기준 다듬기 | 스프린트 중반에 "이건 어떻게 동작해야 하죠?"가 나온다 |
| 스프린트 계획 | 테스트 공수를 추정에 포함, 위험한 스토리 표시 | 개발은 끝났는데 테스트할 시간이 없다 |
| 데일리 스크럼 | 막힌 검증, 재현 안 되는 결함 공유 | 스프린트 마지막 날 결함이 몰린다 |
| 스프린트 리뷰 | 실제 동작 시연, 알려진 제약 공유 | 이해관계자가 완성도를 오해한다 |
| 회고 | 결함 데이터·재작업 비율로 근거 제시 | 회고가 인상 비평으로 끝난다 |
가장 값이 큰 것은 첫 줄이다. 백로그 리파인먼트에서 스토리를 다듬는 일은 모듈 2(레슨 6)의 요구사항 리뷰이고, 여기서 잡은 모호함 하나가 스프린트 중반의 하루를 아낀다. 모듈 1에서 배운 "결함은 일찍 발견할수록 싸다"가 스크럼 이벤트로 구현되는 지점이다.
백로그의 계층 — 에픽·스토리·태스크
모듈 22(레슨 6)에서 Jira의 업무 항목 계층을 봤다. 여기서는 QA 관점의 의미를 짚는다.
에픽(Epic) "결제 수단 확대" ← 테스트 전략 수준
└ 스토리(Story) "카카오페이로 결제한다" ← 인수기준·테스트 조건 수준
└ 태스크(Task) "PG 연동 모듈 구현" ← 개발 작업 단위
"결제 회귀 케이스 작성" ← QA 작업도 태스크다마지막 줄을 강조한다. QA 작업을 태스크로 올리지 않으면 그 일은 스프린트에서 보이지 않는다. 모듈 22 레슨 6에서 한 이야기 그대로다 — "QA가 병목"이라는 말이 나오는데 정작 QA의 작업량이 어디에도 기록돼 있지 않은 상황을 막으려면, 테스트 설계·환경 구축·회귀 수행을 태스크로 올려야 한다.
좋은 사용자 스토리의 형태 도 알아둘 필요가 있다.
As a [누가] 신규 가입 고객으로서
I want [무엇을] 카카오페이로 결제하고 싶다
So that [왜] 카드 정보를 입력하지 않아도 되도록
인수기준(Acceptance Criteria)
· 결제 수단 선택 화면에 카카오페이가 노출된다
· 인증 실패 시 결제 수단 선택 화면으로 돌아온다
· 결제 완료 시 주문 상태가 '결제완료'로 바뀐다QA가 리파인먼트에서 던질 질문 은 대개 세 갈래다.
- "이 인수기준은 어떻게 확인합니까?" (테스트 가능성)
- "~하지 않으면 어떻게 됩니까?" (예외 흐름)
- "이건 이번 스토리 범위입니까?" (경계 확정)
세 번째가 특히 중요하다. 범위가 흐릿한 스토리는 "완료"를 판정할 수 없다. 그리고 판정할 수 없으면 스프린트 끝에 논쟁이 난다.
인수기준과 완료의 정의는 다르다
가장 자주 혼동되는 두 개념이다.
| 인수기준(Acceptance Criteria) | 완료의 정의(Definition of Done) | |
|---|---|---|
| 범위 | 스토리마다 다르다 | 모든 스토리에 공통 |
| 내용 | 이 기능이 무엇을 해야 하는가 | 어떤 상태여야 "끝"인가 |
| 예 | "인증 실패 시 선택 화면으로 돌아온다" | "코드 리뷰 승인, 단위 테스트 통과, 회귀 통과, 문서 갱신" |
| 누가 정하나 | PO + 팀 | 팀 전체 합의 |
| 언제 정하나 | 스토리마다 | 한 번 정하고 회고에서 개선 |
둘 다 있어야 한다. 인수기준만 있으면 "기능은 되는데 테스트도 문서도 없는" 상태로 완료 처리된다. DoD만 있으면 "절차는 다 밟았는데 원하는 기능이 아닌" 상태가 된다.
QA가 DoD에 넣을 것을 제안할 수 있다. 실무에서 잘 작동하는 항목들이다.
Definition of Done (예시)
□ 인수기준을 모두 충족한다
□ 코드 리뷰 승인
□ 단위 테스트 추가·통과
□ 회귀 테스트 통과 (CI 초록)
□ QA 검증 완료 (또는 QA가 검증 불필요로 판정)
□ 알려진 결함이 없거나, 있다면 등록되고 우선순위가 합의됨
□ 문서·릴리즈 노트 갱신
□ 기능 플래그 상태 확인'알려진 결함이 있다면 등록되고 합의됨' 이 실무적으로 중요하다. "결함 0건"을 DoD로 걸면 지켜지지 않는다. 대신 "묻히지 않았음" 을 조건으로 걸면 현실적이면서도 효과가 있다. 모듈 6(레슨 1)에서 배운 심각도·우선순위 판단이 여기서 쓰인다.
DoD를 정할 때 흔한 실수는 너무 이상적으로 만드는 것 이다. 지킬 수 없는 DoD는 곧 무시되고, 무시되는 순간 DoD는 없는 것과 같다. 처음에는 지킬 수 있는 수준으로 시작해 회고에서 한 항목씩 올린다.
스토리 추정 — QA 공수는 어디에 들어가는가
스크럼 팀은 대개 스토리 포인트 로 추정한다. 시간이 아니라 상대적 크기를 매기는 방식이다.
피보나치 수열을 쓰는 이유
1, 2, 3, 5, 8, 13, 21
→ 크기가 커질수록 불확실성도 커지므로 눈금을 성기게 둔다
→ "8이냐 9냐"를 논쟁하는 시간을 없앤다플래닝 포커 는 팀원이 동시에 카드를 내는 방식이다. 목적은 숫자 자체가 아니라 차이가 나는 이유를 드러내는 것 이다. 누군가 3을, 누군가 13을 냈다면 서로 다른 것을 보고 있다는 뜻이고, 그 대화에서 숨은 복잡도나 리스크가 나온다.
여기가 QA가 개입할 지점이다. 개발자가 3을 냈는데 QA가 8을 낼 수 있다. 이유는 대개 이렇다.
| QA가 크게 보는 이유 | 예 |
|---|---|
| 검증 조합이 많다 | 결제 수단 × 회원 등급 × 쿠폰 |
| 회귀 영향이 넓다 | 공통 모듈 변경 |
| 테스트 환경 준비가 필요하다 | 외부 PG 연동, 목 서버 |
| 데이터 준비가 어렵다 | 특정 상태의 계정이 필요 |
| 검증이 어렵다 | 비동기·배치·시간 의존 |
핵심 원칙: 스토리 포인트에는 개발 공수만이 아니라 완료까지의 모든 공수 가 들어가야 한다. 테스트를 빼고 추정하면, 스프린트 끝에 "개발은 끝났는데 아직 테스트 중"이라는 상태가 반복된다. 그리고 그건 스프린트가 실패했다는 뜻이다 — DoD를 못 채웠으므로.
기술 부채와 리팩터링에 QA가 대응하는 법
애자일 팀은 속도를 위해 의도적으로 기술 부채 를 지기도 한다. 문제는 그것이 기록되지 않을 때다.
QA가 할 수 있는 일이 셋이다.
1) 부채를 눈에 보이게 만든다. 백로그에 항목으로 올리고, 그 부채가 테스트에 어떤 비용을 만드는지 적는다. "이 모듈은 목 서버 없이는 테스트할 수 없어 매 스프린트 2시간이 든다" 같은 식이다. 모듈 11(레슨 4)의 자동화 부채와 같은 구조다.
2) 리팩터링을 검증 대상으로 다룬다. 모듈 9(레슨 11)에서 다룬 그대로 — "동작 변화 없음"은 주장이지 사실이 아니다. 리팩터링 스토리에는 회귀 범위를 함께 정한다. 테스트가 없는 코드를 리팩터링한다면 특성화 테스트가 먼저다(모듈 4 레슨 6).
3) 부채의 이자를 데이터로 보인다. 회고에서 "이 영역에서 결함이 전체의 40%가 나옵니다"라고 말할 수 있으면 부채 상환이 백로그에 올라간다. 모듈 6(레슨 5)의 결함 밀도가 여기서 쓰인다.
회고에서 QA가 낼 수 있는 것
회고가 인상 비평으로 흐르는 이유는 데이터가 없어서 다. QA는 데이터를 가진 사람이다.
| 가져갈 데이터 | 어떤 대화를 만드나 |
|---|---|
| 스프린트 중 발견 결함 수와 발견 시점 분포 | 결함이 마지막 날에 몰리는가 |
| 재오픈된 결함 수 | 수정 품질 또는 재현 정보의 문제 |
| 영역별 결함 밀도 | 부채가 쌓인 곳이 어디인가 |
| 검증 대기 시간 | 개발 완료 후 검증까지 얼마나 걸리나 |
| 스프린트 중 범위 추가 건수 | 계획이 지켜지는가 |
'발견 시점 분포'가 가장 강력하다. 결함이 스프린트 마지막 이틀에 몰려 있다면 그건 QA가 늦게 시작했다는 뜻이 아니라 개발 완료가 늦게 몰렸다는 뜻 일 가능성이 높다. 이 그래프 하나가 "테스트 시간이 부족하다"는 말보다 훨씬 강하게 전달된다.
지속적 통합이 애자일 QA의 전제다
스프린트마다 동작하는 소프트웨어를 내놓으려면 통합이 자동이어야 한다. 모듈 14 전체가 이 이야기이고, 애자일 관점에서 QA가 확인할 것은 셋이다.
- CI가 초록인 상태가 기본인가 — 빨간 채로 며칠 방치되면 신호가 죽는다
- 회귀 테스트가 매 병합마다 도는가 — 아니면 스프린트 끝에 몰린다
- DoD에 CI 통과가 들어 있는가 — 들어 있지 않으면 "나중에 고칠게요"가 반복된다
스프린트 중간에 범위가 바뀔 때
스크럼에서 스프린트 범위는 원칙적으로 고정이지만, 실무에서는 긴급 요청이 들어온다. QA가 그때 할 일이 정해져 있다.
| 들어온 것 | QA가 확인할 것 |
|---|---|
| 긴급 결함 수정 | 무엇을 빼는가. 넣기만 하면 전부 밀린다 |
| 작은 요청("한 줄만") | 인수기준이 있나. 없으면 검증 기준도 없다 |
| 다른 팀의 인터페이스 변경 | 우리 쪽 회귀 범위가 늘어나나 |
| 운영 긴급 배포 | 스프린트 검증과 별도 경로로 처리되나 |
첫 줄이 핵심이다. "넣자" 는 결정에 "대신 무엇을 빼는가" 를 붙이지 않으면, 스프린트 끝에 전부 미완으로 남는다. 이 질문은 PM의 일처럼 보이지만 실제로 밀리는 것을 먼저 보는 사람이 QA이므로 꺼내기 좋은 자리다.
네 번째도 중요하다. 운영 긴급 배포는 스프린트 리듬 밖에 있으므로, 별도의 짧은 검증 경로(스모크 + 영향 범위 확인)를 미리 합의해 둬야 한다. 없으면 긴급할 때마다 검증을 건너뛰게 된다.
애자일 확산 — 팀을 넘어설 때
한 팀이 애자일을 잘해도 조직 전체가 워터폴이면 마찰이 생긴다. QA가 자주 마주치는 형태들이다.
| 상황 | QA에게 생기는 일 |
|---|---|
| 개발은 2주 스프린트, 릴리즈는 분기 1회 | 검증한 것과 배포되는 것 사이에 시차가 크다 |
| 여러 팀이 각자 스프린트, 통합은 마지막에 | 통합 테스트가 병목 이 된다 |
| 외부 협력사가 워터폴 | 인터페이스 변경이 늦게 온다 |
두 번째가 특히 흔하다. 팀별로는 다 초록인데 합치면 깨진다. 대응은 모듈 12에서 배운 계약 테스트 다 — 통합을 마지막에 몰지 않고 각 팀이 계약을 지키는지 상시 검증하는 구조.
사례 — DoD 한 줄이 바꾼 스프린트
2주 스프린트를 돌리는데 매번 마지막 이틀에 QA가 몰리고, 결함이 나오면 다음 스프린트로 밀리는 팀이었다. 회고마다 "시간이 부족하다" 가 나왔고 대책은 "다음엔 좀 더 일찍 주세요" 였다.
QA가 회고에 숫자를 가져갔다.
| 데이터 | 값 |
|---|---|
| 스토리가 QA에 도착한 시점 | 평균 스프린트 8.5일차(10일 중) |
| 결함 수정 후 재검증까지 | 평균 1.5일 |
| 다음 스프린트로 밀린 스토리 | 3스프린트 연속 4~6건 |
두 숫자를 나란히 놓자 결론이 자동으로 나왔다 — 8.5일차에 도착해서 재검증까지 1.5일이 걸리면 10일 안에 끝날 수가 없다. 역량이 아니라 산수였다(레슨 4의 전환 사례와 같은 구조).
바꾼 것은 DoD에 한 줄이었다.
기존: 개발 완료 + 코드 리뷰 통과 변경: 개발 완료 + 코드 리뷰 통과 + QA 검증 통과
이 한 줄의 효과가 연쇄로 왔다.
| 생긴 변화 | 왜 |
|---|---|
| 스토리가 작아졌다 | 10일 안에 검증까지 끝나야 하므로 |
| 개발이 먼저 끝나는 것만으로 "완료" 가 안 됐다 | 추정에 검증 시간이 포함됐다 |
| 개발자가 먼저 QA에게 보여 주기 시작했다 | 마지막에 몰리면 자기 스토리가 못 닫힌다 |
| 리파인먼트에 QA가 불렸다 | 인수기준이 모호하면 검증이 늦어지니까 |
세 번째가 가장 컸다. 그전까지 QA 몰림은 "QA의 문제" 였는데, DoD가 바뀌자 개발자에게도 자기 문제가 됐다. 구조를 바꾸면 사람을 설득할 필요가 줄어든다.
석 달 뒤 밀린 스토리가 스프린트당 1건 이하가 됐다. 다만 첫 스프린트는 오히려 나빠졌다 — 완료 처리되는 스토리 수가 줄어 속도가 떨어진 것처럼 보였다. 그 구간을 팀에 미리 설명해 두지 않으면 한 번에 되돌려진다.
실무에서 왜 필요한가
애자일 팀에서 QA가 겪는 가장 흔한 어려움은 "테스트할 시간이 없다" 이다. 그런데 이 문제의 원인은 대부분 스프린트 후반이 아니라 앞쪽에 있다. 추정에 테스트 공수가 안 들어갔거나, DoD에 검증이 없거나, 스토리가 모호한 채로 개발에 들어갔거나.
이 레슨의 내용은 전부 그 앞쪽을 손보는 방법이다. 리파인먼트에서 질문을 던지고, 추정에 참여하고, DoD를 합의하고, 회고에 데이터를 가져간다. 시간을 더 달라고 하는 대신 구조를 바꾸는 접근 이다.
채용 관점에서도 신호가 된다. "애자일 환경에서 QA 경험"은 공고에 흔히 적히는 문구인데, 실제로 요구되는 것은 스크럼 용어를 아는 것이 아니라 이벤트마다 무엇을 기여했는지 말할 수 있는가 다. "리파인먼트에서 인수기준의 예외 흐름을 짚어 스프린트 중 재작업을 줄였습니다"는 구체적인 답이다.
채용시장에서의 위치
"애자일 환경 QA 경험" 은 거의 모든 공고에 적힌다. 그래서 이 항목은 가점이 아니라 통과 조건이고, 변별력은 이벤트마다 무엇을 기여했는지에서 나온다.
| 질문 | 약한 답 | 강한 답 |
|---|---|---|
| "스프린트에서 QA는 무엇을 하세요?" | "개발 끝나면 테스트합니다" | "리파인먼트에서 인수기준의 예외 흐름을 짚고, 추정에 검증 공수를 넣고, DoD로 완료를 판정합니다" |
| "인수기준과 DoD 차이가 뭐죠?" | "비슷합니다" | "인수기준은 스토리마다 다르고, DoD는 모든 스토리에 공통으로 적용됩니다" |
| "테스트할 시간이 없으면요?" | "야근하거나 다음으로 미룹니다" | "원인이 앞쪽에 있습니다. 도착 시점과 재검증 시간을 재서 산수로 보여 줬습니다" |
| "회고에서 뭘 말하세요?" | "개선점을 이야기합니다" | "데이터를 가져갑니다. 느낌은 반박되지만 숫자는 결론이 자동으로 나옵니다" |
| "DoD를 바꿔 본 적 있어요?" | "없습니다" | "QA 검증 통과를 넣었습니다. 그 뒤로 몰림이 QA만의 문제가 아니게 됐습니다" |
세 번째와 다섯 번째가 리드 역량을 가른다. "시간이 없다" 를 구조의 문제로 바꿔 본 사람과 개인의 노력으로 버틴 사람의 차이가 거기서 드러난다.
특히 다섯 번째는 합의를 끌어낸 경험이라 무게가 다르다. DoD 변경은 팀 전체의 일하는 방식을 바꾸는 것이고, 그것을 통과시켰다면 설득과 데이터를 모두 써 본 사람이다.
두 번째는 기본 질문인데 의외로 많이 틀린다. 인수기준은 스토리별, DoD는 전체 공통 — 이 한 줄만 정확히 말해도 다르게 읽힌다.
공고 표현으로는 "스크럼 환경", "애자일 QA", "Shift-Left", "테스트 전략 수립", "크로스 펑셔널 팀 협업" 이 이 레슨에 걸린다. 그리고 ISTQB Agile Tester 자격이 이 범위를 그대로 다룬다.