원인-결과 그래프 검사(Cause-Effect Graph Testing)

원인-결과 그래프 검사(Cause-Effect Graph Testing)는 블랙박스 테스트 기법 중 하나로, 입력 조건(원인)과 출력 결과(결과) 사이의 관계를 체계적으로 분석하고 모델링하여 효과적인 테스트 케이스를 도출하는 방법.

원인-결과 그래프 검사는 입력 데이터 간의 관계와 출력에 미치는 영향을 그래프로 표현하여 분석하는 기법.
이 방법은 여러 입력 조건을 결합해서 하나 이상의 결과를 얻는 것으로, 복잡한 입력 환경을 고려할 수 있는 장점이 있다.

원인-결과 그래프 검사의 목적

  1. 복잡한 입력 값들 간의 관계를 체계적으로 분석
  2. 입력 조건에 따른 출력의 적절성 확인
  3. 효율성이 높은 테스트 케이스 선정

원인-결과 그래프 검사의 절차

  1. 원인과 결과 식별: 요구사항 명세서, 설계서, 프로그램에서 원인(입력 조건)과 결과(출력 조건)를 찾아 식별한다.
  2. 그래프 작성: 원인과 결과를 연결하는 boolean 그래프를 작성한다. 이 그래프는 AND, OR, NOT 같은 boolean 연산자를 사용하여 원인과 결과 간의 논리적 관계를 표현한다.
  3. 제약 조건 표시: 불가능한 원인 조합 또는 결과 조합을 나타내는 제약(constraints)을 그래프에 표시한다.
  4. 의사결정 테이블 작성: 원인-결과 그래프를 의사결정 테이블(decision table)로 변환한다.
  5. 테스트 케이스 도출: 의사결정 테이블의 각 열을 테스트 케이스로 변환한다.

그래프의 구성 요소

원인-결과 그래프는 다음과 같은 기본 요소들로 구성된다:

  1. 원인(Causes): 시스템에 대한 입력 조건을 나타낸다. 예를 들어, 로그인 시스템에서 ‘사용자 ID 입력’, ‘비밀번호 입력’ 등이 원인이 될 수 있다.

  2. 결과(Effects): 시스템의 출력이나 반응을 나타낸다. ‘로그인 성공’, ‘에러 메시지 표시’ 등이 결과의 예시이다.

  3. 논리 연산자: 원인과 결과를 연결하는 논리적 관계를 표현한다:

    • AND: 모든 조건이 만족되어야 함
    • OR: 하나 이상의 조건이 만족되면 됨
    • NOT: 조건의 부정
    • XOR: 상호 배타적 조건
  4. 제약 조건: 원인들 사이의 관계를 제한하는 조건:

    • 배타(E): 동시에 발생할 수 없는 조건
    • 포함(I): 한 조건이 다른 조건을 필요로 함
    • 단일(O): 여러 조건 중 하나만 발생 가능
    • 필수(R): 반드시 발생해야 하는 조건

원인-결과 그래프의 표기법

  1. 노드: 원인(입력 조건)은 그래프의 좌측에, 결과(출력 조건)는 우측에 위치시킨다. 각 노드는 1(참 또는 있음)과 0(거짓 또는 없음)의 두 가지 상태를 가진다.

  2. 연산자:

    • IDENTITY: 원인과 결과가 동일한 상태를 가짐을 나타낸다.
    • AND: 여러 원인이 모두 참일 때 결과가 참임을 나타내다.
    • OR: 하나 이상의 원인이 참일 때 결과가 참임을 나타낸다.
  3. 제약 심볼:

    • R 제약: 한 원인이 참이면 다른 원인도 반드시 참이어야 함을 나타낸다.
    • E 제약: 많아야 1개의 원인이 참일 수 있음을 나타낸다.
    • O 제약: 정확히 1개의 원인만 참이어야 함을 나타낸다.
    • M(Mask): 한 결과가 참이면 다른 결과는 강제로 거짓이 됨을 나타낸다.

원인-결과 그래프 검사의 장점

  1. 입력 조건과 출력 결과 간의 관계를 시각적으로 표현하여 이해하기 쉽다.
  2. 복잡한 입력 환경을 체계적으로 분석할 수 있다.
  3. 효율적인 테스트 케이스를 도출할 수 있어 테스트의 품질을 향상시킬 수 있다.

원인-결과 그래프 검사의 한계

  1. 대규모 시스템에서는 그래프가 복잡해질 수 있어 적용이 어려울 수 있다.
  2. 테스트 설계자의 경험과 지식에 따라 그래프의 품질이 달라질 수 있다.

예시

로그인 시스템에 대한 원인-결과 그래프 검사를 예로 들어보자.

원인(입력 조건):

  • C1: 아이디 입력됨
  • C2: 아이디가 DB에 존재
  • C3: 비밀번호 입력됨
  • C4: 비밀번호가 일치

결과(출력 조건):

  • E1: 로그인 성공
  • E2: “아이디를 입력하세요” 메시지
  • E3: “존재하지 않는 아이디입니다” 메시지
  • E4: “비밀번호를 입력하세요” 메시지
  • E5: “비밀번호가 일치하지 않습니다” 메시지

논리적 관계의 예:

  • 로그인 성공(E1)이 되려면: 아이디 입력(C1) AND 아이디 존재(C2) AND 비밀번호 입력(C3) AND 비밀번호 일치(C4)
  • “아이디를 입력하세요”(E2) 메시지는: NOT 아이디 입력(C1)
  • “존재하지 않는 아이디입니다”(E3) 메시지는: 아이디 입력(C1) AND NOT 아이디 존재(C2)

제약조건의 예:

  • 비밀번호가 일치(C4)하려면 반드시 비밀번호가 입력(C3)되어야 함
  • 아이디가 존재(C2)하려면 반드시 아이디가 입력(C1)되어야 함

이러한 관계를 그래프로 표현하면 다음과 같은 테스트 케이스를 도출할 수 있다:

테스트 케이스 1: 아이디 미입력

  • 입력: 아이디 입력하지 않음
  • 예상 결과: “아이디를 입력하세요” 메시지 출력

테스트 케이스 2: 존재하지 않는 아이디

  • 입력: 존재하지 않는 아이디 입력
  • 예상 결과: “존재하지 않는 아이디입니다” 메시지 출력

테스트 케이스 3: 비밀번호 미입력

  • 입력: 올바른 아이디 입력, 비밀번호 미입력
  • 예상 결과: “비밀번호를 입력하세요” 메시지 출력

테스트 케이스 4: 비밀번호 불일치

  • 입력: 올바른 아이디, 잘못된 비밀번호 입력
  • 예상 결과: “비밀번호가 일치하지 않습니다” 메시지 출력

테스트 케이스 5: 로그인 성공

  • 입력: 올바른 아이디와 비밀번호 입력
  • 예상 결과: 로그인 성공

참고 및 출처