418. 페어와이즈 테스팅 (Pairwise Testing)

핵심 인사이트 (3줄 요약)

  1. 본질: 페어와이즈 테스팅(Pairwise Testing)이란 소프트웨어 테스팅에서 변수(파라미터)들의 가능한 값 조합 중 모든 쌍(Pair)을 최소 한 번씩 테스트하도록 테스트 케이스를 최적화하는 기법이다. N개의 변수 각각에서 2개씩 짝을 지어 조합을 도출한다.
  2. 가치: 변수 수가 증가할 때 전체 조합은 기하급수적으로 증가하지만, 페어와이즈 테스팅을 적용하면 모든 쌍을 테스트하면서도 테스트 케이스 수를 획기적으로 줄일 수 있다. 일반적으로 60~90%의 결함이 단일 변수 또는 이변량 상호작용에서 발견된다.
  3. 융합: 페어와이즈 테스팅은 조합 폭발 문제를 해결하는 핵심 기법으로,-configuration 테스팅, 웹 애플리케이션 브라우저 호환성 테스트, 데이터 마이닝 테스트 등에 폭넓게 활용된다.

Ⅰ. 개요 및 필요성 (Context & Necessity)

  • 개념: 페어와이즈 테스팅은 모든 가능한 변수 값 조합 중에서, 각 변수의 값 쌍을 최소 한 번씩 포함하도록 테스트 케이스를 선택하는 기법이다. 예를 들어 3개의 변수 A, B, C가 있고, 각각 3개의 값을 갖는다면 전체 조합은 3×3×3=27개이지만, 페어와이즈 테스팅을 적용하면 훨씬 적은 테스트 케이스로 모든 이변량 쌍을 테스트할 수 있다.

  • 필요성: 소프트웨어 시스템은 대부분 여러 변수(파라미터)의 조합으로 동작한다. 모든 조합을 테스트하는 것은理想적이지만, 변수 수와 값이 증가함에 따라 조합 수가 폭발적으로 증가하여 실제적으로 불가능하다. 페어와이즈 테스팅은 조합 폭발 문제를 해결하면서도 대부분의 결함을 효과적으로 발견할 수 있는 실용적인 접근법이다.

  • 배경 이론: 소프트웨어 결함의 상당 부분이 단일 변수 결함이거나 두 변수 간의 상호작용(2-way interaction)에서 발생한다는 경험적 관찰에 기반한다. 세 변수 이상의 고차 상호작용(3-way, 4-way...)에서 발생하는 결함은 상대적으로 드물다.

  • 비유: 페어와이즈 테스팅은 **'춤 춰马达(マーダ)】 '와 같다. 스쿠버 다이버 Revels에서 만나는 모든 사람과 짝을 지어 추는 것은 시간과 에너지가 많이 든다. Revels에서 각 사람이 특정 의상(변수 1)과 신발(변수 2)을 신고 Revels에 참여하고,Revels는 두 사람 간의 호환성을 테스트한다. 페어와이즈 테스팅은 Revels에서 각 사람을 다른 모든 사람과 한 번씩 추게 하는 것처럼, 각 변수 값의 조합을漏らさずテストする。

  • 등장 배경 및 발전 과정:

    1. 1990년대초: Bell Labs에서 전화 교환 시스템 테스트를 위한 조합 테스트 기법으로 개발
    2. 2000년대:Orthogonal Array-based Testing (直交表)에 기반한 도구들 등장
    3. 현재: Allpairs, PICT 등 무료 도구와 상용 도구를 통해 폭넓게 활용
  • 섹션 요약 비유: 페어와이즈 테스팅은 **'배달 음식을 맛보는方法'**과 같다. 여러 식당(변수 1)의 여러 메뉴(변수 2)를 모두 맛보려면 엄청난 시간이 든다. 그러나 각 식당의 代表 메뉴와 각 메뉴의 代表 음식을 짝지어 맛보면, 전체 조합을テスト하지 않더라도 대부분의 맛 조합을 체험할 수 있다. 페어와이즈 테스팅도 마찬가지로 "대표 조합"을 통해 효과적으로 테스트하는 것이다.


Ⅱ. 아키텍처 및 핵심 원리 (Deep Dive)

페어와이즈 조합 원리

