본문으로 건너뛰기
입문약 20분

테스트 관리 도구: TestRail·Zephyr로 테스트 케이스 관리하기

이슈 추적 도구가 "무엇이 잘못됐는가"를 다룬다면, 테스트 관리 도구는 "무엇을 테스트했는가"를 다룬다. 두 도구의 역할 차이와 공통 개념을 익힌다.

  • #테스트관리도구
  • #TestRail
  • #Zephyr

개념

모듈 6의 결함 목록은 찾은 것의 기록이다. 그런데 릴리즈 판단에는 질문이 하나 더 있다 — "무엇을 봤는가". 이 두 질문은 전혀 다르고, 결함 목록으로는 두 번째에 답할 수 없다.

결함이 한 건도 없는 영역을 생각해 보자. 두 가지 뜻이 가능하다.

  • 그 영역을 충분히 봤고 괜찮았다
  • 그 영역을 아예 안 봤다

결함 목록에서는 둘이 똑같이 비어 있다. 구분하려면 "본 것" 을 따로 기록해야 하고, 그 기록을 다루는 도구가 테스트 관리 도구다.

병원 비유가 맞아떨어진다. 결함 목록은 진단 기록(무엇이 발견됐나)이고 테스트 기록은 검사 항목표(어떤 검사를 했나)다. 검사 항목표가 없으면 "이상 없음" 이 정말 괜찮은 것인지 검사를 안 한 것인지 알 수 없다.

이슈 추적 도구와 테스트 관리 도구는 목적이 다르다

모듈 6(레슨 4)에서 Jira 같은 이슈 추적 도구를 다뤘다 — 결함이 발견부터 종결까지 어떤 상태를 거치는지 추적하는 도구였다. 테스트 관리 도구(TestRail, Zephyr, qTest 등)는 질문 자체가 다르다.

도구핵심 질문
이슈 추적 도구 (Jira 등)이 결함이 지금 어떤 상태인가?
테스트 관리 도구 (TestRail 등)이번 릴리스에서 어떤 테스트를 실행했고, 결과가 어땠는가?

차이를 네 축으로 보면 더 분명해진다.

축이슈 추적 도구테스트 관리 도구
저장하는 것발견된 문제계획한 확인 항목과 그 결과
시간축결함 하나의 일생릴리즈 회차마다 반복
주로 쓰는 사람QA·개발·PM 모두주로 QA
답하는 질문"이건 어떻게 됐나""우리가 무엇을 안 봤나"

마지막 줄이 이 레슨의 존재 이유다. 모듈 6 레슨 5에서 본 커버리지와 "못 한 것" 을 보고할 수 있는 근거가 여기서 나온다. 기록이 없으면 보고서의 "못 한 것" 절은 기억으로 쓰게 되고, 기억은 빠진다.

테스트 관리 도구의 핵심 개념

  • 테스트 케이스(Test Case) — 모듈 3에서 설계한 테스트 케이스를 구조화된 형태(사전조건·절차·기대결과)로 저장하는 저장소 역할
  • 테스트 스위트(Test Suite) — 관련된 테스트 케이스를 묶은 그룹 (예: "로그인 스위트", "결제 스위트")
  • 테스트 실행(Test Run) — 특정 시점(예: 릴리스 직전)에 어떤 스위트를 실행했고, 각 케이스가 통과/실패/보류 중 무엇이었는지 기록
  • 트레이서빌리티(Traceability) — 요구사항 → 테스트 케이스 → 실행 결과 → (실패 시) 결함으로 이어지는 연결고리. 모듈 2에서 배운 요구사항 기반 테스트 설계가 실제로 "몇 % 커버됐는지" 확인하는 근거가 된다

가장 중요한 구조 — 저장소와 실행이 분리된다

도구를 처음 보면 혼란스러운 지점이 여기다. 케이스는 한 번 쓰고, 실행은 회차마다 새로 만든다.

