다중 조건 테스팅 (Branch Condition Combination Testing)

다중 조건 테스팅은 각 결정문에서 가능한 모든 조건 조합을 테스트하는 기법이다.
이는 조건 커버리지의 확장된 형태로, 가능한 모든 부울 조건 조합을 테스트하는 것을 목표로 한다.

주요 특징

  1. 완전한 조건 조합: 결정문 내의 모든 개별 조건식에 대해 가능한 모든 true/false 조합을 테스트한다.
  2. 높은 커버리지: 100% 다중 조건 커버리지를 달성하면 결정 커버리지와 조건 커버리지도 100% 달성된다.
  3. 복잡한 로직 테스트: 여러 조건이 복합적으로 사용되는 복잡한 의사결정 구조를 철저히 테스트할 수 있다.

장점

  1. 철저한 테스트: 모든 가능한 조건 조합을 테스트하므로 누락된 경우의 수 없이 철저한 테스트가 가능하다.
  2. 숨겨진 버그 발견: 특정 조건 조합에서만 발생하는 오류를 찾아낼 수 있다.
  3. 로직 오류 검출: 복잡한 조건문의 로직 오류를 효과적으로 발견할 수 있다.

단점

  1. 테스트 케이스 증가: 조건의 수가 증가할수록 테스트 케이스의 수가 기하급수적으로 늘어난다.
  2. 시간과 비용: 많은 테스트 케이스로 인해 테스트 수행 시간과 비용이 증가한다.
  3. 복잡성: 조건이 많은 경우 모든 조합을 고려하는 것이 매우 복잡해질 수 있다.

사용 사례

다중 조건 테스팅은 다음과 같은 상황에서 특히 유용하다:

  1. 안전 중요 시스템: 모든 가능한 시나리오를 철저히 테스트해야 하는 경우
  2. 금융 시스템: 복잡한 조건에 따라 중요한 결정이 이루어지는 경우
  3. 복잡한 비즈니스 로직: 여러 조건이 복합적으로 작용하는 경우

예시

다음과 같은 코드가 있다고 가정해 보자:

1
2
3
4
5
6
7
def calculate_discount(age, is_student, purchase_amount):
    if age < 18 and is_student and purchase_amount > 100:
        return 0.2  # 20% discount
    elif (age >= 18 and age < 60) and purchase_amount > 200:
        return 0.1  # 10% discount
    else:
        return 0  # No discount

이 함수에 대한 다중 조건 테스트 케이스는 다음과 같이 구성될 수 있다:

  1. age < 18, is_student = True, purchase_amount > 100
  2. age < 18, is_student = True, purchase_amount <= 100
  3. age < 18, is_student = False, purchase_amount > 100
  4. age >= 18, age < 60, purchase_amount > 200
  5. age >= 18, age < 60, purchase_amount <= 200
  6. age >= 60, purchase_amount > 200
  7. age >= 60, purchase_amount <= 200

이렇게 모든 가능한 조건 조합을 테스트함으로써, 함수의 모든 경로와 로직을 철저히 검증할 수 있다.


참고 및 출처