테스트 설계 기법 7선|QA 엔지니어가 실무에서 사용하는 동등 분할·경계값 분석·상태 전이 테스트를 해설

테스트 자동화

테스트 설계 기법이란 테스트 케이스를 효율적으로 설계하기 위한 체계적인 방법입니다. 모든 입력값이나 조건을 테스트하는 것은 현실적이지 않기 때문에 버그를 발견하기 쉬운 대표적인 패턴을 선별하여 테스트합니다.

대표적인 기법에는 다음이 있습니다.

  • 동등 분할
  • 경계값 분석
  • 디시전 테이블 테스트
  • 상태 전이 테스트

테스트의 목적과 대상 시스템의 특성에 따라 적절히 사용 구분하는 것이 중요합니다.

📌 이런 분께 추천합니다

  • 테스트 설계 기법의 전체상을 파악하고 싶은 QA 엔지니어·개발자
  • 어떤 기법을 어떤 장면에서 사용하면 좋은지 정리하고 싶은 분
  • ISTQB·테스트 자격증 학습에 활용하고 싶은 분
  • 자동 테스트의 테스트 케이스 설계를 더 체계적으로 하고 싶은 분

✅ 이 글을 읽으면 얻을 수 있는 것

  • 7가지 테스트 설계 기법의 특징·용도·사용 구분을 알 수 있다
  • 장면에 따라 최적의 기법을 선택할 수 있게 된다
  • 각 기법의 상세 해설 글 링크로 깊이 있게 공부할 수 있다

👤 이 글을 쓴 사람

QA 엔지니어·테스트 자동화 엔지니어로서 15년 이상의 실무 경험을 가진 Yoshi가 집필. 테스트 설계 기법은 실제 프로젝트에서 매일 사용하는 지식입니다. 구현 코드는 GitHub에 공개 중입니다: github.com/YOSHITSUGU728/automated-testing-portfolio

「테스트 케이스가 너무 많아 관리할 수 없다」「어디까지 테스트하면 충분한지 모르겠다」——이런 고민을 해결하는 것이 테스트 설계 기법입니다. 이 글에서는 QA 엔지니어가 실무에서 사용하는 7가지 주요 기법을 비교 일람표·각 기법의 상세·사용 구분의 기준까지 한 번에 해설합니다.

📌 결론

  • 테스트 설계 기법은 「무엇을 테스트하는가」가 아니라 「어떻게 효율적으로 버그를 찾는가」의 접근법
  • 7가지 기법은 각각 잘하는 장면이 다르며 조합해서 사용하는 것이 실무의 기본
  • 먼저 동등 분할·경계값 분석을 습득하고 시스템 특성에 따라 다른 기법을 더해가는 것이 최단 루트

테스트 설계 기법 7선 비교 일람표

기법명잘하는 장면난이도자동화와의 궁합자주 사용하는 장면
① 동등 분할입력값 범위·종류 검증⭐ 초급◎ parametrize입력 유효성 검증
② 경계값 분석범위의 끝·Off-by-one 에러⭐ 초급◎ parametrize숫자 범위 체크
③ 디시전 테이블복수 조건의 조합⭐⭐ 중급○ parametrize권한 관리·업무 로직
④ 상태 전이 테스트상태를 가진 시스템·플로우⭐⭐ 중급◎ E2E 테스트로그인 / EC 카트
⑤ 유스케이스 테스트사용자 조작 플로우 전체⭐⭐ 중급◎ E2E 테스트구매 플로우·회원 가입
⑥ 페어와이즈 테스트다수 조합의 효율화⭐⭐⭐ 상급○ parametrizeOS / 브라우저 조합
⑦ 에러 추측경험칙·버그 패턴 활용⭐⭐⭐ 상급△ 경험 의존NULL / 특수 문자 / 경계 보완

① 동등 분할(Equivalence Partitioning)이란

목적

  • 같은 동작을 하는 입력값을 그룹화하여 테스트 수를 줄인다
  • 유효·무효 양쪽 클래스를 망라한다
  • 「대표값 1개로 충분하다」는 사고방식으로 테스트를 효율화한다

입력값을 「같은 동작을 하는 그룹(동등 클래스)」으로 분할하고 각 그룹에서 대표값을 1개만 선택하여 테스트하는 기법입니다. 나이·문자 수·숫자 범위 등 「범위 조건」이 있는 필드에 특히 유효합니다.