[케이스 저장소]                 [실행 런]
  로그인 스위트                  v2.14 릴리즈 런
   ├ TC-001 정상 로그인    ──┐    ├ TC-001  Pass
   ├ TC-002 비밀번호 오류  ──┼──▶ ├ TC-002  Pass
   └ TC-003 계정 잠금      ──┘    └ TC-003  Fail → BUG-512
 
                                v2.15 릴리즈 런
                           ──▶   ├ TC-001  Pass
                                 ├ TC-002  Fail → BUG-530
                                 └ TC-003  Pass

이 구조가 주는 것이 이력이다. 케이스 자체는 하나인데 실행 기록은 릴리즈마다 쌓이므로, "TC-002가 최근 5회 중 3회 실패했다" 를 볼 수 있다. 스프레드시트에서 결과를 덮어쓰면 이 정보가 영원히 사라진다.

실무에서 가장 흔한 실수도 여기서 나온다. 케이스 본문에 결과를 적어 버리는 것이다. "TC-003 — 계정 잠금 (실패)" 처럼 쓰면 다음 회차에 지워야 하고, 이력이 남지 않는다.

케이스 하나는 무엇으로 이루어지나

모듈 3에서 설계한 케이스를 도구에 넣을 때의 형태다.

항목내용자주 비는 칸
제목무엇을 확인하는가—
사전 조건시작 상태(계정·데이터·설정)가장 많이 빈다
절차번호 매긴 단계—
기대 결과각 단계 또는 마지막 결과—
우선순위이 케이스가 얼마나 중요한가자주 빈다
사후 정리되돌릴 것(만든 데이터 삭제 등)거의 비어 있다

사전 조건이 비면 케이스가 재사용되지 않는다. 쓴 사람만 실행할 수 있는 케이스가 되고, 다른 사람이 돌리면 "안 되는데요" 가 된다. 모듈 6 레슨 2의 환경 정보와 같은 문제다.

좋은 케이스의 조건은 셋으로 요약된다.

  • 혼자 성립한다 — 다른 케이스를 먼저 실행해야 한다는 전제가 없다
  • 한 가지를 확인한다 — 통과·실패 판정이 하나로 갈린다
  • 누가 봐도 같은 판정 — 기대 결과가 "정상 동작" 처럼 모호하지 않다

세 번째가 자주 깨진다. "화면이 정상적으로 표시된다" 는 사람마다 판정이 다르다. "상품명·가격·재고 세 항목이 모두 표시된다" 처럼 셀 수 있게 쓴다.

스위트를 어떻게 자르나

케이스가 수백 개가 되면 묶는 기준이 필요하다. 세 가지 방식이 흔하다.

기준예장점단점
기능 영역별로그인 / 결제 / 주문가장 직관적. 기본값영역에 걸친 흐름이 애매해진다
사용자 흐름별신규 가입 → 첫 주문실제 사용에 가깝다중복이 생긴다
실행 목적별스모크 / 회귀 / 전체런을 만들기 쉽다케이스가 여러 스위트에 걸린다

실무에서는 기능 영역별로 저장하고, 라벨로 실행 목적을 표시하는 조합이 가장 많이 쓰인다. "결제 스위트" 에 저장하고 스모크 라벨을 붙여 두면, 스모크 런을 만들 때 라벨로 뽑을 수 있다.

스모크 스위트를 따로 만들어 두는 것은 거의 모든 팀에 값이 있다. 20~30분 안에 끝나는 핵심 흐름 묶음이고, 배포 직후 지금 켜져 있는지 확인하는 데 쓴다.

결과 상태를 다섯 가지로 나눈다

통과·실패 둘만 두면 보고가 거짓이 된다.

상태뜻집계에서
Pass기대대로 동작분모·분자 모두
Fail기대와 다르다분모·분자 모두
Blocked다른 결함 때문에 실행 자체를 못 했다실행률에서 빼고 따로 보고
Skipped이번 회차에서 의도적으로 제외범위에서 제외했다고 적는다
Retest수정 후 재확인 필요미완으로 센다

Blocked 와 Skipped 를 구분하는 것이 핵심이다. 둘을 섞으면 실행률이 왜곡된다.

  • Blocked 가 많다 → 우리 잘못이 아니다. 선행 결함을 알려야 한다
  • Skipped 가 많다 → 우리가 범위를 줄인 것이고, 보고에 적어야 한다

