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

페어와이즈 테스팅은 모든 가능한 입력 값 조합을 테스트하는 대신, 입력 매개변수의 모든 쌍(pair)을 최소한 한 번씩 테스트하는 기법이다.
이는 대부분의 결함이 두 입력 값의 상호작용에 기인한다는 관찰에 기반한다.

실제 예시를 통해 더 자세히 살펴보자.
웹 브라우저 애플리케이션을 테스트한다고 가정하면:

운영체제: Windows, Mac, Linux
브라우저: Chrome, Firefox, Safari
화면 해상도: HD, FHD, 4K
언어 설정: 한국어, 영어, 일본어

만약 모든 가능한 조합을 테스트하려면 몇 개의 테스트 케이스가 필요할까?
3(운영체제) × 3(브라우저) × 3(해상도) × 3(언어) = 81개의 테스트 케이스가 필요하다.

하지만 연구에 따르면, 소프트웨어 결함의 대부분은 두 개 매개변수 간의 상호작용에서 발생한다고 한다.
이러한 통계적 사실을 바탕으로, 페어와이즈 테스팅은 테스트 케이스의 수를 크게 줄이면서도 효과적으로 결함을 발견할 수 있다.

페어와이즈 테스팅의 실제 적용 과정을 단계별로 살펴보자:

  1. 매개변수와 값 식별
    먼저 테스트할 매개변수들과 각각이 가질 수 있는 값들을 정의한다.
    위의 예시에서는 4개의 매개변수(운영체제, 브라우저, 해상도, 언어)와 각각의 값들을 식별하였다.
  2. 페어와이즈 조합 생성
    각 매개변수 쌍에 대해 가능한 모든 조합을 생성한다.
    예를 들어:
    운영체제와 브라우저의 조합: Windows-Chrome, Windows-Firefox, Windows-Safari, Mac-Chrome, Mac-Firefox, Mac-Safari, Linux-Chrome, Linux-Firefox, Linux-Safari
    이런 식으로 모든 매개변수 쌍에 대해 조합을 만든다.
  3. 최적화된 테스트 케이스 생성
    이렇게 만든 조합들을 최소한의 테스트 케이스로 커버할 수 있도록 최적화한다.
    이 과정은 복잡하므로 보통 자동화 도구를 사용한다.
    결과적으로 81개가 아닌 약 9-12개 정도의 테스트 케이스로 모든 페어와이즈 조합을 테스트할 수 있게 된다.
  4. 테스트 실행 및 결과 분석
    생성된 테스트 케이스들을 실행하고 결과를 분석한다.
    특히 특정 매개변수 쌍의 조합에서 자주 발생하는 문제가 있는지 주목한다.

주요 특징

  1. 효율성: 모든 조합을 테스트하는 것보다 훨씬 적은 수의 테스트 케이스로 높은 커버리지를 달성한다.
  2. 체계적 접근: 입력 매개변수의 모든 쌍을 고려하여 테스트 케이스를 설계한다.
  3. 자동화 가능: PICT, ACTS 등의 도구를 사용하여 테스트 케이스를 자동으로 생성할 수 있다.

적용 방법

  1. 테스트할 매개변수와 각 매개변수의 가능한 값을 식별한다.
  2. 모든 가능한 매개변수 쌍의 조합을 생성한다.
  3. 각 쌍이 최소한 한 번씩 테스트되도록 테스트 케이스를 설계한다.

장점

  1. 테스트 케이스 수 감소: 모든 조합을 테스트하는 것보다 훨씬 적은 수의 테스트로 높은 커버리지를 달성한다.
  2. 효율적인 결함 검출: 대부분의 결함을 효과적으로 찾아낼 수 있다.
  3. 시간과 비용 절감: 적은 수의 테스트로 넓은 범위를 커버하여 테스트 시간과 비용을 줄인다.

한계점

  1. 모든 결함 검출 불가능: 세 개 이상의 매개변수 상호작용으로 인한 결함은 놓칠 수 있다.
  2. 복잡한 시스템에서의 적용 어려움: 매개변수가 많은 복잡한 시스템에서는 구현이 어려울 수 있다.

도구

페어와이즈 테스팅을 지원하는 다양한 도구가 있다:

  1. PICT (Pairwise Independent Combinatorial Testing): Microsoft에서 제공하는 무료 커맨드라인 도구.
  2. ACTS (Automated Combinatorial Testing for Software): NIST에서 제공하는 Java 기반 도구.
  3. AllPairs: Python으로 작성된 오픈 소스 도구.

페어와이즈 테스팅은 효율적인 테스트 케이스 생성과 높은 결함 검출률을 제공하지만, 다른 테스트 기법들과 함께 사용하여 더 완전한 테스트 전략을 수립하는 것이 중요하다.


참고 및 출처