417. 원인-결과 그래프 (Cause-Effect Graphing)

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

  1. 본질: 원인-결과 그래프(Cause-Effect Graphing)는 복잡한 시스템의 입력 조건들 사이의 논리적 관계를 그래프로 표현하여 테스트 케이스를 체계적으로 도출하는 블랙박스 테스트 기법이다.
  2. 가치: 다수의 입력 변수와 조건 조합으로 인해 발생하는 조합 폭발 문제를 해결하고, 모든 조건 조합을漏れ없이 테스트할 수 있는 최소 테스트 세트를 생성할 수 있다.
  3. 융합: 소프트웨어 테스팅 분야에서 요구사항 분석 시 유스케이스 흐름과 함께 활용되며, 특히 복잡한 비즈니스 로직의 테스트 케이스 설계에 필수적인 기법이다.

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

  • 개념: 원인-결과 그래프는 입력 조건(원인, Cause)과 그에 대응하는 출력 결과(결과, Effect) 사이의 관계를Directed Graph(방향 그래프)로 모델링하는 기법이다. 그래프의 노드는 원인과 결과를 나타내고, 간선은 그들 사이의 논리적 관계를 나타낸다.

  • 필요성: 복잡한 시스템에서는 입력 변수가 여러 개이고, 각 변수가取的할 수 있는 값이 여럿인 경우가 많다. 예를 들어 보험금 청구 시스템에서 "계약 상태", "청구 사유", "청구 금액" 등의 변수가 있을 때, 모든 가능한 조합을 테스트하는 것은 비효율적이다. 원인-결과 그래프를利用하면 효과적인 테스트 조건을 선별할 수 있다.

  • 유형: 원인(Cause)은 시스템에 영향을 미치는 입력 조건이고, 결과(Effect)는 시스템의 출력이나 상태 변화를 나타낸다.

  • 비유: 원인-결과 그래프는 **'교차로 신호등 제어 로직'**과 같다. 교차로에는 여러 차선에서 오는 차량(원인)이 있고, 신호등의 색상(결과)이 결정된다. 모든 차선의 차량이 동시에 오는 상황을 테스트할 필요 없이, 핵심적인 조합만을 테스트하면 신호 제어 시스템의 동작을 검증할 수 있다.

  • 등장 배경 및 발전 과정:

    1. 1970년대: 이계원(Y.G. Kim)과其他人이 원인-결과 그래프를 소프트웨어 테스팅에 적용
    2. 1980년대: NASA's 소프트웨어 엔지니어링에서 체계화
    3. 현재: ISTQB(International Software Testing Qualifications Board) 시험 과정에서 표준 주제로 포함
  • 섹션 요약 비유: 원인-결과 그래프는 **'요리 레시피'**와 같다. 요리에는 여러 재료(원인)가 있고, 조리 방법에 따라 최종 요리(결과)가 결정된다. 모든 재료 조합을 테스트할 필요 없이, 핵심 재료와 조리 방법의 조합만으로 다양한 요리를 테스트할 수 있다.


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

원인-결과 그래프 기본 구조

[원인-결과 그래프 기본 구조]

     원인 노드 (Cause)              결과 노드 (Effect)
         │                             ▲
         ▼                             │
    ┌─────────┐                   ┌─────────┐
    │  입력    │                   │  출력    │
    │ 조건 A   │                   │ 결과 X   │
    └────┬────┘                   └────▲────┘
         │                              │
         ├──────────┐                   │
         ▼          ▼                   │
    ┌─────────┐┌─────────┐             │
    │ 논리NOT ││ 논리AND │──────────────┘
    └────┬────┘└────┬────┘
         │          │
         ▼          ▼
    [중간 노드]  [중간 노드]
         │          │
         └──────┬───┘
                ▼
           ┌─────────┐
           │  결과 Y  │
           └─────────┘

  기호 설명:
  - AND: 모든 입력이 참일 때 결과 발생
  - OR: 하나 이상의 입력이 참일 때 결과 발생
  - NOT: 입력이 거짓일 때 결과 발생
  - E: Exclusive OR (배타적 OR)

[다이어그램 해설] 원인-결과 그래프는 좌측에 원인 노드(입력 조건), 우측에 결과 노드(출력 조건), 중앙에 논리 게이트(AND, OR, NOT 등)을配置한다. 원인 노드에서 결과 노드로의 간선을 따라가며 논리적 관계를追跡한다.

원인-결과 그래프 표기법

[원인-결과 그래프 표기법]

  1. 원인(Cause) 표현
     ┌─────────────┐
     │ ID: C1      │  ← 원인 노드 (동그란 좌측)
     │ "계약상태=정상"│
     └─────────────┘

  2. 결과(Effect) 표현
     ┌─────────────┐
     │ ID: E1      │  ← 결과 노드 (모서리가 둥근 사각형)
     │ "보험금 지급"│
     └─────────────┘

  3. 논리 게이트
     ┌─────────────┐
     │    AND      │  ← AND 게이트
     └─────────────┘

     ┌─────────────┐
     │     OR      │  ← OR 게이트
     └─────────────┘

     ┌─────────────┐
     │    NOT      │  ← NOT 게이트
     └─────────────┘

  4. 간선(Edge)
     원인 ───▶ 결과  ← 방향성 간선
     게이트 ──▶ 게이트