로그인이 깨져서 50건이 실행 불가인데 그것을 Fail 로 적으면 실패율이 폭등하고 원인이 가려진다. Blocked 로 적고 "로그인 결함 1건이 50건을 차단하고 있다" 로 보고하면, 그 결함의 우선순위가 바로 올라간다(모듈 6 레슨 4의 차단 링크).

테스트 관리 도구와 이슈 추적 도구는 연동된다

실무에서는 테스트 관리 도구에서 테스트를 실행하다가 실패하면, 그 자리에서 바로 이슈 추적 도구에 결함을 등록하고 서로 링크를 건다. "이 테스트 케이스가 실패해서 이 버그가 등록됐다"는 연결이 남아, 나중에 "이 버그가 고쳐졌는지" 재검증할 때 원래 실패했던 테스트 케이스를 다시 찾기 쉬워진다.

연동이 주는 것은 셋이다.

얻는 것어떻게 쓰이나
실패 케이스 → 결함 링크재검증 때 원래 절차를 바로 찾는다
결함 → 차단된 케이스"이 결함이 50건을 막고 있다" 를 보여 준다
요구 → 케이스 → 결함어느 요구가 위험한지 집계된다

첫 줄이 매일 쓰인다. 모듈 6 레슨 1의 재검증에서 "원래 절차를 그대로 다시 밟는다" 를 하려면 그 절차가 어디 있는지 찾아야 하는데, 링크가 있으면 한 번에 간다.

트레이서빌리티는 양방향 질문에 답한다

이 말이 추상적으로 들리지만 실제로 묻는 것은 두 질문뿐이다.

방향질문알 수 있는 것
요구 → 케이스"케이스가 없는 요구가 있나"계획의 공백
결함 → 요구"결함이 어느 요구에 몰렸나"위험한 영역

첫 번째가 모듈 6 레슨 5의 요구사항 커버리지 그 자체다. 케이스 실행률 100%여도 요구 하나에 케이스가 아예 없으면 그 요구는 검증되지 않았고, 이 추적이 없으면 그 사실이 영원히 안 보인다.

실무에서 완벽한 추적을 만들려 하면 비용이 커진다. 현실적인 타협은 고위험 요구만 추적하는 것이다 — 결제·권한·개인정보처럼 모듈 4에서 고위험으로 분류한 요구에만 케이스 링크를 걸어 두면, 비용의 20%로 효과의 80%를 얻는다.

반복 실행 이력이 만드는 가치

테스트 관리 도구에 실행 이력이 쌓이면, "이 케이스가 지난 5번의 릴리스에서 몇 번 실패했는가" 같은 패턴을 볼 수 있다. 자주 실패하는 영역은 코드가 불안정하거나, 테스트 케이스 자체가 애매하게 작성됐다는 신호일 수 있다 — 모듈 6(레슨 5)에서 배운 품질 지표와 연결되는 지점이다.

불안정한 케이스를 찾아낸다

이력이 쌓이면 케이스 자체가 문제인 경우가 드러난다.

패턴해석할 일
항상 통과안정적이거나 너무 쉽다유지. 자동화 후보
자주 실패코드가 불안정하다그 영역에 테스트를 더 투입
번갈아 통과·실패케이스가 애매하거나 환경 의존케이스를 고친다
몇 회차 연속 Blocked선행 결함이 방치되고 있다차단 결함의 우선순위를 올린다

세 번째가 가장 해롭다. 같은 조건에서 결과가 갈리는 케이스는 아무 정보도 주지 않으면서 사람의 시간을 쓴다. 원인은 대개 둘이다 — 기대 결과가 모호하거나(판정이 사람마다 다르다), 사전 조건이 덜 적혀 있다.

이런 케이스를 지우는 것도 선택이다. 다만 지우기 전에 왜 불안정했는지 한 줄 남긴다. 그 메모가 모듈 5 레슨 14의 치트시트 한 줄이 되는 경우가 있다.