[페어와이즈 조합 원리]

  변수:
  - 브라우저: Chrome, Firefox, Safari (3개 값)
  - OS: Windows, macOS, Linux (3개 값)
  - 해상도: 1920x1080, 1366x768, 3840x2160 (3개 값)

  전체 조합: 3 × 3 × 3 = 27개
  페어와이즈 테스트 케이스: ?

  ┌─────────────────────────────────────────────────────────────────┐
  │                    3변수 페어와이즈 조합                                   │
  ├─────────────────────────────────────────────────────────────────┤
  │                                                                  │
  │   테스트 케이스 │  브라우저  │   OS    │   해상도   │  테스트 쌍 수    │
  │   ────────────────────────────────────────────────────────────  │
  │       TC-01    │  Chrome   │ Windows │ 1920x1080 │  3 쌍        │
  │       TC-02    │  Chrome   │ macOS   │ 1366x768  │  3 쌍        │
  │       TC-03    │  Chrome   │ Linux   │ 3840x2160 │  3 쌍        │
  │       TC-04    │  Firefox  │ Windows │ 1366x768  │  3 쌍        │
  │       TC-05    │  Firefox  │ macOS   │ 3840x2160 │  3 쌍        │
  │       TC-06    │  Firefox  │ Linux   │ 1920x1080 │  3 쌍        │
  │       TC-07    │  Safari   │ Windows │ 3840x2160 │  3 쌍        │
  │       TC-08    │  Safari   │ macOS   │ 1920x1080 │  3 쌍        │
  │       TC-09    │  Safari   │ Linux   │ 1366x768  │  3 쌍        │
  │                                                                  │
  │   ※ 9개 테스트 케이스로 27개 조합 중 모든 2-way 쌍Covered             │
  │   ※ 각 (브라우저, OS) 쌍: 3 × 3 = 9개 조합 Covered                  │
  │   ※ 각 (브라우저, 해상도) 쌍: 3 × 3 = 9개 조합 Covered               │
  │   ※ 각 (OS, 해상도) 쌍: 3 × 3 = 9개 조합 Covered                    │
  │                                                                  │
└─────────────────────────────────────────────────────────────────┘

[다이어그램 해설] 3개의 변수(브라우저, OS, 해상도)가 있고 각각 3개의 값을 갖는 경우, 전체 조합은 27개이지만 페어와이즈 테스팅을 적용하면 9개의 테스트 케이스로 모든 2-way 쌍을 Covered 할 수 있다. 각 테스트 케이스에서 3개의 변수가 각각 하나의 값을 갖고, 모든 가능한 쌍이 최소 한 번씩 테스트된다.

직교 배열 (Orthogonal Array)

[직교 배열 (Orthogonal Array)]

  직교 배열은 페어와이즈 테스팅의 수학적 기반

  L9(3^4): 4개 변수, 각각 3개 값, 9개 테스트 케이스

  ┌─────────────────────────────────────────────────────────────────┐
  │                    L9(3^4) 직교 배열                                    │
  ├─────────────────────────────────────────────────────────────────┤
  │                                                                  │
  │   Run │ Factor1 │ Factor2 │ Factor3 │ Factor4 │                  │
  │   ────────────────────────────────────────────────────────────  │
  │    1  │    0   │    0   │    0   │    0   │                      │
  │    2  │    0   │    1   │    1   │    2   │                      │
  │    3  │    0   │    2   │    2   │    1   │                      │
  │    4  │    1   │    0   │    1   │    1   │                      │
  │    5  │    1   │    1   │    2   │    0   │                      │
  │    6  │    1   │    2   │    0   │    2   │                      │
  │    7  │    2   │    0   │    2   │    2   │                      │
  │    8  │    2   │    1   │    0   │    1   │                      │
  │    9  │    2   │    2   │    1   │    0   │                      │
  │                                                                  │
  │   ※ 모든 열(변수)에서 모든 값이 동일한 빈도로出現                      │
  │   ※ 모든 열 쌍에서 가능한 값 쌍이 균형 있게 분포                        │
  │                                                                  │
└─────────────────────────────────────────────────────────────────┘

[다이어그램 해설] 직교 배열(Orthogonal Array)은 페어와이즈 테스트 케이스를 생성하는 수학적 도구이다. L9(3^4)는 4개 변수가 각각 3개의 값을 갖고, 9개의 테스트 케이스로 모든 2-way 쌍을Covered함을 의미한다. 각 열(변수)에서 0, 1, 2가 각 3번씩出現하고, 모든 열 쌍에서 가능한 9개의 조합이 균형 있게 분포한다.


Ⅲ. 구현 및 실무 응용 (Implementation & Practice)

