본문으로 건너뛰기
중급22

명세 기반 기법 (4) 조합 테스트 — 페어와이즈와 PICT

모듈 1에서 확인한 조합 폭발 문제를, "대부분의 결함은 두 값의 조합에서 나온다"는 경험칙으로 실현 가능한 크기로 줄인다.

  • #페어와이즈
  • #조합테스트
  • #PICT
  • #테스트설계

개념

모듈 1(레슨 5, "완전한 테스트는 불가능하다")에서 필드 몇 개짜리 폼도 조합이 수백 가지로 폭발한다는 걸 계산으로 확인했다. 페어와이즈는 이 문제를 실무에서 다룰 수 있는 크기로 줄이는 구체적인 방법이다.

경험칙: 결함은 대부분 두 값의 조합에서 나온다

여러 연구와 실무 경험이 공통적으로 보여주는 사실이 있다 — 소프트웨어 결함의 대부분은 파라미터 하나, 혹은 파라미터 두 개의 조합에서 발생하고, 3개 이상이 동시에 얽혀야만 드러나는 결함은 상대적으로 드물다. 그렇다면 모든 조합을 테스트하는 대신 **모든 쌍(pair)**만 한 번씩 나오도록 테스트 케이스를 고르면, 훨씬 적은 케이스로 비슷한 수준의 결함을 잡을 수 있다. 이게 페어와이즈(Pairwise) 테스트다.

숫자로 보는 효과

결제 화면에 파라미터가 3개 있다고 하자 — 결제수단(카드/계좌이체/간편결제), 배송방법(일반/빠른/픽업), 회원등급(일반/VIP/신규). 각각 3가지 값이면 전체 조합은 3×3×3 = 27가지다.

페어와이즈로 줄이면, "모든 두 파라미터의 조합"만 한 번씩 나오게 케이스를 고른다 — 결과는 보통 9가지 안팎으로 줄어든다. 27개에서 9개로 줄었지만, 파라미터 두 개짜리 조합은 여전히 전부 한 번씩 검증된다.

PICT로 자동 생성하기

이 조합을 손으로 짜는 건 파라미터가 늘어날수록 어려워진다. **PICT(Pairwise Independent Combinatorial Testing)**는 마이크로소프트가 만든 무료 도구로, 파라미터와 값을 텍스트로 적으면 페어와이즈 조합을 자동으로 계산해준다.

결제수단: 카드, 계좌이체, 간편결제
배송방법: 일반, 빠른, 픽업
회원등급: 일반, VIP, 신규

이런 입력 모델을 PICT에 넣으면, "모든 두 파라미터 조합이 최소 한 번씩 나오는" 최소한의 테스트 케이스 목록을 만들어준다. 비슷한 도구로 Allpairs, JENNY도 있다 — 원리는 같고 사용 방식이 다르다.

언제 조심해야 하는가

페어와이즈는 2개 조합에서 나오는 결함을 잡는 데 최적화되어 있다. 만약 "결제수단이 간편결제이면서 배송방법이 픽업이면서 회원등급이 신규일 때만" 터지는 3중 조합 결함이 있다면, 페어와이즈는 그 조합을 우연히 포함하지 않는 한 놓칠 수 있다. 그래서 이미 "이 세 가지가 같이 얽히면 위험하다"고 알고 있는 영역에는 페어와이즈 대신 그 조합을 명시적으로 포함시키거나 전수 테스트를 고려해야 한다. 페어와이즈는 "특별히 의심되는 조합은 없지만 파라미터가 많아 다 볼 수 없는 상황"에 가장 적합하다.

실무에서 왜 필요한가

설정 화면, 필터 옵션, 결제 수단처럼 파라미터가 많은 화면에서 페어와이즈는 현실적인 테스트 범위를 만드는 거의 유일한 방법이다. 전수 테스트는 시간상 불가능하고, 그렇다고 아무렇게나 몇 개만 골라 테스트하면 "왜 이 케이스들을 골랐는지" 설명할 수 없다(모듈 1, 레슨 5에서 강조한 부분). 페어와이즈는 "왜 9개인가"에 대해 "모든 두 파라미터 조합을 커버하기 때문"이라는 명확한 근거를 제공한다.

실습 과제

과제 1 — 조합 수 계산하기 (8분)

회원가입 폼에 파라미터가 4개 있다고 하자 — 국가(3개 값), 언어(3개 값), 결제수단(4개 값), 알림설정(2개 값). 전체 조합 수를 계산한다. 이 중 페어와이즈로 줄이면 대략 어느 정도 규모로 줄어들지 (정확한 계산 없이) 감으로 추측해본다.

과제 2 — PICT 입력 모델 작성하기 (12분)

"검색 필터" 기능에 파라미터가 3개 있다고 하자 — 정렬기준(최신순/인기순/가격순), 카테고리(전체/의류/전자제품), 재고여부(전체/재고있음만). 이 파라미터와 값을 PICT 입력 형식(위 예시 참고)으로 직접 써본다.

자가 체크리스트

  • "결함 대부분이 두 값의 조합에서 나온다"는 경험칙을 설명할 수 있다
  • 전체 조합 수와 페어와이즈로 줄인 조합 수의 차이를 계산으로 보여줄 수 있다
  • PICT 같은 도구에 넣을 입력 모델을 직접 작성할 수 있다
  • 페어와이즈가 3중 이상의 조합 결함을 놓칠 수 있다는 한계를 설명할 수 있다

흔한 실수

  • 페어와이즈를 "무조건 다 줄여주는 만능 기법"으로 오해한다. 이미 위험하다고 알려진 특정 조합이 있다면 페어와이즈에 맡기지 말고 명시적으로 포함시켜야 한다.
  • 파라미터의 값 개수를 잘못 나눈다. 예를 들어 "빈 값"을 별도 값으로 넣을지 말지에 따라 결과가 달라진다 — 동등분할(레슨 1)로 값을 먼저 정리한 뒤 페어와이즈에 넣어야 한다.
  • PICT가 만들어준 케이스를 그대로 믿고 왜 그렇게 나왔는지 이해하지 않는다. 도구는 계산을 대신해줄 뿐, "이 조합들이 왜 필요한지" 설명할 수 있어야 리뷰에서 방어할 수 있다.

참고 자료