케이스는 썩는다

도구를 도입한 팀이 1년 뒤 겪는 문제는 거의 항상 같다. 케이스가 1,200개가 되고 아무도 전체를 돌리지 않는다.

썩는 이유증상
기능이 바뀌었는데 케이스는 그대로실행하면 당연히 실패한다
같은 확인이 여러 케이스에 중복돌리는 시간만 늘어난다
없어진 화면의 케이스가 남아 있다매번 Skipped 로 넘긴다
자동화로 옮긴 케이스가 수동에도 남아 있다두 번 센다

그래서 분기마다 한 번 정리하는 자리를 둔다. 기준은 간단하다 — 최근 3회차에서 한 번도 Pass 로 실행되지 않은 케이스를 꺼내 보고, 고치거나 지운다. 지우는 것을 아깝게 여기면 목록이 계속 불어난다.

매번 Skipped 로 넘기는 케이스는 이미 지워진 것과 같다. 목록에만 남아서 실행률의 분모를 키우고, 커버리지 숫자를 거짓으로 만든다.

스프레드시트는 언제까지 괜찮나

도구를 도입할 필요가 있는지 판단하는 기준이다. 작은 팀에는 스프레드시트가 정답인 경우가 많다.

상황스프레드시트전용 도구
케이스 50개 이하 · 실행 월 1회충분하다과하다
케이스 수백 개실행 이력 관리가 무너진다필요
여러 명이 동시에 실행충돌·덮어쓰기가 난다필요
환경·버전별로 따로 실행시트가 복제되며 갈라진다필요
요구 추적이 필요수식으로 억지로 가능훨씬 쉽다

세 번째 줄이 보통 전환의 계기가 된다. 두 사람이 같은 시트를 고치기 시작하면 결과가 섞이고, 그때부터 기록을 믿을 수 없게 된다.

도구 도입이 실패하는 지점

도입 자체는 반나절이면 되는데, 실패는 두 곳에서 난다.

  • 기존 케이스 이전 — 수백 개를 손으로 옮기다 지친다. 대부분 도구가 CSV·엑셀 가져오기를 지원하므로, 형식을 먼저 맞춰 한 번에 올린다
  • 유지보수 주인이 없다 — 누가 케이스를 고치고 정리할지 정해 두지 않으면 반년 뒤에 썩는다. 스위트마다 담당을 정해 둔다

그리고 전부를 옮기지 않는다. 지금 실제로 돌리는 케이스만 옮기는 편이 낫다. 1년간 한 번도 실행되지 않은 케이스는 옮길 가치가 없다.

자동화 결과도 같은 곳에 모은다

자동화가 생기면 "자동 결과는 CI 에서 보고, 수동 결과는 도구에서 본다" 가 되기 쉽다. 그러면 커버리지를 합쳐서 말할 수 없다.

대부분의 테스트 관리 도구는 자동화 결과를 API 로 받아 런에 넣을 수 있다. 그렇게 모으면 보고서에 "이번 릴리즈 확인 항목 480건 중 자동 390 · 수동 90" 처럼 한 숫자로 적을 수 있다. 모듈 11~13의 자동화와 이 레슨이 만나는 지점이다.

사례 — 커버리지를 말할 수 있게 되기까지

스프레드시트로 케이스 320개를 관리하던 팀의 기록이다. 릴리즈 보고서에 늘 "주요 기능 테스트 완료" 라고만 적혀 있었다.

문제가 세 가지 있었다.

증상원인
"무엇을 안 봤나" 를 아무도 답하지 못했다결과를 덮어썼다. 회차 이력이 없다
두 사람이 같은 시트를 고쳐 결과가 섞였다동시 편집
로그인 결함으로 40건이 못 돌았는데 실패로 집계됐다Blocked 상태가 없었다

도구로 옮기면서 한 일은 셋뿐이었다.

  1. 실제로 돌리는 케이스 210개만 옮겼다(110개는 1년간 미실행)
  2. 결과 상태에 Blocked·Skipped 를 추가했다
  3. 스모크 스위트 24건을 따로 만들었다