페어와이즈 테스트 케이스 생성 도구

[페어와이즈 테스트 도구]

  1. PICT (Microsoft)
     -命令行 도구, Windows 환경
     - 입력: 변수의 이름과 값을 텍스트로 정의
     - 출력: 최적화된 테스트 케이스 조합

  2. Allpairs (James Bach)
     - 무료 도구, 다양한 플랫폼 지원
     - 직관적인 사용법

  3. Hexawise
     - 웹 기반, 무료/유료 플랜
     - 직관적인 UI 제공

  4. IPO (In-Parameter-Order)
     - 알고리즘 기반 도구
     - 단계별로 변수를 추가하며 조합 생성

PICT 사용 예시

[PICT 입력 파일 (pict.txt)]

  브라우저: Chrome, Firefox, Safari
  OS: Windows, macOS, Linux
  해상도: 1920x1080, 1366x768, 3840x2160

[PICT 명령행]

  > pict pict.txt

[PICT 출력 (테스트 케이스)]

  브라우저      OS         해상도
  --------    --------    ----------
  Chrome     Windows     1920x1080
  Chrome     macOS      1366x768
  Chrome     Linux      3840x2160
  Firefox    Windows     1366x768
  Firefox    macOS      3840x2160
  Firefox    Linux      1920x1080
  Safari     Windows     3840x2160
  Safari     macOS      1920x1080
  Safari     Linux      1366x768

웹 애플리케이션 호환성 테스트 적용

[웹 애플리케이션 호환성 테스트]

  변수:
  - 브라우저: Chrome, Firefox, Safari, Edge (4개)
  - OS: Windows 10, Windows 11, macOS, Linux (4개)
  - JavaScript: 활성화, 비활성화 (2개)
  - 쿠키: 활성화, 비활성화 (2개)

  전체 조합: 4 × 4 × 2 × 2 = 64개
  페어와이즈: 약 10~12개 (변수 간 상호작용 고려)

  ┌─────────────────────────────────────────────────────────────────┐
  │                    웹 호환성 테스트 케이스                                 │
  ├─────────────────────────────────────────────────────────────────┤
  │                                                                  │
  │   TC │ 브라우저  │   OS    │ JavaScript │    쿠키    │           │
  │   ────────────────────────────────────────────────────────────  │
  │   01 │ Chrome   │ Win 10  │   활성화    │   활성화    │           │
  │   02 │ Chrome   │ macOS   │   비활성화  │   비활성화  │           │
  │   03 │ Firefox  │ Win 11  │   활성화    │   비활성화  │           │
  │   04 │ Firefox  │ Linux   │   비활성화  │   활성화    │           │
  │   05 │ Safari   │ macOS   │   활성화    │   활성화    │           │
  │   06 │ Safari   │ Win 10  │   비활성화  │   활성화    │           │
  │   07 │ Edge     │ Win 11  │   활성화    │   비활성화  │           │
  │   08 │ Edge     │ Linux   │   비활성화  │   비활성화  │           │
  │   09 │ Chrome   │ Win 11  │   활성화    │   비활성화  │           │
  │   10 │ Firefox  │ Win 10  │   활성화    │   활성화    │           │
  │                                                                  │
└─────────────────────────────────────────────────────────────────┘

Ⅳ. 품질 관리 및 테스트 (Quality & Testing)

페어와이즈 테스팅 장단점

[페어와이즈 테스팅 장단점]

  장점:
  ├─ 테스트 케이스 수大幅 감소 (2-way 조합 보장)
  ├─ 변수 간 이변량 상호작용 결함 효과적으로 발견
  ├─ 고차 상호작용(3-way 이상)보다 이변량이 대부분 결함 유발
  ├─ 다양한 변수를 가진 시스템에 적용 가능
  └─ 자동화된 도구로 테스트 케이스 생성 용이

  단점:
  ├─ 모든 3-way 이상 조합을Cover하지 않음
  ├─ 변수의 중요도나優先度を考慮하지 않음
  ├─ 특정 조합의 중요성이 높은 경우適さない可能
  └─ 변수 간 상호의존성이 강한 경우 효과 제한적

페어와이즈 수준 (Strength) 선택