보험금 청구 시스템 적용 예시

[보험금 청구 시스템 원인-결과 그래프]

  원인(Causes):
  C1: 계약 상태 = 정상
  C2: 계약 상태 = 해지
  C3: 청구 사유 = 사고
  C4: 청구 사유 = 질병
  C5: 청구 금액 ≤ 한도
  C6: 청구 금액 > 한도

  결과(Effects):
  E1: 보험금 지급 처리
  E2: 보험금 지급 거부
  E3: 한도 초과 경고

  ┌─────────────────────────────────────────────────────────────────┐
  │                    보험금 청구 원인-결과 그래프                       │
  ├─────────────────────────────────────────────────────────────────┤
  │                                                                  │
  │  C1 ◀────│                                                    │
  │    ◀──│   │                                                    │
  │  C2 ─┘   │                                                    │
  │          ▼                                                    │
  │    ┌─────────┐                                                │
  │    │  NOT    │  ← C2(해지)일 때 결과 없음                        │
  │    └────┬────┘                                                │
  │         │                                                      │
  │         ├──────────────┐                                      │
  │         ▼              ▼                                      │
  │    ┌─────────┐    ┌─────────┐                                 │
  │    │   OR    │    │   OR    │                                 │
  │    └────┬────┘    └────┬────┘                                 │
  │         │              │                                      │
  │         ▼              ▼                                      │
  │    C3 ◀─┴── C4    C5 ◀─┴── C6                                 │
  │    │              │                                            │
  │    └────────┬────┘                                            │
  │             ▼                                                   │
  │        ┌─────────┐                                            │
  │        │  AND    │                                            │
  │        └────┬────┘                                            │
  │             │                                                  │
  │    ┌────────┴────────┐                                       │
  │    ▼                  ▼                                       │
  │  E1                E2 + E3                                     │
  │  (지급)             (거부/경고)                                  │
  │                                                                  │
  └─────────────────────────────────────────────────────────────────┘

[다이어그램 해설] 보험금 청구 시스템에서 계약 상태, 청구 사유, 청구 금액이라는 세 가지 원인 변수에 대해 그래프를 구성한다. 계약이 정상 상태이고(C1) 청구 사유가 사고 또는 질병(C3 또는 C4)이며 청구 금액이 한도 이내(C5)일 때만 보험금 지급(E1)으로 연결된다. 그 외의 조합은 거부(E2)나 경고(E3)를 발생시킨다.


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

테스트 케이스 도출 절차

[원인-결과 그래프를利用한 테스트 케이스 도출 절차]

  1단계: 요구사항 분석 및 원인/결과 식별
     │
     └─→ 시스템의 입력 조건(원인)과 출력 결과(결과) 명시

  2단계: 원인-결과 그래프 작성
     │
     ├─→ 각 원인에 대한 노드 생성
     ├─→ 각 결과에 대한 노드 생성
     ├─→ 원인들 사이의 논리 관계 표현 (AND, OR, NOT)
     └─→ 원인과 결과 사이의 관계 연결

  3단계: 제약 조건 식별
     │
     ├─→ 포함 제약 (Inclusive Constraint): A와 B는 함께 포함
     ├─→ 배타적 제약 (Exclusive Constraint): A와 B는 함께 발생할 수 없음
     └─→_once 제약: 최소 한 번은 발생해야 함

  4단계: 결정표(Decision Table) 변환
     │
     └─→ 그래프를 결정표로 변환하여 테스트 조합 도출

  5단계: 테스트 케이스 생성
     │
     └─→ 각 열(Column)을 테스트 케이스로 변환

결정표 변환 예시

[보험금 청구 결정표]

  조건(Conditions):
  ┌─────────────────────────────────────────────────────────────┐
  │ 계약 상태 = 정상          │ Y  │ Y  │ N  │ Y  │ Y  │ N  │
  │ 청구 사유 = 사고          │ Y  │ N  │ -  │ Y  │ N  │ -  │
  │ 청구 사유 = 질병          │ N  │ Y  │ -  │ N  │ Y  │ -  │
  │ 청구 금액 ≤ 한도          │ Y  │ Y  │ -  │ N  │ N  │ -  │
  ├─────────────────────────────────────────────────────────────┤
  │ 보험금 지급(E1)           │ X  │ X  │    │    │    │    │
  │ 보험금 지급 거부(E2)      │    │    │ X  │    │ X  │ X  │
  │ 한도 초과 경고(E3)        │    │    │    │ X  │ X  │    │
  └─────────────────────────────────────────────────────────────┘

  Y = True, N = False, - = Don't Care, X = 해당 결과 발생

