개념
스테이지 1에서 배운 것은 "어떻게 테스트를 설계하는가"였다. 모듈 3 마지막 레슨에서 하나의 기능에 여러 기법을 조합해 20개짜리 테스트 케이스 목록을 만들어봤다. 그런데 실무에서는 그 앞에 반드시 붙는 질문이 있다 — 누가, 언제까지, 어디까지, 무엇을 근거로 끝났다고 말할 것인가. 이 질문에 대한 답을 글로 적어둔 것이 테스트 계획서다.
전략(Strategy)과 계획(Plan)의 차이
두 단어가 비슷해 보이지만 가리키는 범위가 다르다.
| 테스트 전략 | 테스트 계획 | |
|---|---|---|
| 범위 | 조직·제품 전반의 일관된 방침 | 이번 릴리즈·프로젝트에 대한 구체적 실행안 |
| 수명 | 오래 유지됨 (분기~연 단위로 갱신) | 릴리즈마다 새로 작성되거나 조정됨 |
| 질문 | "우리는 테스트를 어떻게 대하는가" | "이번에는 무엇을 어떻게 할 것인가" |
| 바뀌는 계기 | 조직 개편, 기술 스택 변경, 큰 사고 | 매 릴리즈, 범위 변경, 일정 변경 |
| 예시 | "우리는 자동화 피라미드를 따르고, 회귀는 최대한 자동화한다" | "이번 릴리즈는 결제 모듈이 신규라 수동 탐색적 테스트를 40% 배정한다" |
전략은 "우리 조직은 테스트를 어떻게 대하는가"라는 큰 방향이고, 계획은 그 방향을 이번 상황(이번 릴리즈, 이번 기능)에 구체적으로 적용한 것 이다. 계획은 전략을 벗어나지 않으면서도, 이번 릴리즈만의 특수 사정(신규 모듈, 촉박한 일정 등)을 반영해 조정된다.
구분이 헷갈릴 때 쓰는 간단한 판별법이 있다. 그 문장 앞에 "이번 릴리즈에서는"을 붙여보는 것 이다. 자연스럽게 붙으면 계획이고, 어색하면 전략이다. "이번 릴리즈에서는 회귀 테스트를 가능한 자동화한다"는 어색하다 — 그건 매번 그렇게 하기로 한 방침, 즉 전략이다. "이번 릴리즈에서는 결제 회귀를 수동으로 한 번 더 돈다"는 자연스럽다 — 이번만의 결정, 즉 계획이다.
테스트 계획서의 핵심 구성 요소
무겁고 형식적인 문서일 필요는 없다 — 위키 페이지 한 장으로도 충분할 때가 많다. 다만 아래 요소는 빠지지 않아야 한다.
| 구성 요소 | 담을 내용 |
|---|---|
| 범위 (Scope) | 무엇을 테스트하고, 무엇을 이번엔 테스트하지 않는가 |
| 테스트 대상 | 어떤 기능·모듈이 이번 릴리즈에 포함되는가 |
| 접근법 | 어떤 테스트 레벨(모듈 1)과 유형을 어떻게 조합할 것인가 |
| 일정·리소스 | 언제까지, 누가, 어떤 환경에서 |
| 리스크와 대응 | 무엇이 위험하고 어떻게 다룰 것인가 (레슨 2에서 자세히) |
| 진입·종료 기준 | 언제 테스트를 시작하고, 언제 끝낼 것인가 (레슨 4에서 자세히) |
| 산출물 | 무엇을 남길 것인가 (테스트 케이스, 결함 리포트, 결과 보고서) |
이 표의 항목 하나하나가 이후 레슨들의 주제이기도 하다 — 이 레슨은 전체 지도를 펼치는 역할이고, 나머지 레슨들이 "리스크와 대응", "진입·종료 기준" 같은 개별 항목을 깊게 채운다.
각 칸을 실제로 어떻게 채우는가
항목 이름을 외우는 것은 어렵지 않다. 어려운 건 그 칸에 무슨 문장을 쓰느냐 다. 같은 항목이라도 쓰는 방식에 따라 아무 쓸모 없는 칸이 되기도 하고, 릴리즈 내내 누군가 다시 열어보는 칸이 되기도 한다. "장바구니에 수량 일괄 변경 기능 추가"라는 가상의 릴리즈로 양쪽을 나란히 놓아보자.
| 항목 | 죽은 칸 | 살아 있는 칸 |
|---|---|---|
| 범위 | "장바구니 기능 전반" | "포함 — 수량 일괄 변경 UI, 재고 초과 처리, 금액 재계산. 제외 — 쿠폰 재계산 로직(이번 릴리즈 미변경), 다국어 문구 품질" |
| 테스트 대상 | "웹과 앱" | "웹 Chrome·Safari 최신 2개 버전, Android 앱 12.3 이상. iOS는 이번 릴리즈 빌드가 없어 대상 아님" |
| 접근법 | "기능 테스트와 회귀 테스트를 수행한다" | "신규 UI는 탐색적 세션 90분 2회, 금액 계산은 결정 테이블 기반 케이스로 자동화, 회귀는 기존 스위트 중 cart·checkout 태그만 실행" |
| 리소스 | "QA 2명" | "QA 2명이나 그중 1명은 3/12~14 타 프로젝트 릴리즈와 겹쳐 실질 1.5명. 스테이징 DB는 결제팀과 공유라 3/13 오전은 사용 불가" |
| 일정 | "3월 중 완료" | "3/11 빌드 인수 → 3/11~13 1차 실행 → 3/14 수정 반영 → 3/15 회귀 → 3/16 결과 공유. 빌드가 하루 밀리면 회귀 범위를 절반으로 줄인다" |
| 리스크 | "일정이 지연될 수 있음" | "재고 동시성 결함이 나오면 수정에 3일 이상 걸릴 가능성 → 3/11 첫날에 동시성 케이스를 먼저 실행해 조기에 드러낸다" |
| 산출물 | "테스트 결과를 보고한다" | "TC는 Confluence QA-2481, 결함은 Jira CART 프로젝트에 release-3.4 라벨, 종료 시 1페이지 요약 리포트를 릴리즈 채널에 공유" |
오른쪽 칸들이 왼쪽보다 길어서 좋은 게 아니다. 셋 중 하나라도 갖췄기 때문에 좋다.
- 검증 가능한가. "3월 중 완료"는 3월 31일에도 참이다. "3/16 결과 공유"는 3월 17일에 거짓이 된다. 참·거짓을 가릴 수 있어야 계획이다.
- 결정이 담겼는가. "기능 테스트와 회귀 테스트를 수행한다"에는 아무 결정이
없다 — 어느 프로젝트에 복사해 넣어도 맞는 말이다. 반대로 "회귀는
cart·checkout태그만"에는 "나머지는 안 돈다"는 결정이 들어 있다. - 제약이 드러나는가. "QA 2명"은 사실이지만, "그중 1명이 3일간 반쯤 빠진다"가 진짜 계획에 영향을 주는 정보다. 살아 있는 칸은 자원의 이상적인 숫자가 아니라 실제로 쓸 수 있는 양 을 적는다.
칸을 다 채운 뒤에 스스로 물어볼 질문은 하나다. "이 문장을 지우면 누가 곤란해지는가?" 아무도 곤란해지지 않는 문장은 지워도 되는 문장이고, 그런 문장이 절반 넘게 쌓인 순간 그 문서는 아무도 안 읽는 문서가 된다.
특히 접근법 칸이 가장 자주 죽는다. "기능·회귀·성능 테스트를 수행한다"처럼 테스트 유형 이름만 나열하는 형태로 채워지기 때문이다. 접근법 칸의 목적은 유형을 나열하는 게 아니라 한정된 시간을 어디에 얼마나 쓸지 배분하는 것 이다. 모듈 3에서 배운 기법 이름이 여기서 그대로 쓰인다 — "금액 계산은 결정 테이블, 신규 UI는 탐색적"이라고 적으면 읽는 사람이 왜 그렇게 나눴는지까지 이해한다.
범위는 "무엇을 안 할지"도 포함한다
계획서에서 가장 자주 빠지는 부분이 "이번엔 테스트하지 않는 것"을 명시하는 일 이다. "다국어 번역 품질은 이번 릴리즈에서 테스트 범위에서 제외한다"처럼 명시적으로 적어두면, 나중에 "그거 왜 안 봤어요?"라는 질문에 "계획서에 범위 밖으로 합의했습니다"라고 답할 수 있다. 암묵적으로 빠진 것과 명시적으로 뺀 것은 책임 소재가 완전히 다르다.
여기서 한 걸음 더 나가면 좋다. 제외한 이유까지 한 줄로 적는 것 이다.
| 제외 항목만 적을 때 | 이유까지 적을 때 |
|---|---|
| "다국어 문구 품질 — 제외" | "다국어 문구 품질 — 제외. 이번 릴리즈에 문구 변경이 없고, 번역 검수는 콘텐츠팀 프로세스로 별도 진행" |
| "성능 테스트 — 제외" | "성능 테스트 — 제외. 트래픽 패턴 변화가 없다는 개발팀 판단에 근거. 변경 시 재검토 필요" |
이유가 붙으면 두 가지가 달라진다. 첫째, 전제가 깨졌을 때 다시 열어볼 수 있다. "트래픽 패턴 변화가 없다"는 전제가 릴리즈 도중 무너지면 그 줄을 다시 읽고 판단을 뒤집을 수 있다. 둘째, 제외가 QA 혼자의 결정이 아니게 된다. "개발팀 판단에 근거"라고 적힌 순간 그 판단은 공유된 결정이 된다. 모듈 2의 요구사항 리뷰에서 배운 "결정권은 넘기고 근거는 남긴다"가 계획서에서도 똑같이 작동한다.
조직 규모에 따라 달라지는 모습
전략과 계획이라는 두 층은 어느 조직에나 있다. 다만 문서로 존재하느냐, 사람 머릿속에 있느냐 가 규모에 따라 달라진다. 같은 원리가 어떻게 다른 형태로 나타나는지 보자.
| 스타트업 (QA 1~3명) | 중견 (QA 팀 존재) | 대기업·규제 산업 | |
|---|---|---|---|
| 전략 | 문서가 없다. 리드의 머릿속·구두 합의 | 팀 위키에 한 페이지. 분기마다 손봄 | 정식 문서. 품질 정책 → 조직 전략으로 계층화 |
| 계획 | 릴리즈 티켓에 몇 줄, 또는 노션 한 장 | 릴리즈마다 템플릿 기반 1~3페이지 | 승인 절차가 붙은 정식 산출물 |
| 승인 | 없음. 슬랙 👍 하나 | 팀장 확인, 개발 리드 리뷰 | 서명·승인 이력이 남고 감사 대상 |
| 갱신 | 갱신이라는 개념이 거의 없음 | 범위 변경 시 수정, 이력 남김 | 변경 관리 절차를 거쳐 버전 관리 |
| 실패 양상 | 사람이 바뀌면 방침이 통째로 사라짐 | 위키가 낡아 실제와 어긋남 | 문서가 두꺼워져 아무도 안 읽음 |
스타트업에서 "전략 문서가 없다"는 게 전략이 없다는 뜻은 아니다. "우리는 신규 기능은 무조건 손으로 한 번 훑고 내보낸다" 같은 방침은 존재한다. 다만 적혀 있지 않아서, 그 방침을 아는 사람이 퇴사하면 함께 사라진다. 신입 QA가 스타트업에서 가장 크게 기여할 수 있는 지점이 여기다 — 이미 다들 그렇게 하고 있는 방침을 위키 한 페이지로 적어놓는 것 만으로 조직에 전략 층이 생긴다.
중견 조직의 함정은 반대다. 위키에 전략 문서가 있긴 한데 2년 전에 쓰였고, 그사이 자동화 도구도 바뀌고 배포 주기도 바뀌었다. 이때 계획서가 낡은 전략을 형식적으로 인용하면 계획서까지 같이 신뢰를 잃는다. 전략 문서에는 마지막 검토 날짜와 다음 검토 예정일 을 박아두는 것이 실무적으로 효과가 크다.
규제 산업(의료기기·금융·자동차)에서는 계획서 자체가 규제 대응 산출물이다. "우리가 이런 계획으로 이만큼 테스트했다"는 것을 외부 감사에 증명해야 하므로 형식과 승인 절차가 필수다. 이 맥락은 모듈 8에서 표준과 함께 자세히 다룬다. 중요한 건 형식이 무거운 이유가 관료주의가 아니라 증명 책임 때문 이라는 점이다. 증명할 필요가 없는 조직이 그 형식만 흉내 내면 비용만 남는다.
아무도 안 읽는 계획서 vs 실제로 쓰이는 계획서
100페이지짜리 테스트 계획서를 만들어놓고 아무도 열어보지 않는 광경은 흔하다. 분량이 문제가 아니라 분량이 생긴 이유 가 문제다. 죽은 문서에는 공통점이 있다.
| 죽는 이유 | 실제로 벌어지는 일 |
|---|---|
| 보일러플레이트가 절반 이상 | 지난 릴리즈 문서를 복사하고 제목만 바꿔서, 읽는 사람이 새 정보를 찾지 못한다 |
| 결정이 아니라 설명이 적혀 있다 | "회귀 테스트란 기존 기능이 깨지지 않았는지 확인하는 활동이다" — 용어 설명은 계획이 아니다 |
| 갱신 비용이 너무 크다 | 범위가 바뀌어도 100페이지를 고칠 엄두가 안 나서 방치되고, 방치된 순간 신뢰를 잃는다 |
| 독자가 정의되지 않았다 | PM·개발·경영진·감사자에게 다 쓰려다 아무에게도 안 맞는 문서가 된다 |
| 읽는 비용이 얻는 정보보다 크다 | 궁금한 건 "내 기능이 범위에 있나" 하나인데 그걸 찾는 데 10분이 걸린다 |
반대로 한 장짜리 계획이 더 많이 읽히는 이유는 단순하다. 읽는 데 2분이 걸리고, 고치는 데 5분이 걸리기 때문 이다. 고치기 쉬우면 실제로 고쳐지고, 고쳐진 문서는 현실과 일치하고, 현실과 일치하는 문서는 사람들이 다시 열어본다. 이 순환이 문서를 살린다.
그래서 계획서의 분량은 읽을 사람의 수와 그들이 내려야 할 결정의 수 로 정해진다. 다음 질문으로 점검해보자.
- 이 문서를 열어볼 사람이 누구인지 한 명이라도 이름을 댈 수 있는가?
- 그 사람이 이 문서에서 찾으려는 정보가 첫 화면 안에 있는가?
- 범위가 바뀌었을 때 5분 안에 고칠 수 있는가?
- 다른 릴리즈 계획서와 비교했을 때 다른 문장 이 절반을 넘는가?
- 이 문서를 없애면 실제로 곤란해지는 대화가 있는가?
5번에서 막힌다면 그 문서는 이미 죽었다고 봐도 된다.
문서의 목적은 합의를 만드는 것이지 분량을 채우는 게 아니다. 계획서가 좋은 문서인지 판정하는 최종 기준은 딱 하나다 — 그 문서를 근거로 누군가와 대화가 성립했는가. PM이 "이 기능 범위에 있나요?"라고 물었을 때 링크 하나로 답이 끝났다면 그 계획서는 제 역할을 한 것이다.
애자일에서 계획은 어떻게 축약되는가
2주 스프린트에서 매번 정식 테스트 계획서를 쓰는 팀은 거의 없다. 그렇다고 계획이 사라진 것은 아니고, 여러 곳으로 흩어져 자리를 잡는다.
| 전통적 계획서의 항목 | 애자일에서 사는 곳 |
|---|---|
| 범위 | 스프린트 백로그 + 각 스토리의 인수 조건(AC) |
| 테스트 대상 | 스프린트에 담긴 티켓 목록 그 자체 |
| 접근법 | 팀의 완료 정의(DoD)와 테스트 전략 위키 |
| 일정·리소스 | 스프린트 기간과 팀 캐파시티 |
| 진입·종료 기준 | 완료 정의(DoD), 릴리즈 체크리스트 |
| 리스크 | 스프린트 계획 회의에서의 논의, 리스크 보드 |
| 산출물 | 티켓에 첨부되는 TC와 결함, 스프린트 리뷰 |
즉 애자일에서 계획서가 얇아지는 것은 항목을 버려서가 아니라 이미 다른 곳에 있는 것을 중복해 적지 않기 때문 이다. 여기서 흔한 오해가 생긴다. "애자일이니까 계획은 필요 없다"는 말은 대개 완료 정의도 리스크 논의도 없는 팀 의 자기변호로 쓰인다. 애자일 선언문도 계획을 버리라고 하지 않았다 — 계획을 따르는 것보다 변화에 대응하는 것에 더 가치를 둔다고 했을 뿐, 계획 자체는 왼쪽 항목으로 남아 있다.
그래서 아무리 축약해도 사라지면 안 되는 최소 세 항목 이 있다.
| 최소 항목 | 사라지면 생기는 일 |
|---|---|
| 범위 (특히 제외) | 스프린트 후반에 "이것도 봐주세요"가 무한히 들어온다 |
| 종료 조건 | "다 됐나요?"에 아무도 답하지 못해 릴리즈 판단이 감으로 이뤄진다 |
| 리스크 | 위험한 것부터 보지 못하고 티켓 번호 순으로 테스트하게 된다 |
스프린트 단위 계획은 이 정도면 충분하다.
스프린트 24 — 장바구니 수량 일괄 변경
대상: CART-812, CART-815, CART-820
범위 밖: 쿠폰 재계산(미변경), 다국어 문구
접근: 신규 UI 탐색적 90분 x2, 금액 계산 자동화, 회귀는 cart/checkout 태그
리스크: 재고 동시성(수정 3일 예상) -> 첫날 우선 실행
종료: 심각도 높음 0건, 계획 케이스 95% 실행, DoD 충족여섯 줄이다. 읽는 데 30초, 고치는 데 1분이면 된다. 그리고 이 여섯 줄은 앞서 본 7개 구성 요소를 하나도 빠뜨리지 않았다 — 테스트 대상·범위·접근법·리스크·종료 조건이 모두 있고, 일정은 스프린트 기간이며, 산출물은 팀의 기본 규칙을 따른다. 계획서를 줄이는 올바른 방법은 항목을 빼는 게 아니라 각 항목을 한 줄로 줄이는 것 이다.
표준(ISO/IEC/IEEE 29119)과의 대응
모듈 8에서 국제 표준 ISO/IEC/IEEE 29119를 자세히 다루는데, 미리 연결해두면 표준이 낯설지 않다. 표준이 요구하는 문서 구조는 이 레슨에서 배운 것과 거의 그대로 대응한다.
| 이 레슨의 개념 | 29119에서의 위치 |
|---|---|
| 조직 차원의 방침 | 테스트 정책(Test Policy) — 조직 테스트 프로세스 |
| 테스트 전략 | 조직 테스트 전략(Organizational Test Strategy) |
| 이번 릴리즈의 테스트 계획 | 테스트 계획(Test Plan) — 관리 테스트 프로세스 |
| 범위·접근법·리스크·일정·산출물 | 테스트 계획 문서의 표준 항목 (Part 3) |
| 진입·종료 기준 | 테스트 완료 기준, 완료 보고서로 이어짐 |
표준이 하는 일은 새로운 개념을 추가하는 것이 아니라, 이미 필요한 항목에 공통된 이름과 순서를 붙여주는 것 이다. 그래서 표준을 먼저 외우고 실무로 내려오면 어렵고, 이 레슨처럼 "왜 이 칸이 필요한가"를 먼저 이해한 뒤 표준을 보면 "아, 이게 그거였구나"가 된다. 모듈 8은 그 순서를 전제로 쓰여 있다.
실무에서 왜 필요한가
계획서가 없으면 테스트는 그때그때 즉흥적으로 이뤄지고, 이해관계자는 "이게 테스트됐는지 안 됐는지" 알 방법이 없다. PM이 "이 기능 테스트 범위에 포함되나요?"라고 물었을 때 계획서를 보면 바로 답할 수 있어야 한다. 계획서는 QA 혼자 보는 문서가 아니라 개발·기획과 기대치를 맞추는 커뮤니케이션 도구 이기도 하다.
첫째, 협상의 근거가 된다. 일정이 밀렸을 때 "시간이 부족합니다"는 논의를
만들지 못한다. 계획서가 있으면 "회귀 전체를 돌면 이틀, cart 태그만 돌면
반나절입니다. 후자를 택하면 결제 연동 회귀가 빠집니다"라고 무엇을 잃는지 명시한
선택지 를 내놓을 수 있다. 모듈 3 마지막 레슨에서 연습한 "덮은 것 / 안 덮은 것 /
추가 비용" 화법이 릴리즈 단위로 확장된 형태다.
둘째, 책임 경계를 만든다. 사고가 났을 때 가장 먼저 나오는 질문은 "QA는 뭐 했나요"다. 이때 필요한 건 변명이 아니라 그 항목이 어디에 있었는지 다. 범위 안이었다면 왜 못 잡았는지를 회고하면 되고, 범위 밖이었다면 왜 제외했는지 근거를 보여주면 된다. 둘 다 아니면 — 계획서에 아예 언급이 없다면 — 그게 진짜 문제다.
셋째, 나중에 온 사람이 이어받을 수 있다. 담당자가 바뀌었을 때 계획서가 없으면 새 담당자는 "지난 릴리즈에 뭘 어떻게 봤는지"를 알 방법이 없어서 전부 처음부터 한다. 계획서 몇 장이 인수인계 며칠을 줄인다.
넷째, 이후 모든 레슨이 이 문서 위에 올라간다. 레슨 2의 리스크 기반 우선순위는 계획서의 "리스크" 칸을 채우는 방법이고, 레슨 3의 커버리지 계획은 "접근법" 칸을, 레슨 4의 종료 조건은 "진입·종료 기준" 칸을, 레슨 5의 Go/No-Go는 그 종료 조건을 실제 판단으로 바꾸는 절차다. 이 레슨을 지도라고 부른 이유가 이것이다.