✅ 적합한 케이스

  • 입력값에 명확한 범위 조건이 있는 경우
  • 폼 유효성 검증 테스트
  • 숫자·문자열의 입력 검증

⚠️ 적합하지 않은 케이스

  • 조건의 조합이 중요한 경우
  • 상태 변화를 추적해야 하는 경우
  • 경계값 상세 확인이 필요한 경우
💡 실무 팁:동등 분할은 반드시 먼저 수행하는 기법입니다. 클래스를 정리한 후 경계값 분석으로 나아가는 것이 올바른 순서입니다.

② 경계값 분석(Boundary Value Analysis)이란

목적

  • 각 동등 클래스의 경계(끝)의 값을 중점적으로 테스트한다
  • Off-by-one 에러(>=>의 혼동 등)를 발견한다
  • 동등 분할과 조합하여 버그 검출률을 높인다

버그는 경계 부근에서 가장 많이 발생한다는 것이 통계적으로 밝혀져 있습니다. 기본 접근법은 3점법:각 클래스 경계에 대해 경계값 자체·경계값 -1·경계값 +1을 테스트합니다.

✅ 적합한 케이스

  • 상한·하한이 있는 사양(숫자·문자 수 등)
  • >=·<= 연산자가 포함된 조건 분기
  • 동등 분할의 보완으로 사용

⚠️ 적합하지 않은 케이스

  • 경계가 없는 조건(플래그·카테고리 등)
  • 문자열 내용·형식 검증
  • 순서가 중요한 케이스
💡 실무 팁:pytest의 parametrize를 사용하면 경계값 테이블을 그대로 코드로 변환할 수 있습니다.

③ 디시전 테이블 테스트(Decision Table Testing)란

목적

  • 복수 조건의 모든 조합을 빠짐없이 정리한다
  • 조합 폭발(조건 2개×값 2개=4패턴 등)을 시각적으로 관리한다
  • 업무 규칙·권한 관리 등 복잡한 로직의 검증에 사용한다

복수의 조건이 얽힌 시스템에서는 조건의 조합이 빠짐없이 테스트되고 있는지 확인하기 어렵습니다. 디시전 테이블은 「조건」과 「액션(기대 결과)」을 표 형식으로 정리하여 조합의 망라성을 담보합니다.

디시전 테이블 예시(로그인 처리)

조건 / 액션케이스1케이스2케이스3케이스4
ID가 올바른가✅ Yes✅ Yes❌ No❌ No
비밀번호가 올바른가✅ Yes❌ No✅ Yes❌ No
→ 로그인 성공

✅ 적합한 케이스

  • 업무 규칙·권한 관리 검증
  • 복수 플래그의 조합
  • 조건이 2〜5개 정도인 경우

⚠️ 적합하지 않은 케이스

  • 조건이 6개 이상(조합 폭발)
  • 순서·타이밍이 중요한 처리
  • 연속된 상태 변화가 있는 경우
💡 실무 팁:조건이 늘어나면 조합 수는 지수적으로 증가합니다(조건 3개=8패턴,4개=16패턴). 조건이 많은 경우에는 페어와이즈 테스트와 조합하여 줄이세요.

④ 상태 전이 테스트(State Transition Testing)란

목적

  • 시스템의 「상태」와 「전이 조건」을 정리하여 테스트 케이스를 설계한다
  • 상태 전이가 올바르게 이루어지는지·무효 전이가 올바르게 거부되는지를 확인한다
  • EC 카트·로그인 플로우·주문 상태 등 상태를 가진 시스템에 유효

시스템은 「로그아웃 중」→「로그인 중」→「카트 추가 완료」처럼 상태를 가집니다. 상태 전이 테스트는 이 상태의 흐름을 도표나 표로 정리하여 「모든 정상 전이」와 「무효 전이」 양쪽을 테스트합니다.

상태 전이 예시(EC 사이트 주문 상태)

현재 상태이벤트(조작)다음 상태확인 포인트
카트 미추가상품 추가카트 추가 완료카트 배지가 표시되는가
카트 추가 완료구매 확정주문 확정확인 메일이 전송되는가
주문 확정취소 신청취소 완료재고가 복구되는가
취소 완료재취소(무효)취소 완료(변화 없음)에러 또는 무시되는가

