본문으로 건너뛰기
중급약 40분

명세 기반·경험 기반 테스트 계산 — 동등 분할, 2/3-value 경곗값, Each choice·페어와이즈·Base choice, 결정표, 상태 전이

CSTS가 따르는 ISO/IEC/IEEE 29119-4 방식으로 명세 기반 기법의 테스트 케이스를 설계하고 개수를 계산한다. 유효·무효 클래스 분할 규칙과 무효 클래스를 한 TC에 하나씩 넣는 이유, 경계 양쪽 값을 모두 경곗값으로 보는 2-value·3-value 경곗값 분석, All combinations·Each choice·페어와이즈·Base choice의 개수 공식, 결정표의 규칙 수와 축약, 상태 전이표와 0-스위치·1-스위치 커버리지를 예제와 연습 문제로 다루고, 오류 추정과 탐색적 테스트의 정의를 정리한다.

  • #CSTS
  • #명세기반테스트
  • #동등분할
  • #경곗값분석
  • #페어와이즈
  • #결정표
  • #상태전이
  • #오류추정

개념

명세 기반 기법 지도

명세 기반 테스트는 소스 코드를 보지 않고 명세에서 TC를 정한다. 무작위 입력을 생성하는 임의 (Random) 테스트도 코드를 쓰지 않으므로 명세 기반이다. 가이드가 꼽는 기법은 동등 분할·분류 트리· 경곗값 분석·신택스·조합·상태 전이·인과 그래프·결정표·시나리오 테스트다. 이 레슨은 계산이 나오는 다섯 가지를 깊게, 나머지는 정의만 본다.

동등 분할 — 클래스를 나누고 대표값을 고른다

같은 처리를 받을 것으로 기대되는 입력을 한 클래스로 묶고 클래스마다 대표값 하나를 고른다.

명세 형태유효 클래스무효 클래스
범위 10 ≤ X ≤ 201 (10~20)2 (X < 10, X > 20)
값의 집합(카드·계좌·포인트) — 각각 다르게 처리값마다 1 = 31 (그 밖의 값)
반드시 ~이어야 함 (첫 글자가 영문)11
개수 1~5개12 (0개, 6개 이상)

TC를 묶을 때 규칙 두 가지가 있다.

  • 유효 클래스는 한 TC에 여러 개 합쳐도 된다 (최소화 방식)
  • 무효 클래스는 한 TC에 하나만 넣는다. 무효 값 둘을 함께 넣으면 첫 번째 검사에서 거절되어 두 번째 무효 처리가 실행되었는지 알 수 없다(결함 마스킹)

예: 나이(18~65)와 등급(일반·VIP) 두 입력. 유효 클래스 1 + 2 = 3, 무효 클래스 2 + 1 = 3. 최소 TC는 유효 클래스를 묶은 2개(나이 30·일반, 나이 40·VIP) + 무효 클래스마다 1개씩 3개 = 5개 다.

경곗값 분석 — 29119의 2-value·3-value

결함은 경계에서 잘 난다(> 와 >= 혼동). 가이드는 29119-4를 따라 경계 양쪽 클래스의 끝값을 모두 경곗값으로 본다. 정수 10 ≤ X ≤ 20 이면 경곗값은 9, 10, 20, 21 네 개다(16비트 정수라면 표현 한계 −32768, 32767도 경곗값으로 볼 수 있다).

방식경곗값 하나마다 고르는 값10 ≤ X ≤ 20 의 테스트 입력
2-value경곗값 + 경계 건너편 의 가장 가까운 값9, 10, 20, 21 → 4개
3-value경곗값 + 양옆 가장 가까운 값8, 9, 10, 11, 19, 20, 21, 22 → 8개

3-value에서 경곗값 9의 세트는 (8, 9, 10), 10의 세트는 (9, 10, 11)이다. 세트끼리 겹치는 값을 하나로 세면 위와 같다. 문제가 "경곗값마다 TC를 따로 구성(One-to-One)"이라고 하면 중복을 지우지 않고 세는지 반드시 읽는다.