다음 릴리즈 보고서가 이렇게 바뀌었다.

실행 210건 중 Pass 186 · Fail 9 · Blocked 12 · Skipped 3. Blocked 12건은 결함 BUG-512 하나가 차단하고 있습니다. Skipped 3건은 기기 미확보(저사양 단말)로 제외했습니다.

"주요 기능 테스트 완료" 와 비교하면 전달되는 정보가 다르다. 특히 세 번째 줄 덕에 기기 확보 요청이 처음으로 받아들여졌다 — 모듈 6 레슨 5의 "못 한 것을 적는다" 가 실제로 자원을 가져온 경우다.

이 개념이 도구에서 어떤 구조로 구현되는지는 모듈 22(레슨 11) 에서 TestRail을 예로 실습한다 — 케이스 저장소와 실행 런이 분리돼 있고, 회차마다 새 런을 만들기 때문에 이력이 남는 구조다. 이어지는 레슨 12는 TestRail·Qase·Xray·PractiTest 같은 후보 중에서 우리 팀 조건에 맞는 도구를 고르는 판단 축 을 다룬다.

실무에서 왜 필요한가

수동 테스트 케이스가 수십~수백 개를 넘어가면, 스프레드시트만으로는 "이번 릴리스에서 뭘 실행했는지" 추적이 불가능해진다. 테스트 관리 도구는 이 규모의 문제를 해결하기 위한 것이다. 채용공고에서 "TestRail 경험"을 요구하는 이유도, 도구 자체보다는 체계적으로 테스트 범위를 추적하고 릴리스 근거를 남기는 습관을 갖췄는지를 보기 위해서다.

"못 본 것" 을 말할 수 있는 유일한 근거

모듈 6 레슨 5의 보고서에서 가장 중요한 절이 "못 한 것" 이었다. 그 절을 기억으로 쓰면 반드시 빠진다. 실행 기록이 있으면 Skipped·Blocked 목록을 그대로 옮기면 되고, 그것이 정직한 보고의 토대가 된다.

인수인계와 온보딩의 비용이 달라진다

사람이 바뀔 때 가장 많이 사라지는 것이 "무엇을 어떻게 확인해 왔는지" 다. 머릿속에만 있으면 퇴사·이동과 함께 사라지고, 새 담당자는 처음부터 다시 알아낸다.

케이스 저장소가 있으면 인수인계가 "스위트 목록을 보고 한 번 돌려 보는 것" 으로 바뀐다. 신입이 첫 주에 스모크 런을 돌려 보는 것만으로 제품 전체 흐름을 익히는 효과도 있다.

같은 일을 두 번 하지 않게 된다

이력이 없으면 "지난 릴리즈에 이 영역을 봤나" 를 알 수 없어 다시 본다. 반대로 위험한 영역을 안 보고 지나치기도 한다. 둘 다 이력이 해결한다 — 회차별 결과가 남아 있으면 이번에 무엇을 더 볼지 판단이 선다.

채용시장에서의 위치

공고에 "TestRail / Zephyr / qTest 등 테스트 관리 도구 경험" 이 자주 적힌다. 그런데 면접에서 실제로 묻는 것은 도구 조작이 아니다.

질문약한 답강한 답
"테스트 관리 도구 써보셨어요?""케이스 등록하고 결과 체크했습니다""케이스 저장소와 실행 런을 분리해 회차 이력을 쌓았습니다"
"Jira 랑 뭐가 다르죠?""비슷한데 테스트용입니다""Jira 는 찾은 것, 테스트 도구는 본 것을 기록합니다. 안 본 영역은 결함 목록으로 알 수 없습니다"
"커버리지는 어떻게 보고했어요?""완료율로요""실행률과 요구사항 커버리지를 나눠 봤고, Blocked·Skipped 를 따로 적었습니다"
"케이스가 너무 많아지면요?""정리합니다""최근 3회차에 한 번도 Pass 로 실행되지 않은 케이스를 꺼내 고치거나 지웁니다"
"불안정한 케이스는요?""다시 돌려 봅니다""번갈아 통과·실패하는 케이스는 기대 결과가 모호하거나 사전 조건이 덜 적힌 것입니다"