[페어와이즈 수준의 선택]

  2-way (Pairwise): 모든 쌍 조합Cover (기본)
  3-way: 모든 3개 변수 조합Cover
  4-way: 모든 4개 변수 조합Cover

  ┌─────────────────────────────────────────────────────────────────┐
  │                    수준별 테스트 케이스 수 비교                            │
  ├─────────────────────────────────────────────────────────────────┤
  │                                                                  │
  │   변수 수 │ 값/변수 │  전체 조합  │  2-way  │  3-way  │  4-way   │
  │   ────────────────────────────────────────────────────────────  │
  │     5     │    3    │    243    │  ~15   │  ~45   │  ~90    │
  │     6     │    3    │    729    │  ~18   │  ~60   │  ~120   │
  │     7     │    3    │   2,187   │  ~20   │  ~75   │  ~150   │
  │    10     │    3    │  59,049   │  ~27   │  ~100  │  ~270   │
  │                                                                  │
  │   ※ 2-way (페어와이즈)가 대부분의 프로젝트에서 최적의 균형점                │
  │                                                                  │
└─────────────────────────────────────────────────────────────────┘
  • 섹션 요약 비유: 페어와이즈 테스팅은 **'速配相亲(さがめ)'**와 같다. 10명의 남성과 10명의 여성이 있으면 전체 조합은 100가지이다. 그러나 각 남성이 각 여성과 한 번씩 만나게 하면(페어와이즈) 10번의 만남으로 모든 가능한 짝을テスト할 수 있다. "결혼 상대의適否判断"는 2명의 相性だけではなく、性格、価値観、趣味等多方面の相互作用まで考慮する必要があるが实际は大部分の相性の良さは2人之间的关系性에서 결정된다.

최신 동향

  1. AI 기반 조합 최적화:머신러닝 알고리즘이過去のテスト結果를 분석하여 결함 발생 확률이 높은 특정 조합을優先的にテスト하는 "스마트 페어와이즈" 도구 등장
  2. 모니터링 시스템 통합: CI/CD 파이프라인에서 페어와이즈 테스트 케이스를 자동으로 생성하고, 각 조합의 코드 커버리지와 결함 히스토리를 연계하여 분석
  3. 도메인 특화 페어와이즈: 금융, 의료 등 특정 도메인의 규제 요건에 맞춰 페어와이즈 수준(2-way, 3-way 등)을 선택하는 가이드라인 제공

한계점 및 보완

  • 고차 상호작용 결함: 3-way 이상의 변수 상호작용에서 발생하는 결함은 페어와이즈 테스팅으로 발견하기 어렵다. 안전 중요(Safety-Critical) 시스템에서는 더 높은 수준의 조합 테스트가 필요할 수 있다.
  • 변수 중요도 무시: 모든 변수를 동등하게 취급하므로, 중요도가 높은 변수나 위험도가 높은 조합을重点的に 테스트하기 어렵다.
  • 상호의존성 표현 한계: 변수 간에 존재하는 복잡한 상호의존성을 페어와이즈 모델로充分 표현하기 어렵다.

페어와이즈 테스팅은 조합 폭발 문제를 해결하면서도 대부분의 소프트웨어 결함을 효과적으로 발견할 수 있는 실용적인 테스트 기법이다. 테스트 자원(time, budget)이 제한된 현실에서, 페어와이즈는 효율성과 효과성 사이의 균형을 제공하는最佳選択이다. 기술자는 프로젝트의特性과 시스템의 위험도을 고려하여 적절한 페어와이즈 수준과 도구를選択해야 한다.

  • 섹션 요약 비유: 페어와이즈 테스팅은 **'랜드마크를 확인하는方法'**과 같다. 도시에 many한 landmark(변수)가 있고, 각 landmark에는 여러 appearance(값)가 가능하다. 전체 조합을 테스트하려면 모든 landmark를 모든 appearance로 방문해야 하는데, 이는 실생활에서不可能하다. 그러나 주요 landmark 쌍을 한 번씩 방문하면(페어와이즈), 도시의 主要한风貌大部分을把握할 수 있다. 모든 세세한 부분까지 완벽히テスト하는 것은理想하지만, 현실적으로는 주요 쌍을 Cover하는 것이 실용적인 접근법이다.

참고

  • 모든 약어는 반드시 전체 명칭과 함께 표기: API (Application Programming Interface)
  • 일어/중국어 절대 사용 금지 (한국어만 사용)
  • 각 섹션 끝에 📢 요약 비유 반드시 추가
  • ASCII 다이어그램의 세로선 │와 가로선 ─ 정렬 완벽하게
  • 한 파일당 최소 800자 이상의实质 내용