경곗값이 잡는 결함을 보자. 명세 10 ≤ X ≤ 20 이

  • 10 < X ≤ 20 으로 구현되면 → X = 10에서 드러난다
  • 9 ≤ X ≤ 20 으로 구현되면 → X = 9에서 드러난다
  • X ≤ 20 (아래 경계 누락)이면 → X = 9에서 드러난다

동등 분할 대표값(예: 0, 15, 50)은 이 셋을 모두 놓친다. 그래서 둘을 함께 쓴다.

입력이 둘 이상일 때 — 가이드 예제처럼 나이 20 ≤ 나이 ≤ 50, 신장 155 ≤ 신장 ≤ 190 이면 2-value로 나이 경곗값 4개(19, 20, 50, 51), 신장 4개(154, 155, 190, 191)다. One-to-One 방식은 한 변수를 경곗값으로 두고 다른 변수는 유효한 보통 값 으로 고정해 TC 8개를 만든다.

실수형·소수점 은 "가장 가까운 값"이 정밀도에 따라 달라진다. 소수 둘째 자리까지면 10.00의 바깥 값은 9.99다.

조합 테스트 — 네 가지 기준의 개수 공식

입력 인자가 여럿이고 각각 몇 개의 클래스(값)를 가질 때 쓴다. 인자 3개가 각각 3·4·2개 값을 가진다고 하자.

기준정의개수예
All combinations모든 조합곱3 × 4 × 2 = 24
Each choice모든 인자의 모든 값이 최소 한 번가장 큰 값 개수4
페어와이즈(Pairwise)서로 다른 두 인자의 모든 값 쌍 이 최소 한 번최소 = 가장 큰 두 값 개수의 곱 이상3 × 4 = 12 이상
Base choice기본 조합 1개 + 한 인자씩만 다른 값으로 바꿈1 + Σ(값 개수 − 1)1 + 2 + 3 + 1 = 7

페어와이즈 최소 개수는 "가장 큰 두 인자 값 개수의 곱"이 하한 이다. 실제 생성 결과는 하한보다 클 수 있다(IPO 알고리즘·PICT 등 도구가 생성). 인자 4개가 모두 3개 값이면 하한 9이고, 직교 배열 L9로 정확히 9개가 된다.

손으로 페어와이즈를 만드는 순서(인자 A·B·C 각 2값):

TCABC
1a1b1c1
2a1b2c2
3a2b1c2
4a2b2c1

A-B 쌍 4개, A-C 쌍 4개, B-C 쌍 4개가 모두 나온다. 2^3 = 8개 대신 4개다.

결정표 — 조건 조합을 규칙으로