두 번째가 가장 변별력이 크다. 두 도구의 차이를 "결함 vs 테스트" 로만 답하는 사람은 많고, "결함 목록으로는 안 본 영역을 알 수 없다" 까지 말하는 사람은 드물다. 이 한 문장이 테스트 관리를 왜 하는지 아는 증거다.

네 번째도 좋은 답이다. 도구를 도입해 본 사람과 운영해 본 사람이 여기서 갈린다. 케이스를 지우는 기준을 가진 사람은 후자다.

공고 표현으로는 "테스트 케이스 관리", "테스트 자산 관리", "트레이서빌리티", "테스트 커버리지 관리" 가 이 레슨에 걸린다. 도구별 실전과 선택 기준은 모듈 22 레슨 11~12 에서 이어 받는다.

실습 과제

과제 1 — 테스트 스위트 설계하기 (10분)

"온라인 서점" 서비스의 테스트 케이스를 스위트 단위로 나눈다면 어떤 스위트가 필요할지 최소 4개(예: 회원가입, 검색, 결제, 주문내역)를 나열하고, 각 스위트에 들어갈 만한 테스트 케이스를 하나씩 예시로 적는다.

해설 보기
스위트케이스 예시
회원가입·로그인이메일에 대문자가 포함된 계정으로 로그인하면 성공한다
도서 검색검색 결과가 0건일 때 안내 문구와 추천이 표시된다
장바구니·결제쿠폰 적용 후 수량을 2로 바꾸면 할인액이 2배로 재계산된다
주문내역·배송조회부분 취소한 주문의 합계가 취소 후 금액으로 표시된다
스모크(별도)로그인 → 검색 → 담기 → 결제 → 내역 확인 전 흐름

다섯 번째를 떠올렸다면 좋은 신호다. 기능 영역만으로 자르면 영역을 가로지르는 흐름이 어느 스위트에도 안 들어간다. 실제 사용자는 영역 하나만 쓰지 않으므로, 흐름 묶음을 따로 둬야 한다.

그리고 케이스 예시를 보면 기대 결과가 셀 수 있게 적혀 있다. "검색이 정상 동작한다" 가 아니라 "안내 문구와 추천이 표시된다" 처럼 쓰면 누가 실행해도 판정이 같다.

과제 2 — 트레이서빌리티 따라가기 (10분)

"비밀번호는 8자 이상이어야 한다"는 요구사항 하나를 골라, 이 요구사항이 테스트 케이스 → 테스트 실행 결과 → (실패했다면) 결함 등록까지 어떻게 연결되는지 순서대로 적어본다.

해설 보기
요구 REQ-014  "비밀번호는 8자 이상이어야 한다"
      │
      ├─ TC-101  8자 비밀번호로 가입 → 성공          Pass
      ├─ TC-102  7자 비밀번호로 가입 → 거부 + 안내문  Fail ──┐
      └─ TC-103  공백 8자로 가입 → 거부                Pass   │
                                                              ▼
                                                        BUG-233
                                                   "7자 비밀번호가 통과됨"

경계값이 셋인 것이 핵심이다. 모듈 3의 경계값 분석대로 7·8·9를 보는데, 여기서는 7(거부)과 8(허용)만으로도 충분하고 TC-103 같은 변형(공백만 8자)을 하나 더 두면 좋다.

추적의 값은 역방향에서 나온다. BUG-233 → TC-102 → REQ-014 로 거슬러 올라가면 "이 결함은 비밀번호 정책 요구에 걸린 것" 이 집계되고, 같은 요구에 결함이 반복되면 그 요구 자체가 위험 영역으로 드러난다.

반대 방향도 해 본다. 요구 목록을 훑어 케이스가 하나도 연결되지 않은 요구를 찾는 것인데, 이것이 실무에서 가장 많이 발견되는 공백이다 (모듈 6 레슨 5의 사례가 정확히 그 경우였다).

