"테스트 케이스가 너무 많아서 오늘도 야근 확정이신가요?"
소프트웨어의 기능이 복잡해질수록 OS, 브라우저, 사용자 권한, 언어 등 테스트해야 할 조합은 기하급수적으로 늘어납니다.
이 모든 경우의 수를 테스트하는 '전수 테스트'는 현실적으로 불가능에 가깝습니다.
여기, 우리의 시간과 노력을 획기적으로 줄여주면서도 높은 결함 발견율을 자랑하는 똑똑한 테스트 기법이 있습니다.
바로 페어와이즈(Pairwise) 테스트, 또는 조합 테스트(Combinatorial Testing)입니다.
페어와이즈 테스트는 조합 테스트의 한 종류입니다. 즉, 조합 테스트가 더 큰 상위 개념입니다.
가장 쉬운 비유는 과일과 사과의 관계입니다.
과일 vs. 사과
- 조합 테스트 (Combinatorial Testing) = 과일 🍎🍌🍓
- '과일'이라는 넓은 카테고리(개념) 전체를 의미합니다.
- 과일 가게에는 사과도 있고, 바나나도 있고, 딸기도 있습니다.
- 페어와이즈 테스트 (Pairwise Testing) = 사과 🍎
- '과일'이라는 카테고리 안에서 가장 유명하고, 많이 찾는 특정 종류입니다.
- 우리가 흔히 "과일 좀 사 와"라고 할 때 사과를 떠올리는 것처럼, "조합 테스트 하자"고 할 때 가장 먼저 페어와이즈를 떠올립니다.
- 3-wise, 4-wise 테스트 = 바나나🍌, 딸기🍓
- 사과 외에 다른 종류의 과일들입니다.
이처럼, 페어와이즈 테스트는 조합 테스트 중에서 Strength(강도)가 2인, 가장 대표적인 테스트 방법을 부르는 이름입니다.
기술적인 관점에서의 차이
구분 | 조합 테스트 (Combinatorial Testing) | 페어와이즈 테스트 (Pairwise Testing) |
개념 | 상위 개념 / 포괄적 용어 | 하위 개념 / 구체적 방법 |
핵심 아이디어 | 여러 파라미터 값들의 'N개 조합'을 체계적으로 테스트하는 모든 테스트 설계 기법의 총칭. | 조합 테스트 중에서 '2개 조합(Pair)'을 모두 커버하는, Strength가 2인 특정 테스트 방법. |
핵심 파라미터 | Strength (또는 t-way)를 지정할 수 있음. (예: 2, 3, 4...) | Strength가 2로 고정되어 있음. |
다른 이름 | N-wise Testing, t-way Testing | All-Pairs Testing |
사용 예시 | 우리 프로젝트는 조합 테스트 기법을 도입하기로 했어. 안정성이 중요하니 Strength는 3으로 가자. | 이번 기능은 간단하니까 페어와이즈 테스트로 빠르게 조합을 뽑아서 진행하자. |
왜 이 차이를 알아야 할까요?
- 정확한 의사소통: "조합 테스트"라고 말하면, 듣는 사람은 "Strength를 몇으로 하려는 거지?"라고 생각할 수 있습니다. "페어와이즈 테스트"라고 말하면, 모두가 '아, Strength 2로 하는구나'라고 명확하게 이해할 수 있습니다.
- 도구의 이해: Microsoft의 PICT와 같은 도구는 조합 테스트 도구입니다. 왜냐하면 Strength 값을 2, 3, 4 등으로 사용자가 직접 지정할 수 있기 때문입니다. 반면 pairwise.yuuniworks.com 같은 사이트는 페어와이즈 도구입니다. Strength가 2로 고정되어 있기 때문이죠.
- 전략적 선택: "이번에는 비용 효율적으로 페어와이즈(Strength 2)로 가자" 또는 "이 기능은 매우 중요하니 3-wise(Strength 3) 테스트를 해야 해"처럼, 상황에 맞는 테스트 전략을 세우려면 더 넓은 개념인 조합 테스트와 그 안의 다양한 Strength 레벨을 이해하는 것이 중요합니다.
모든 페어와이즈 테스트는 조합 테스트이지만, 모든 조합 테스트가 페어와이즈 테스트는 아닙니다.
자, 그럼 페어와이즈에 대해 알아보러 갈까요?
이 글 하나로 페어와이즈의 개념부터 실전 적용 팁까지 완벽하게 마스터해 보세요.
핵심은 '모든 것을 테스트하는 것은 불가능하다'는 현실을 인정하고, '가장 문제가 될 만한 곳에 집중하자'는 똑똑한 전략입니다.
1. 페어와이즈 테스트, 도대체 뭔가요?
페어와이즈 테스트의 작동 원리 (3단계)
1단계: 문제의 발단 - "조합의 폭발 (Combinatorial Explosion)"
소프트웨어 테스트에는 여러 가지 조건(파라미터)이 있습니다.
- OS: Windows, macOS, Linux
- 브라우저: Chrome, Firefox, Edge
- 언어: 한국어, 영어, 일본어
모든 조합을 테스트(전수 테스트)하려면 3 x 3 x 3 = 27가지의 케이스가 필요합니다.
여기에 '사용자 등급' 같은 조건이 하나만 더 추가되어도 경우의 수는 순식간에 100가지를 넘어갑니다.
이것을 '조합의 폭발'이라고 부릅니다. 현실적으로 모든 조합을 테스트하는 것은 불가능합니다.
2단계: 핵심 가정 - "결함은 주로 두 요소의 만남에서 발생한다"
수많은 연구와 경험에 따르면, 소프트웨어 결함의 대부분은 단일 파라미터 자체의 문제이거나, 두 개의 파라미터가 상호작용할 때 발생합니다.
- 1-way 결함 (한 요소 문제): 'Firefox 브라우저' 자체가 그냥 켜지지 않는 문제.
- 2-way 결함 (두 요소 문제): 'macOS'에서 'Chrome 브라우저'를 쓸 때만 글자가 깨지는 문제.
- 3-way 결함 (세 요소 문제): 'Linux'에서 'Edge 브라우저'로 '일본어' 설정을 했을 때만 버튼이 사라지는 문제.
(이런 경우는 상대적으로 드뭅니다.)
페어와이즈 테스트는 이 통계적 사실에 기반합니다.
"모든 '두 요소의 조합(짝꿍)'을 최소 한 번씩만 테스트하면, 대부분(약 90%)의 결함을 매우 효율적으로 발견할 수 있다"는 것이 핵심 가정입니다.
3단계: 실행 원리 - "가장 욕심 많은 알고리즘 (Greedy Algorithm)"
페어와이즈 도구나 수동으로 케이스를 만들 때, 다음과 같은 '욕심쟁이' 방식으로 동작합니다.
목표: 만들어야 할 모든 '짝꿍 목록(Pair Checklist)'을 가장 적은 테스트 케이스로 지워나가기
당신이 맛있는 아이스크림 가게 사장님이라고 상상해 보세요.
- 맛 (3가지): 딸기, 초코, 바닐라
- 토핑 (2가지): 초코칩, 스프링클
- 콘 (2가지): 와플콘, 일반콘
모든 조합(3 x 2 x 2 = 12가지)을 다 맛보면 배가 터지겠죠?
No. | 맛 (Flavor) | 토핑 (Topping) | 콘 (Cone) |
1 | 딸기 | 초코칩 | 와플콘 |
2 | 딸기 | 초코칩 | 일반콘 |
3 | 딸기 | 스프링클 | 와플콘 |
4 | 딸기 | 스프링클 | 일반콘 |
5 | 초코 | 초코칩 | 와플콘 |
6 | 초코 | 초코칩 | 일반콘 |
7 | 초코 | 스프링클 | 와플콘 |
8 | 초코 | 스프링클 | 일반콘 |
9 | 바닐라 | 초코칩 | 와플콘 |
10 | 바닐라 | 초코칩 | 일반콘 |
11 | 바닐라 | 스프링클 | 와플콘 |
12 | 바닐라 | 스프링클 | 일반콘 |
하지만 우리는 "재료들끼리 서로 잘 어울리는지"가 궁금합니다.
페어와이즈의 핵심 아이디어는 이것입니다.
"모든 재료가 다른 종류의 모든 재료와 최소 한 번씩은 짝꿍이 되게 맛보자!"
예를 들어, '딸기 맛'은 '초코칩'과도, '스프링클'과도 짝을 이루고, '와플콘'과도, '일반콘'과도 짝을 이루도록 조합을 만드는 겁니다.
1.1 만들어가는 방법 (가산법)
Step 0: 전쟁 준비 - '짝꿍 지도' 그리기 (Pair Checklist 만들기)
가장 먼저 할 일은 우리가 정복해야 할 모든 '짝꿍'들의 목록을 만드는 것입니다. 이 지도가 없으면 길을 잃게 됩니다.
짝꿍 종류 | 만들어야 할 모든 짝꿍 (총 16개) | 체크 |
맛-토핑 (6개) | 딸기-초코칩, 딸기-스프링클, 초코-초코칩, 초코-스프링클, 바닐라-초코칩, 바닐라-스프링클 | |
맛-콘 (6개) | 딸기-와플콘, 딸기-일반콘, 초코-와플콘, 초코-일반콘, 바닐라-와플콘, 바닐라-일반콘 | |
토핑-콘 (4개) | 초코칩-와플콘, 초코칩-일반콘, 스프링클-와플콘, 스프링클-일반콘 |
이제 이 16개의 짝꿍을 가장 적은 아이스크림으로 모두 맛보는 여정을 시작하겠습니다.
Step 1: 첫 번째 케이스 만들기 (가장 쉬운 시작)
아무 조합이나 하나 골라 첫 번째 케이스를 만듭니다. 보통 가장 기본이 되는 값들로 시작하는 게 편합니다.
케이스 1: 딸기 | 초코칩 | 와플콘
자, 이 아이스크림을 맛봄으로써 우리는 어떤 짝꿍들을 지도에서 지울 수 있을까요?
- (맛-토핑) 짝꿍: 딸기-초코칩
- (맛-콘) 짝꿍: 딸기-와플콘
- (토핑-콘) 짝꿍: 초코칩-와플콘
짝꿍 지도 업데이트:
짝꿍 종류 | 만들어야 할 모든 짝꿍 (총 16개) | 체크 |
맛-토핑 (6개) | ✅ | |
맛-콘 (6개) | ✅ | |
토핑-콘 (4개) | ✅ |
벌써 3개의 짝꿍을 정복했습니다!
Step 2: 두 번째 케이스 만들기 (본격적인 전략)
이제부터가 진짜입니다. "어떤 조합을 만들어야 아직 체크 안 된 새 짝꿍을 가장 많이 만들 수 있을까?" 하고 욕심을 내야 합니다.
- 지도를 봅니다. 딸기는 아직 스프링클, 일반콘과 짝꿍이 된 적이 없네요.
- 욕심쟁이의 생각: "좋아, 딸기와 스프링클, 일반콘을 한 번에 묶어볼까?"
- 조합 결정: 딸기 | 스프링클 | 일반콘 이라는 조합을 만듭니다.
- 효과 확인: 이 조합이 만들어내는 새로운 짝꿍들을 확인해 봅시다.
- (맛-토핑): 딸기-스프링클 (새로운 짝꿍!)
- (맛-콘): 딸기-일반콘 (새로운 짝꿍!)
- (토핑-콘): 스프링클-일반콘 (새로운 짝꿍!)
케이스 2: 딸기 | 스프링클 | 일반콘
짝꿍 지도 업데이트:
짝꿍 종류 | 만들어야 할 모든 짝꿍 (총 16개) | 체크 |
맛-토핑 (6개) | ✅✅ | |
맛-콘 (6개) | ✅✅ | |
토핑-콘 (4개) | ✅✅ |
단 2개의 케이스로 무려 6개의 짝꿍을 정복했습니다!
Step 3: 세 번째 케이스부터는 '빈칸 채우기' 게임
이 과정을 계속 반복합니다. 지도를 보며 비어있는 칸을 가장 효율적으로 채우는 조합을 찾습니다.
- 지도를 봅니다. 초코 맛은 아직 아무와도 짝꿍이 되지 못했습니다. 초코-초코칩, 초코-일반콘 이 비어있네요.
- 욕심쟁이의 생각: "좋아, 초코, 초코칩, 일반콘을 묶어보자!"
케이스 3: 초코 | 초코칩 | 일반콘
- 새로운 짝꿍: 초코-초코칩, 초코-일반콘, 초코칩-일반콘. (3개 추가 정복!)
케이스 4: 초코 | 스프링클 | 와플콘
- 지도를 보니: 초코-스프링클, 초코-와플콘, 스프링클-와플콘이 비어있습니다.
- 새로운 짝꿍: 위 3개를 한 번에 정복!
케이스 5: 바닐라 | 초코칩 | 와플콘
- 지도를 보니: 바닐라 차례입니다. 바닐라-초코칩, 바닐라-와플콘이 비어있네요.
- 새로운 짝꿍: 위 2개를 정복! (초코칩-와플콘은 이미 1번 케이스에서 정복했지만 괜찮습니다. 새로운 짝꿍을 만드는게 중요!)
케이스 6: 바닐라 | 스프링클 | 일반콘
- 지도를 보니: 마지막 남은 바닐라-스프링클, 바닐라-일반콘 짝꿍이 보입니다.
- 새로운 짝꿍: 마지막 남은 2개를 정복!
Step 4: 완성! - 지도 위의 모든 길을 지나오다
짝꿍 지도의 16개 항목이 모두 지워졌습니다. 우리는 단 6개의 케이스로 이 어려운 임무를 완수했습니다.
최종 페어와이즈 테스트 케이스 (6개):
- 딸기 | 초코칩 | 와플콘
- 딸기 | 스프링클 | 일반콘
- 초코 | 초코칩 | 일반콘
- 초코 | 스프링클 | 와플콘
- 바닐라 | 초코칩 | 와플콘
- 바닐라 | 스프링클 | 일반콘
이것이 바로 페어와이즈 도구가 내부적으로 케이스를 생성하는 원리입니다.
매 단계마다 남은 조합을 가장 많이 커버하는 '최적의 한 수'를 찾아 나가는 과정인 셈이죠.
이렇게 하면 12가지가 아닌 단 6가지 조합만으로도 모든 재료 간의 궁합을 확인할 수 있습니다.
1.2 전체에서 지워나가는 방법 (소거법)으로 케이스 만들기
핵심 원리:
어떤 테스트 케이스를 평가할 때, 그 케이스가 포함하는 모든 짝(Pair)들이 이미 다른 '살아남은' 케이스들에 의해 커버된다면, 그 케이스는 불필요하므로 지운다.
즉, 단 하나의 '새로운' 짝이라도 커버한다면, 그 케이스는 반드시 살아남아야 합니다.
준비물:
- 전체 케이스 목록 (12개): 우리가 지워나갈 대상입니다.
- 짝꿍 지도 (16개): 어떤 짝꿍이 커버되었는지 기록할 우리의 보물지도입니다.
Step 1: 전체 목록과 짝꿍 지도 준비
먼저, 12개의 전체 케이스 목록과 16개의 짝꿍 목록을 펼쳐 놓습니다.
[전체 케이스 목록]
- 딸기 | 초코칩 | 와플콘
- 딸기 | 초코칩 | 일반콘
- 딸기 | 스프링클 | 와플콘
- 딸기 | 스프링클 | 일반콘
- 초코 | 초코칩 | 와플콘
- 초코 | 초코칩 | 일반콘
- 초코 | 스프링클 | 와플콘
- 초코 | 스프링클 | 일반콘
- 바닐라 | 초코칩 | 와플콘
- 바닐라 | 초코칩 | 일반콘
- 바닐라 | 스프링클 | 와플콘
- 바닐라 | 스프링클 | 일반콘
[짝꿍 지도] - 각 짝꿍 옆에 어떤 케이스 번호가 커버했는지 기록할 공간을 만듭니다.
1 | 딸기-초코칩 |
2 | 딸기-스프링클 |
3 | 초코-초코칩 |
4 | 초코-스프링클 |
5 | 바닐라-초코칩 |
6 | 바닐라-스프링클 |
7 | 딸기-와플콘 |
8 | 딸기-일반콘 |
9 | 초코-와플콘 |
10 | 초코-일반콘 |
11 | 바닐라-와플콘 |
12 | 바닐라-일반콘 |
13 | 초코칩-와플콘 |
14 | 초코칩-일반콘 |
15 | 스프링클-와플콘 |
16 | 스프링클-일반콘 |
Step 2: 순서대로 '살릴지, 지울지' 평가하기
이제 1번 케이스부터 차례대로 평가를 시작합니다.
1. 케이스 1번 평가
- 케이스: 딸기 | 초코칩 | 와플콘
- 결정: 첫 번째 케이스는 무조건 살립니다(KEEP). 비교 대상이 없기 때문이죠.
- 짝꿍 지도 업데이트:
- 딸기-초코칩: (커버 by #1)
- 딸기-와플콘: (커버 by #1)
- 초코칩-와플콘: (커버 by #1)
2. 케이스 2번 평가
- 케이스: 딸기 | 초코칩 | 일반콘
- 분석: 이 케이스는 어떤 짝꿍들을 포함하나요?
- 딸기-초코칩: 앗, 이 짝꿍은 이미 케이스 1번이 커버했네요.
- 딸기-일반콘: 오, 이 짝꿍은 새로운 짝꿍입니다! 아직 지도에 없어요.
- 초코칩-일반콘: 이것도 새로운 짝꿍입니다!
- 결정: 단 하나의 새로운 짝꿍이라도 포함하므로, 이 케이스는 살립니다(KEEP).
- 짝꿍 지도 업데이트:
- 딸기-일반콘: (커버 by #2)
- 초코칩-일반콘: (커버 by #2)
3. 케이스 5번 평가 (지워지는 예시)
...이런 식으로 3번, 4번을 살리고 나면 짝꿍 지도가 많이 채워집니다. 이제 지워지는 예시를 살펴봅시다. (설명을 위해 순서를 건너뛰었습니다)
살아남은 케이스들이 아래와 같다고 가정해 봅시다.
- #1: 딸기 | 초코칩 | 와플콘
- #4: 딸기 | 스프링클 | 일반콘
- #6: 초코 | 초코칩 | 일반콘
- #7: 초코 | 스프링클 | 와플콘
이 상태에서 **케이스 5번 초코 | 초코칩 | 와플콘**을 평가해 봅시다.
- 분석: 이 케이스의 짝꿍들을 봅시다.
- 초코-초코칩: 앗, 이 짝꿍은 케이스 6번이 이미 커버하고 있네요.
- 초코-와플콘: 앗, 이 짝꿍은 케이스 7번이 이미 커버하고 있네요.
- 초코칩-와플콘: 앗, 이 짝꿍은 케이스 1번이 이미 커버하고 있네요.
- 결정: 케이스 5번은 새롭게 기여하는 짝꿍이 단 하나도 없습니다! 이미 다른 케이스들이 모든 역할을 하고 있으므로, 이 케이스는 불필요합니다. 지웁니다(DELETE).
두 방법 비교: 어느 것이 더 좋을까?
구분 | 만들어가는 방법 (가산법) | 지워나가는 방법 (소거법) |
핵심 | 백지에서 시작해, 새 짝을 가장 많이 만드는 케이스를 추가 | 전체 목록에서 시작해, 새 짝에 기여 못 하는 케이스를 제거 |
장점 | ① 직관적이고 빠름<br>② 인지 부하가 적음 (남은 짝만 보면 됨)<br>③ 최종 케이스 수에 바로 도달 | ① 개념이 쉬워 보일 수 있음<br>② 처음에 전체를 보니 빠뜨릴 염려가 없음 |
단점 | 처음엔 막막하게 느껴질 수 있음 | ① 매우 번거로움 (모든 케이스를 평가해야 함)<br>② 인지 부하가 매우 높음 (케이스의 모든 짝을 기존 커버 목록과 계속 비교)<br>③ 평가 순서에 따라 최종 케이스 조합이 달라질 수 있음 |
추천 | ★ 수동 작업에 훨씬 더 적합하고 효율적 | ★ 비효율적이며 수동 작업에는 추천하지 않음 |
"전체에서 지워나가는 방법"은 논리적으로는 완벽하게 맞는 말입니다.
하지만 사람이 직접 하기에는 매우 피곤하고 실수하기 쉬운 방법입니다.
반면, "하나씩 만들어가는 방법"은 내가 정복해야 할 목표(짝꿍 지도)를 명확히 두고, 목표를 향해 가장 효율적인 돌멩이를 하나씩 놓는 것과 같습니다.
훨씬 더 체계적이고, 빠르며, 인지적인 부담이 적습니다.
따라서 페어와이즈 케이스를 수동으로 만들 때는, 반드시 '만들어가는 방법'을 사용하시는 것을 강력하게 추천합니다.
1.3 Strength2
Strength2 이 6가지 조합만으로도 모든 맛-토핑, 맛-콘, 토핑-콘의 '짝꿍'이 최소 한 번씩은 모두 테스트됩니다.
보시다시피, 12가지의 테스트 케이스가 단 6가지로 줄어들어 테스트 시간과 노력을 50%나 절약할 수 있습니다
No. | 맛 (Flavor) | 토핑 (Topping) | 콘 (Cone) |
1 | 딸기 | 초코칩 | 와플콘 |
2 | 딸기 | 스프링클 | 일반콘 |
3 | 초코 | 초코칩 | 일반콘 |
4 | 초코 | 스프링클 | 와플콘 |
5 | 바닐라 | 초코칩 | 와플콘 |
6 | 바닐라 | 스프링클 | 일반콘 |
이처럼, 페어와이즈 테스트란 모든 조합을 테스트하는 대신, 파라미터 값들의 모든 쌍(Pair)이 최소 한 번씩 테스트되도록 조합을 만드는 효율적인 테스트 설계 기법입니다.
1.4 Strength 3 테스트 케이스 (세 친구 조합)
Strength 3의 목표는 모든 파라미터 값들의 "세 친구(Triplet)" 조합이 최소 한 번씩 테스트되도록 하는 것입니다.
우리에게는 맛, 토핑, 콘 이라는 3개의 파라미터가 있습니다. 따라서 '세 친구 조합'이란 (맛 1가지, 토핑 1가지, 콘 1가지)로 만들 수 있는 모든 조합을 의미합니다.
결과적으로 모든 경우의 수(3 x 2 x 2 = 12개)를 모두 테스트해야만 Strength 3의 목표를 달성할 수 있습니다.
아래는 Strength 3 원칙에 따른 12가지 케이스입니다.
No. | 맛 (Flavor) | 토핑 (Topping) | 콘 (Cone) |
1 | 딸기 | 초코칩 | 와플콘 |
2 | 딸기 | 초코칩 | 일반콘 |
3 | 딸기 | 스프링클 | 와플콘 |
4 | 딸기 | 스프링클 | 일반콘 |
5 | 초코 | 초코칩 | 와플콘 |
6 | 초코 | 초코칩 | 일반콘 |
7 | 초코 | 스프링클 | 와플콘 |
8 | 초코 | 스프링클 | 일반콘 |
9 | 바닐라 | 초코칩 | 와플콘 |
10 | 바닐라 | 초코칩 | 일반콘 |
11 | 바닐라 | 스프링클 | 와플콘 |
12 | 바닐라 | 스프링클 | 일반콘 |
왜 케이스 수가 줄어들지 않았을까요?
아주 중요한 포인트입니다.
Strength N 테스트는 파라미터의 총 개수가 N보다 클 때 케이스 수를 줄여주는 효과가 나타납니다.
- 현재 예시: 파라미터 개수 = 3개 (맛, 토핑, 콘). 테스트하려는 Strength = 3.
- 파라미터 개수와 Strength가 같으므로, 모든 조합을 테스트해야 하는 '전수 테스트'와 결과가 동일해집니다.
- 만약 파라미터가 4개였다면? (예: 맛, 토핑, 콘, 시럽)
- 이때 Strength 3 테스트를 하면, 4개의 파라미터 중 어떤 3개를 골라도(맛-토핑-콘, 맛-토핑-시럽, 토핑-콘-시럽 등) 그 값들의 모든 '세 친구 조합'을 커버하는 케이스를 만들어 줍니다.
- 이 경우, 전체 경우의 수보다는 훨씬 적은 수의 케이스로 줄어들게 됩니다.
테스트 방식 | 목표 | 생성된 케이스 수 | 핵심 설명 |
전수 테스트 | 모든 가능한 조합 | 12개 | 모든 경우의 수를 테스트 |
Strength 2 (Pairwise) | 모든 짝(Pair) 조합 | 6개 | 가장 효율적인 테스트 |
Strength 3 | 모든 세 친구(Triplet) 조합 | 12개 | 파라미터가 3개라 전수 테스트와 동일해짐 |
이런 욕심쟁이 방식 덕분에, 꼭 필요하지 않은 중복 테스트를 피하고 최소한의 케이스로 모든 짝(Pair)을 커버할 수 있게 되는 것입니다.
단계 | 설명 |
1. 문제 인식 | 모든 조합을 테스트하는 것은 불가능하다. |
2. 핵심 가정 | 대부분의 버그는 **두 요소의 상호작용(Pair)**에서 발생한다. |
3. 목표 설정 | 그렇다면 모든 Pair를 최소 한 번씩만 테스트하자. |
4. 실행 방법 | 매번 새로운 Pair를 가장 많이 포함하는 조합을 만들어, 가장 적은 케이스로 목표를 달성한다. |
이것이 바로 페어와이즈 테스트가 마법처럼 테스트 케이스 수를 줄여주면서도 높은 결함 발견율을 유지하는 과학적인 원리입니다.
2. 핵심 개념 'Strength(강도)' 파헤치기
페어와이즈를 더 깊게 이해하려면 'Strength(강도)'라는 개념을 알아야 합니다.
Strength는 한 번에 고려하는 파라미터의 개수를 의미합니다.
- Strength 2 (Pairwise): 우리가 흔히 말하는 페어와이즈입니다.
모든 '짝꿍(2개 조합)'을 커버합니다.
놀랍게도 이것만으로도 전체 결함의 약 90%를 발견할 수 있다고 알려져 있습니다.
- Strength 3 (3-wise): 모든 '세 친구(3개 조합)'를 커버합니다. 두 개가 아닌 세 개의 파라미터가 복합적으로 작용할 때 발생하는 미묘한 버그를 잡는 데 효과적이며, 최대 98%의 결함 발견율을 보입니다.
- Strength 4 이상: 더 높은 강도로, 더 복잡한 상호작용을 테스트합니다.
Strength | 고려 단위 | 결함 발견율 (추정) | 비고 |
2 | 모든 짝 (Pair) | 약 90% | 가장 널리 쓰이며 비용 대비 효율이 가장 높음 |
3 | 모든 세 친구 (Triplet) | 최대 98% | 높은 안정성이 요구될 때 사용 |
4 이상 | 모든 N개 조합 | 98% 이상 | 극도의 안정성이 필요한 시스템(항공, 의료)에서 사용 |
3. 우리 팀에 맞는 Strength는? (산업군별 추천)
"그럼 우리 팀은 Strength 몇을 사용해야 할까요?" 정답은 없습니다.
테스트 대상의 특성과 중요도에 따라 달라집니다.
산업군 | 추천 Strength | 이유 및 비고 |
금융권 | 3 ~ 4 | 결제, 보안, 거래 정확성 등 하나의 오류도 치명적일 수 있어 높은 강도를 사용합니다. |
이커머스 | 2 ~ 3 | 기능이 다양하고 테스트 범위가 넓습니다. 핵심 결제/주문 기능은 3, 일반 기능은 2를 적용하는 등 혼합하여 사용합니다. |
모바일 앱 | 2 | 기기, OS, 화면 크기 등 파라미터 조합이 너무 많아 테스트 케이스 수를 현실적으로 줄이기 위해 Strength 2를 주로 사용합니다. |
자동차/임베디드 | 3 ~ 5 | 사람의 안전과 직결되는 영역(자율주행, 제동장치)에서는 매우 높은 강도의 테스트를 수행합니다. |
KOLAS 인증 | 3 | 국내 소프트웨어 품질 인증인 KOLAS에서는 일반적으로 Strength 3을 기준으로 테스트 설계를 요구하기도 합니다. |
4. 툴 없이 직접 해보자! 엑셀로 케이스 뽑기
원리를 이해하기 위해 엑셀로 직접 케이스를 뽑아봅시다. (Strength 2 기준)
- (가장 중요) '짝꿍 체크리스트' 만들기: 테스트해야 할 모든 짝(Pair)의 목록을 별도 시트에 만듭니다. (예: Win-Chrome, Win-Admin, Chrome-Admin...)
- 첫 케이스 만들기: 가장 일반적인 조합으로 첫 케이스를 만듭니다. (Windows | Chrome | Admin)
- 체크리스트 지우기: 1번 케이스가 커버하는 모든 짝을 체크리스트에서 지웁니다.
- 새로운 짝 최대로 만들기: 다음 케이스는 아직 체크되지 않은 짝을 가장 많이 포함하도록 조합을 만듭니다.
- 반복: 체크리스트의 모든 짝이 지워질 때까지 3~4번을 반복합니다.
이 수동 작업은 원리 이해에 큰 도움이 되지만, 파라미터가 많아지거나 Strength 3 이상을 다룰 때는 실수할 확률이 높으므로 자동화 도구 사용을 강력히 추천합니다.
5. 추천 페어와이즈 도구
- pairwise.yuuniworks.com: 웹 기반으로 사용하기 매우 간편한 온라인 도구입니다. (Strength 2 고정)
- PICT (Pairwise Independent Combinatorial Testing): Microsoft에서 개발한 강력한 커맨드라인 도구입니다. Strength를 자유롭게 조절할 수 있고 제약 조건(Constraints) 설정도 가능해 실무에서 가장 널리 쓰입니다.
- AllPairs, Hexawise 등: 다양한 상용/오픈소스 도구들이 존재합니다.
마치며
페어와이즈 테스트는 단순히 테스트 케이스를 줄이는 기법이 아닙니다.
제한된 자원 안에서 최대의 효율로 잠재적 결함을 찾아내는 '스마트한 테스트 전략'입니다.
모든 것을 테스트할 수 없다는 현실을 인정하고, 가장 중요한 상호작용에 집중함으로써 우리는 더 빠르고, 더 효율적으로 제품의 품질을 높일 수 있습니다.
오늘 당장 여러분의 테스트 프로세스에 '페어와이즈를'를 도입해 보는 것은 어떨까요?
'테스팅기법 > 페어와이즈(JENNY)' 카테고리의 다른 글
pairewise testing tool (0) | 2020.11.11 |
---|