조건(원인)과 행동(결과)을 표로 놓고 규칙(열) 마다 TC 하나를 만든다. 불리언 조건 n개면 규칙은 2^n 개다. 결과가 같은 규칙은 - (무관, don't care)로 축약한다.

예: 회원이면서(C1) 구매액 5만 원 이상(C2)이면 무료배송, 쿠폰 보유(C3)면 할인.

R1R2R3R4R5R6R7R8
C1 회원TTTTFFFF
C2 5만 원 이상TTFFTTFF
C3 쿠폰TFTFTFTF
무료배송✔✔
할인✔✔✔✔

전체 규칙 2^3 = 8. 결정표 테스트는 "논리적으로 의존적인 모든 조건 조합 을 만드는" 기법이라는 문장이 O/X로 나온다(O). 인과 그래프는 원인·결과의 논리 관계를 그래프로 그린 뒤 결정표로 바꾸는 기법이다.

상태 전이 — 표와 스위치 커버리지

상태·이벤트·전이·행동으로 동작을 모델링한다. 전구 예: 상태 OFF·ON, 이벤트 PUSH.

상태 전이표 는 모든 (상태, 이벤트) 조합을 칸으로 만들고, 정의되지 않은 칸을 무효 전이 로 드러낸다. 다이어그램에는 안 보이는 무효 전이를 찾는 것이 표의 존재 이유다.

예: 문서 결재 — 상태 작성 중·결재 대기·승인·반려, 이벤트 상신·승인·반려·수정.

현재 상태 \ 이벤트상신승인반려수정
작성 중결재 대기무효무효작성 중
결재 대기무효승인반려무효
승인무효무효무효무효
반려무효무효무효작성 중

유효 전이는 5개(작성 중 → 결재 대기, 작성 중 → 작성 중, 결재 대기 → 승인, 결재 대기 → 반려, 반려 → 작성 중), 무효 칸은 16 − 5 = 11개 다.

커버리지덮을 것이 예에서
모든 상태상태마다 1회 이상 도달4개 상태
0-스위치(모든 유효 전이)유효 전이 하나하나5개 전이
1-스위치연속된 두 전이의 모든 쌍상태 하나에 들어오는 전이 × 나가는 전이의 합
무효 전이표의 무효 칸11개

1-스위치 개수는 상태마다 (들어오는 전이 수 × 나가는 전이 수)를 더한다. 작성 중: 들어옴 2(수정 자기 전이, 반려 → 수정) × 나감 2(상신, 수정) = 4, 결재 대기: 1 × 2 = 2, 반려: 1 × 1 = 1, 승인: 1 × 0 = 0 → 7개 다.

그 밖의 명세 기반 기법 — 정의만

  • 분류 트리 — 입력을 측면별로 분류한 트리를 그리고 잎의 조합으로 TC를 만든다(s1-m03-l06)
  • 신택스 테스트 — 입력 형식 문법(BNF 등)에서 유효·무효 문자열을 생성한다
  • 시나리오 테스트 — 유즈케이스의 기본·대안·예외 흐름을 따라간다(s1-m03-l04)

경험 기반 — 오류 추정과 탐색적 테스트

  • 오류 추정(Error guessing) — 개발자가 범할 실수를 경험·직관으로 추정해 그 결함이 드러날 TC를 만든다. tan(x) 에 90°, 정렬 함수에 빈 목록·원소 하나·전부 같은 값·이미 정렬된 목록, 필수 입력 누락, 길이 제약 위반, 형식 위반, 명시적·묵시적 범위 위반. 동등 분할의 무효 클래스 를 정할 때 함께 쓴다
  • 탐색적 테스트 — 대상 이해·TC 설계·실행을 병행 한다. 사전 명세서 없이 즉석에서 TC를 정하고 결과로 다음 테스트를 정한다. 효과는 테스터 지식에 의존한다. 간단한 차터 로 범위를 정하고, 개발 주기가 짧은 애자일·웹 시스템에 적합하다(s2-m05 모듈)

실무에서 왜 필요한가

계산 공식은 TC 수를 협상하는 언어 다. "옵션 5개가 각각 4가지 값이라 전체 조합은 1,024개지만 페어와이즈로 20개 안팎이면 두 옵션 사이 상호작용 결함은 모두 덮는다"는 설명은 일정 회의에서 바로 쓰인다. 결정표와 상태 전이표는 명세의 빈칸 을 찾는 도구이기도 하다 — 표를 그리다 "반려 상태에서 상신하면?"이라는 칸이 비어 있으면 그것은 TC가 아니라 기획 질문이다. 테스트 설계 이전에 요구 리뷰에서 그 질문을 던질 수 있다(s1-m02-l03).

실습 과제

과제 1 — 동등 분할 최소 TC (6분)

비밀번호 길이 8~16자, 영문·숫자·특수문자 각 1자 이상 포함 필수. 유효·무효 클래스를 나열하고 최소 TC 수를 구한다. 힌트: 길이 유효 1·무효 2, 문자 종류마다 포함 유효 1·미포함 무효 1. 유효 클래스 4개를 한 TC로, 무효 클래스 5개를 각각 한 TC로 → 6개.

과제 2 — 경곗값 개수 (6분)

할인율 입력이 정수 1 ≤ rate ≤ 50 이다. 2-value와 3-value 테스트 입력값을 쓰고 개수를 센다. 정답: 경곗값은 0, 1, 50, 51. 2-value는 그대로 0, 1, 50, 51 (4개). 3-value는 경곗값마다 세트 (−1, 0, 1), (0, 1, 2), (49, 50, 51), (50, 51, 52)를 만들고 겹치는 값을 하나로 세면 −1, 0, 1, 2, 49, 50, 51, 52 (8개).

과제 3 — 조합 개수 (5분)

브라우저 3종, OS 3종, 언어 2종, 해상도 4종. All combinations·Each choice·Base choice 개수와 페어와이즈 하한을 구한다. 정답: 72 / 4 / 1 + 2 + 2 + 1 + 3 = 9 / 4 × 3 = 12.

과제 4 — 상태 전이표 (10분)

자신이 테스트하는 기능 중 상태가 있는 것(주문·예약·회원 상태 등)을 골라 상태 전이표를 그린다. 유효 전이 수, 무효 칸 수, 1-스위치 개수를 구하고 무효 칸 중 실제로 사용자가 만들 수 있는 것 (뒤로 가기, 두 번 클릭, 다른 탭)을 골라 TC로 만든다.

자가 체크리스트

  • 범위·집합·필수 조건의 유효·무효 클래스 개수를 안다
  • 무효 클래스를 한 TC에 하나만 넣는 이유(마스킹)를 설명할 수 있다
  • 29119 방식에서 10 ≤ X ≤ 20 의 경곗값 네 개를 쓸 수 있다
  • 2-value·3-value 입력값을 구하고 개수를 셀 수 있다
  • All combinations·Each choice·Base choice 개수와 페어와이즈 하한을 계산할 수 있다
  • 결정표 규칙 수 2^n과 축약을 설명할 수 있다
  • 상태 전이표에서 무효 전이 수와 0·1-스위치 개수를 구할 수 있다
  • 오류 추정과 탐색적 테스트의 정의를 구분할 수 있다

흔한 실수

  • 경곗값을 유효 범위 쪽(10, 20)만 센다. 29119 방식에서는 무효 클래스의 끝값(9, 21)도 경곗값이다
  • 3-value 세트를 중복 포함해 센다. 문제가 One-to-One인지, 서로 다른 입력값의 개수인지 읽는다
  • 무효 값 여러 개를 한 TC에 넣는다. 첫 검사에서 막혀 나머지 처리가 실행되지 않는다
  • 페어와이즈 개수를 "정확히 곱"이라고 쓴다. 가장 큰 두 인자의 곱은 하한이다
  • 상태 전이 다이어그램만 본다. 무효 전이는 표를 그려야 보인다

참고 자료

  • TTA, 『CSTS 가이드 — 일반등급』 10장 명세 기반 테스트(동등 분할, 경곗값 분석, 조합 테스트, 결정표 테스트, 상태 전이 테스트), 2장 경험 기반 테스트
  • ISO/IEC/IEEE 29119-4:2021 Software and systems engineering — Software testing — Part 4: Test techniques — 2-value·3-value BVA, Each choice·Base choice·Pairwise 정의
  • Lei, Y., Tai, K. C., "In-Parameter-Order: A Test Generation Strategy for Pairwise Testing", HASE 1998 — IPO 알고리즘
  • Microsoft PICT — 페어와이즈 생성 도구
  • Copeland, L., A Practitioner's Guide to Software Test Design, Artech House, 2004 — 결정표·상태 전이·스위치 커버리지
  • 이 커리큘럼 안: s1-m03-l01 「동등분할과 경계값 분석」, s1-m03-l03 「상태전이와 결정테이블」, s1-m03-l05 「조합 테스트 — 페어와이즈와 PICT」, s1-m03-l08 「경험 기반 기법」

낯선 말 풀이

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

TC — 테스트 케이스
무엇을 어떻게 해보고 무엇이 나와야 하는지를 한 건으로 적어 둔 것. 시험 문제 한 문항에 해당한다.
PICT — 픽트
조건이 여러 개일 때 시험할 조합을 알아서 줄여 뽑아 주는 무료 도구.
OS — 운영체제
기기를 돌리는 바탕 프로그램 — 윈도우, 맥, 안드로이드 같은 것.
TTA — 한국정보통신기술협회
국내 정보통신 표준을 만들고 시험·인증도 하는 기관.
ISO/IEC/IEEE — 세 단체 공동 표준
세 국제 단체가 함께 낸 표준이라는 표시.

용어집 전체 보기