과제 3 — 결과 상태 가려 쓰기 (10분)

릴리즈 런 100건을 실행했고 상황은 아래와 같다. 각각을 Pass / Fail / Blocked / Skipped / Retest 중 무엇으로 적을지 정하고, 보고서에 쓸 한 줄을 만든다.

  1. 60건 — 기대대로 동작
  2. 8건 — 기대와 다름, 결함 등록
  3. 25건 — 로그인이 깨져서 아예 진입 불가
  4. 5건 — 저사양 기기 미확보로 이번엔 제외
  5. 2건 — 어제 수정됐다고 하는데 아직 확인 못 함
해설 보기
건수상태이유
60Pass—
8Fail결함 링크를 건다
25Blocked우리 판정이 아니다. Fail 로 적으면 실패율이 폭등하고 원인이 가려진다
5Skipped우리가 범위를 줄인 것이므로 사유를 적는다
2Retest미완으로 센다

보고 한 줄은 이렇게 된다.

실행 100건 — Pass 60 · Fail 8 · Blocked 25 · Skipped 5 · Retest 2. Blocked 25건은 로그인 결함 BUG-540 하나가 차단하고 있어, 이 건이 해결되면 하루 안에 소화할 수 있습니다. Skipped 5건은 저사양 기기 미확보로 제외했습니다.

세 번째 줄의 처리가 이 과제의 전부다. 25건을 Fail 로 적으면 실패율이 33%가 되어 "품질이 매우 나쁘다" 로 읽히지만, 실제로는 결함 한 건이 길을 막고 있는 것이다. 상태를 가려 적으면 그 한 건의 우선순위가 바로 올라간다.

네 번째도 중요하다. Skipped 를 적지 않고 분모에서 조용히 빼면 실행률이 좋아 보이지만, 못 본 영역이 사라진다. 모듈 6 레슨 5의 "못 한 것" 이 여기서 나온다.

자가 체크리스트

  • 이슈 추적 도구와 테스트 관리 도구의 역할 차이를 설명할 수 있다
  • 테스트 케이스·테스트 스위트·테스트 실행의 관계를 설명할 수 있다
  • 트레이서빌리티가 무엇이고 왜 중요한지 설명할 수 있다
  • 테스트 관리 도구와 이슈 추적 도구가 실무에서 어떻게 연동되는지 설명할 수 있다
  • 결함 목록으로는 "안 본 영역"을 알 수 없는 이유를 설명할 수 있다
  • 케이스 저장소와 실행 런이 분리된 구조가 왜 중요한지 말할 수 있다
  • 케이스에서 사전 조건이 비면 생기는 문제를 설명할 수 있다
  • 좋은 케이스의 세 조건을 말할 수 있고, 기대 결과를 셀 수 있게 쓸 수 있다
  • 스위트를 자르는 세 기준을 비교할 수 있고, 스모크 스위트의 쓸모를 안다
  • Blocked 와 Skipped 를 구분해 적는 이유를 설명할 수 있다
  • 트레이서빌리티가 답하는 양방향 질문 두 개를 말할 수 있다
  • 번갈아 통과·실패하는 케이스의 두 원인을 안다
  • 케이스를 정리하는 기준(최근 3회차 미실행)을 말할 수 있다
  • 스프레드시트로 버틸 수 있는 경계를 판단할 수 있다

