원인-결과 그래프 검사(Cause-Effect Graph Testing)
원인-결과 그래프 검사(Cause-Effect Graph Testing)는 블랙박스 테스트 기법 중 하나로, 입력 조건(원인)과 출력 결과(결과) 사이의 관계를 체계적으로 분석하고 모델링하여 효과적인 테스트 케이스를 도출하는 방법.
원인-결과 그래프 검사는 입력 데이터 간의 관계와 출력에 미치는 영향을 그래프로 표현하여 분석하는 기법.
이 방법은 여러 입력 조건을 결합해서 하나 이상의 결과를 얻는 것으로, 복잡한 입력 환경을 고려할 수 있는 장점이 있다.
원인-결과 그래프 검사의 목적
- 복잡한 입력 값들 간의 관계를 체계적으로 분석
- 입력 조건에 따른 출력의 적절성 확인
- 효율성이 높은 테스트 케이스 선정
원인-결과 그래프 검사의 절차
- 원인과 결과 식별: 요구사항 명세서, 설계서, 프로그램에서 원인(입력 조건)과 결과(출력 조건)를 찾아 식별한다.
- 그래프 작성: 원인과 결과를 연결하는 boolean 그래프를 작성한다. 이 그래프는 AND, OR, NOT 같은 boolean 연산자를 사용하여 원인과 결과 간의 논리적 관계를 표현한다.
- 제약 조건 표시: 불가능한 원인 조합 또는 결과 조합을 나타내는 제약(constraints)을 그래프에 표시한다.
- 의사결정 테이블 작성: 원인-결과 그래프를 의사결정 테이블(decision table)로 변환한다.
- 테스트 케이스 도출: 의사결정 테이블의 각 열을 테스트 케이스로 변환한다.
그래프의 구성 요소
원인-결과 그래프는 다음과 같은 기본 요소들로 구성된다:
원인(Causes): 시스템에 대한 입력 조건을 나타낸다. 예를 들어, 로그인 시스템에서 ‘사용자 ID 입력’, ‘비밀번호 입력’ 등이 원인이 될 수 있다.
결과(Effects): 시스템의 출력이나 반응을 나타낸다. ‘로그인 성공’, ‘에러 메시지 표시’ 등이 결과의 예시이다.
논리 연산자: 원인과 결과를 연결하는 논리적 관계를 표현한다:
- AND: 모든 조건이 만족되어야 함
- OR: 하나 이상의 조건이 만족되면 됨
- NOT: 조건의 부정
- XOR: 상호 배타적 조건
제약 조건: 원인들 사이의 관계를 제한하는 조건:
- 배타(E): 동시에 발생할 수 없는 조건
- 포함(I): 한 조건이 다른 조건을 필요로 함
- 단일(O): 여러 조건 중 하나만 발생 가능
- 필수(R): 반드시 발생해야 하는 조건
원인-결과 그래프의 표기법
노드: 원인(입력 조건)은 그래프의 좌측에, 결과(출력 조건)는 우측에 위치시킨다. 각 노드는 1(참 또는 있음)과 0(거짓 또는 없음)의 두 가지 상태를 가진다.
연산자:
- IDENTITY: 원인과 결과가 동일한 상태를 가짐을 나타낸다.
- AND: 여러 원인이 모두 참일 때 결과가 참임을 나타내다.
- OR: 하나 이상의 원인이 참일 때 결과가 참임을 나타낸다.
제약 심볼:
- R 제약: 한 원인이 참이면 다른 원인도 반드시 참이어야 함을 나타낸다.
- E 제약: 많아야 1개의 원인이 참일 수 있음을 나타낸다.
- O 제약: 정확히 1개의 원인만 참이어야 함을 나타낸다.
- M(Mask): 한 결과가 참이면 다른 결과는 강제로 거짓이 됨을 나타낸다.
원인-결과 그래프 검사의 장점
- 입력 조건과 출력 결과 간의 관계를 시각적으로 표현하여 이해하기 쉽다.
- 복잡한 입력 환경을 체계적으로 분석할 수 있다.
- 효율적인 테스트 케이스를 도출할 수 있어 테스트의 품질을 향상시킬 수 있다.
원인-결과 그래프 검사의 한계
- 대규모 시스템에서는 그래프가 복잡해질 수 있어 적용이 어려울 수 있다.
- 테스트 설계자의 경험과 지식에 따라 그래프의 품질이 달라질 수 있다.
예시
로그인 시스템에 대한 원인-결과 그래프 검사를 예로 들어보자.
원인(입력 조건):
- 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: 로그인 성공
- 입력: 올바른 아이디와 비밀번호 입력
- 예상 결과: 로그인 성공