온라인 쇼핑몰 할인 쿠폰 시스템 적용 예시

[할인 쿠폰 시스템 원인-결과 그래프]

  원인(Causes):
  C1: 회원 등급 = VIP
  C2: 회원 등급 = 일반
  C3: 주문 금액 ≥ 50,000원
  C4: 쿠폰 있음
  C5: 쿠폰 사용 가능 기간内

  결과(Effects):
  E1: 20% 할인 적용
  E2: 10% 할인 적용
  E3: 할인 적용 안됨
  E4: 오류 메시지 출력

  그래프 논리:
  - VIP 회원 + 주문 5만원 이상 + 쿠폰 있음 → E1 (20% 할인)
  - 일반 회원 + 쿠폰 있음 + 기간内 → E2 (10% 할인)
  - 쿠폰 있음 + 기간 경과 → E4 (오류)
  - 그 외 → E3 (적용 안됨)

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

원인-결과 그래프의 장단점

[원인-결과 그래프 장단점]

  장점:
  ├─ 복잡한 비즈니스 로직을 시각적으로 표현
  ├─ 테스트 조건 조합의漏와 중복を排除
  ├─ 요구사항의 불명확한 부분 식별에 도움
  ├─ 결정표를 통해 테스트 케이스를 체계적으로 도출
  └─ 테스트覆盖率 향상

  단점:
  ├─ 그래프 작성이 복잡하고 시간 소요
  ├─ 입력 변수가 많으면 그래프가 매우 커짐
  ├─ 논리 게이트의 중첩이 깊어지면 해석이 어려움
  └─ 상태 의존적 동작에는直接 적용困难

원인-결과 vs 기타 테스트 기법

[원인-결과 그래프 vs 기타 기법 비교]

  ┌────────────────────┬────────────────────┬────────────────────┐
  │      기법          │      장점          │      한계          │
  ├────────────────────┼────────────────────┼────────────────────┤
  │ 동등 분할          │ 단순하고 적용 쉬움  │ 논리 관계 표현困難 │
  │ 경계값 분석        │ 경계 결함 발견 용이 │ 조합 표현不能      │
  │ 결정 테이블        │ 명확한 목록 제공   │ 항목 많으면 복잡   │
  │ 원인-결과 그래프   │ 논리 관계 시각화   │ 그래프 복잡성      │
  │ 페어와이즈         │ 조합 폭발 방지     │ 쌍のみ 관계捕捉   │
  └────────────────────┴────────────────────┴────────────────────┘
  • 섹션 요약 비유: 원인-결과 그래프는 **'미로 찾기 게임 지도'**와 같다. 미로의 입구(원인)에서 출구(결과)까지 다양한 경로(논리 관계)가 있지만, 지도(그래프)를 보면 가장 짧고 안전한 경로(최적 테스트 조합)를 쉽게 찾을 수 있다.

최신 동향

  1. AI 기반 그래프 생성: 머신러닝 알고리즘이 요구사항 문서로부터 자동으로 원인-결과 그래프를 생성하는 연구가 진행 중이다.
  2. 도구 활용: Cause-Effect Graph Tool, CETool 등의專用 도구를利用한 그래프 작성 및 테스트 케이스 자동 생성
  3. 모델 기반 테스트 통합: 시스템 모델에서 직접 원인-결과 관계를 추출하여 테스트 케이스로 변환하는 MBT 도구에서의 활용

한계점 및 보완

  • 복잡한 시간적 의존성: 시스템의 현재 상태와 과거 입력 이력에 따라 출력이 결정되는 경우, 단순한 원인과 결과의 관계로 표현하기 어려울 수 있다.
  • 비선형적 관계: If-else의 深첩된 구조에서는 그래프가 급격히 복잡해진다.
  • 도메인 지식 필요: 정확한 그래프 작성을 위해 시스템의 도메인 지식과 비즈니스 로직에 대한 심층적인 이해가 필요하다.

원인-결과 그래프는 복잡한 소프트웨어 시스템의 테스트 조건을 체계적으로 도출하고, 테스트 효율성을 극대화하는 강력한 블랙박스 테스트 기법이다. 특히 비즈니스 로직이 복잡한 금융, 보험, ecommerce 등의 시스템에서 효과적이다. 기술자는 그래프 작성을 통해 요구사항의 불명확한 부분도 식별할 수 있으며, 체계적인 테스트 케이스 세트를 구축할 수 있다.

  • 섹션 요약 비유: 원인-결과 그래프는 **'악기 오케스트라 지휘도'**와 같다. 지휘도에는 다양한 악기(원인)와 음악적 결과(결과)들이 연결되어 있다. 오케스트라 전체를 테스트할 필요 없이, 지휘도가示す 핵심 악기와 음절의 조합만 테스트하면 전체 음악의正確性を検証할 수 있다.

참고

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