흔한 실수

  • 이슈 추적 도구와 테스트 관리 도구를 같은 것으로 착각한다. 목적이 다르므로 역할도 다르다 — 둘 다 필요한 경우가 많다.
  • 테스트 케이스를 스프레드시트로만 계속 관리하려 한다. 규모가 커지면 실행 이력·트레이서빌리티 추적이 사실상 불가능해진다.
  • 테스트 실행 결과를 도구에 기록하지 않고 머릿속으로만 기억한다. 다음 릴리스에서 "지난번에 뭘 확인했는지" 알 수 없게 된다.
  • 케이스 본문에 결과를 적는다. "TC-003 (실패)" 처럼 쓰면 다음 회차에 지워야 하고 이력이 남지 않는다. 결과는 런에 적는다.
  • 사전 조건을 비워 둔다. 쓴 사람만 실행할 수 있는 케이스가 된다.
  • 기대 결과를 "정상 동작한다"로 쓴다. 사람마다 판정이 달라지고, 그 케이스는 번갈아 통과·실패한다.
  • 실행 불가를 Fail 로 적는다. 실패율이 폭등하고 원인이 가려진다. Blocked 로 적고 차단 결함을 알린다.
  • Skipped 를 분모에서 조용히 뺀다. 실행률은 좋아 보이지만 못 본 영역이 사라진다.
  • 기능 영역별로만 스위트를 자른다. 영역을 가로지르는 사용자 흐름이 어느 스위트에도 안 들어간다.
  • 케이스를 지우지 않는다. 매번 Skipped 로 넘기는 케이스는 이미 지워진 것과 같고, 분모만 키워 커버리지를 거짓으로 만든다.
  • 도구 도입 때 케이스 전부를 옮긴다. 1년간 미실행 케이스는 옮길 가치가 없다. 지금 돌리는 것만 옮긴다.
  • 유지보수 주인을 정하지 않는다. 반년 뒤에 썩는다. 스위트마다 담당을 둔다.
  • 자동화 결과를 따로 본다. 수동·자동을 합쳐야 커버리지를 하나의 숫자로 말할 수 있다.

참고 자료

이 커리큘럼 안에서

  • 모듈 3 — 테스트 설계. 여기서 만든 케이스가 저장소에 들어간다
  • 모듈 3 레슨 8 — 체크리스트. 케이스로 올릴 것과 아닌 것의 구분
  • 모듈 4 레슨 2~3 — 리스크. 고위험 요구만 추적하는 타협의 근거
  • 모듈 6 레슨 4 — 이슈 추적 도구. 연동되는 다른 한쪽
  • 모듈 6 레슨 5 — 품질 지표. 실행률·요구 커버리지·"못 한 것"의 출처
  • 모듈 7 레슨 2~3 — 테스트 데이터·환경. 사전 조건을 실제로 만드는 방법
  • 모듈 11~13 — 자동화. 자동 결과를 같은 런에 모으는 이유
  • 모듈 22 레슨 11~12 — TestRail 실전과 도구 선택 축

한 줄 정리 — 결함 목록은 찾은 것이고 테스트 기록은 본 것이다. 결함이 없는 영역이 "괜찮은 것" 인지 "안 본 것" 인지는 후자만 답할 수 있다. 케이스 저장소와 실행 런을 분리해 이력을 쌓고, Blocked 와 Skipped 를 구분해 적고, 안 돌리는 케이스는 지운다.

낯선 말 풀이

이 레슨에 나온 약어입니다. 본문에서도 처음 나올 때 점선으로 표시해 두었습니다 (제목과 링크 글자는 그대로 둡니다).

QA — 품질보증
만든 것이 쓸 만한지 확인하고, 애초에 덜 망가지게 만드는 방법을 정하는 일. "테스트"는 그 일의 일부다.
PM — 프로젝트 또는 제품 관리자
일정과 범위를 정하고 결정을 내리는 사람. 회사에 따라 프로젝트 관리자와 제품 관리자 둘 중 하나를 뜻한다.
CSV — 쉼표로 구분된 값
표를 글자로 적어 둔 가장 단순한 형식. 줄마다 한 행, 쉼표로 칸을 나눈다.
CI — 지속적 통합
코드를 올릴 때마다 자동으로 합쳐서 빌드하고 시험까지 돌리는 방식.
API — 응용 프로그램 인터페이스
프로그램끼리 주고받는 창구. 사람이 화면 버튼을 누르는 대신, 프로그램이 정해진 주소로 요청을 보내 답을 받는다.
ISTQB — 국제 소프트웨어 테스팅 자격 위원회
테스터 자격 시험을 만들고 용어를 정리하는 국제 단체.
ISO/IEC/IEEE — 세 단체 공동 표준
세 국제 단체가 함께 낸 표준이라는 표시.

용어집 전체 보기