✅ 적합한 케이스

  • EC 사이트·예약 시스템 등 상태 전이가 많은 시스템
  • 로그인·로그아웃 플로우 테스트
  • Playwright E2E 테스트 시나리오 설계

⚠️ 적합하지 않은 케이스

  • 상태를 가지지 않는 단순한 입력 검증
  • 단일 폼 유효성 검증만인 경우
  • 상태 수가 매우 많아 복잡한 경우
💡 실무 팁:Playwright E2E 테스트는 상태 전이 테스트와 매우 궁합이 좋습니다. 각 상태를 fixture·각 전이를 테스트 함수로 구현하면 코드가 깔끔하게 정리됩니다.

⑤ 유스케이스 테스트(Use Case Testing)란

목적

  • 사용자의 일련의 조작 플로우(유스케이스)를 테스트 시나리오로 변환한다
  • 기본 플로우(정상계)와 대체 플로우(이상계·예외계)를 망라한다
  • E2E 테스트의 시나리오 설계에 직결되는 기법

유스케이스 테스트는 「사용자가 목표를 달성하기까지의 조작 흐름」을 테스트 케이스로 설계합니다. 「상품을 구매한다」는 유스케이스라면 로그인→상품 선택→카트 추가→결제→완료 확인이라는 일련의 플로우를 테스트합니다.

✅ 적합한 케이스

  • E2E 테스트 시나리오 설계
  • 사용자 스토리 기반 개발
  • 리그레션 테스트의 우선순위 결정

⚠️ 적합하지 않은 케이스

  • 단위 기능의 세밀한 유효성 검증
  • API 입출력 검증
  • 성능 테스트
💡 실무 팁:Playwright × pytest로 E2E 테스트를 구현할 때는 유스케이스 단위로 테스트 파일을 나누면 관리하기 쉬워집니다. 파일 1개 = 유스케이스 1개가 기준입니다.

⑥ 페어와이즈 테스트(Pairwise Testing)란

목적

  • 다수의 파라미터 조합을 최소 테스트 수로 망라한다
  • 「임의의 2개 파라미터 조합이 최소 1번은 테스트된다」는 것을 보증한다
  • 전체 조합 테스트에 비해 테스트 수를 대폭 줄일 수 있다

파라미터가 3개×3값=27가지,4개×3값=81가지로 폭발하는 조합 테스트를 페어와이즈 기법을 사용하면 9〜12건 정도로 줄일 수 있습니다. 대부분의 버그는 2개 파라미터의 상호 작용에서 발생한다는 연구에 기반한 기법입니다.

✅ 적합한 케이스

  • OS·브라우저·디바이스 조합 테스트
  • 설정 항목이 많은 소프트웨어 검증
  • 디시전 테이블에서 조건이 너무 많은 경우

⚠️ 적합하지 않은 케이스

  • 파라미터 간에 강한 의존 관계가 있는 경우
  • 3개 이상의 파라미터 상호 작용이 중요한 경우
  • 안전성이 요구되는 중요 시스템
💡 실무 팁:페어와이즈 테스트는 allpairspy(Python)등의 도구로 자동 생성할 수 있습니다. 생성한 파라미터 세트를 pytest의 parametrize에 전달하면 그대로 자동 테스트가 됩니다.

⑦ 에러 추측(Error Guessing)이란

목적

  • 과거 경험·버그 패턴을 바탕으로 「버그가 나올 것 같은 값」을 직관적으로 테스트한다
  • 다른 기법으로는 찾기 어려운 「경험적으로 위험한」케이스를 보완한다
  • QA 엔지니어의 직감과 지식을 체계적으로 활용한다

에러 추측은 테스트 기법 중 유일하게 「경험과 직감」에 기반한 기법입니다. 「0이나 음수는 위험하다」「NULL·빈 문자열은 함정이다」「SQL 인젝션 문자열」「매우 긴 문자열」등 과거 경험에서 「버그가 발생하기 쉬운 값」을 적극적으로 테스트합니다.

자주 사용되는 에러 추측 값

카테고리구체적인 값의 예
숫자계0,-1,최대값+1,소수,정수 오버플로우 값
문자열계빈 문자열,공백만,매우 긴 문자열(1000자 이상),전각·반각 혼재
특수 문자계싱글 쿼트,세미콜론(SQL 인젝션),<script>(XSS)
NULL·미입력계NULL 값,undefined,빈 배열,미선택 상태

✅ 적합한 케이스

  • 다른 기법으로는 찾기 어려운 버그 보완
  • 경험 풍부한 QA 엔지니어에 의한 애드혹 테스트
  • 보안 테스트의 보완

⚠️ 적합하지 않은 케이스

  • 단독으로의 체계적인 품질 보증
  • 경험이 적은 멤버에의 의존
  • 재현성이 요구되는 테스트
💡 실무 팁:에러 추측은 다른 6가지 기법을 보완하는 것입니다. 동등 분할·경계값 분석으로 테스트 케이스를 설계한 후 「경험적으로 수상한 값」을 몇 가지 추가하는 것이 실무에서의 사용법입니다.

기법의 도입 순서와 사용 구분

7가지 기법을 어떤 순서로 배우고 어떻게 사용 구분할지를 정리합니다.

스텝기법사용하는 장면
STEP 1동등 분할 → 경계값 분석입력값 검증·폼 유효성 검증(가장 먼저 습득)
STEP 2디시전 테이블업무 로직·권한 관리의 조건 조합
STEP 3상태 전이 테스트 → 유스케이스 테스트E2E 테스트·플로우 전체 검증
STEP 4페어와이즈 테스트다수 파라미터 조합 최적화
항상 병용에러 추측다른 기법을 보완하는 경험적 테스트 추가

FAQ:테스트 설계 기법에 대한 자주 묻는 질문

Q. 테스트 설계 기법은 모두 외워야 하나요?

아니오. 먼저 동등 분할과 경계값 분석을 이해하는 것만으로 실무의 많은 케이스에 대응할 수 있습니다. 이 두 가지를 마스터한 후 테스트 대상의 복잡성에 따라 디시전 테이블·상태 전이 테스트를 더해가는 것이 현실적인 습득 순서입니다.

Q. 자동 테스트에도 테스트 설계 기법이 필요한가요?

필요합니다. 오히려 자동 테스트와 궁합이 좋은 기법이 많습니다. pytest의 @pytest.mark.parametrize는 동등 분할·경계값 분석과 매우 궁합이 좋아 설계한 표를 그대로 코드로 변환할 수 있습니다. 테스트 설계 없이 자동 테스트만 늘려도 중요한 부분을 놓친 채 「테스트가 있다」는 안심감만 생겨버립니다.

Q. ISTQB에서 중요한 기법은 무엇인가요?

ISTQB(Foundation Level)에서는 동등 분할·경계값 분석·디시전 테이블·상태 전이 테스트가 특히 중요합니다. 이 4가지는 시험의 빈출 주제이며 실무에서도 가장 사용 빈도가 높은 기법입니다. 먼저 이 4가지를 우선적으로 학습하는 것을 추천합니다.

Q. 복수의 기법을 조합하여 사용해도 되나요?

오히려 조합하는 것이 실무의 표준입니다. 예를 들어 「동등 분할로 그룹을 정의 → 경계값 분석으로 경계를 테스트 → 에러 추측으로 경험적으로 위험한 값을 추가」라는 흐름이 전형적입니다. 1가지 기법만으로 완결시키려 하면 누락이 생깁니다. 목적에 따라 복수를 조합하는 편이 망라성과 효율의 균형이 잡힙니다.

📋 이 글의 정리

  • 동등 분할·경계값 분석:입력값 검증의 기본. 가장 먼저 습득해야 할 2가지 기법
  • 디시전 테이블:복수 조건의 조합을 빠짐없이 정리하는 기법
  • 상태 전이 테스트:상태를 가진 시스템의 플로우 검증에 최적
  • 유스케이스 테스트:E2E 테스트 시나리오 설계에 직결되는 기법
  • 페어와이즈 테스트:다수 파라미터의 조합 폭발을 효율적으로 해소
  • 에러 추측:경험칙으로 다른 기법을 보완하는 마무리

테스트 설계 기법은 「모두 항상 사용하는」것이 아니라 「테스트 대상의 특성에 따라 최적의 기법을 선택하는」것입니다. 먼저 동등 분할·경계값 분석을 마스터하고 시스템의 복잡성에 따라 디시전 테이블·상태 전이 테스트를 더해가는 것이 실무에서의 최단 루트입니다.

제목과 URL을 복사했습니다