1. 문제

문 18. 다음 제어 흐름 그래프에 나타난 프로그램을 테스트할 때, 옳지 않은 것은?

① 분기 커버리지를 만족하는 최소의 테스트 케이스는 2개이다.

② 기본 경로의 개수는 3개이다.

③ 문장 커버리지를 만족하는 최소의 테스트 케이스는 1개이다.

④ {(x:1, y:2, z:0), (x:5, y:0, z:0)}은 분기 커버리지를 만족하지 못한다. 


2. 풀이

이 문제는 커버리지와 기본 경로에 대해 묻고 있다.

  • 문장 커버리지
- 모든 문장이 적어도 한 번씩은 수행되어야 한다.
  • 분기 커버리지 (DC)
- 각 분기에서 참과 거짓 조건을 모두 테스트할 수 있어야 하며 테스트 케이스는 두 개이다.
  • 경로 검증 기준(path coverage)
- 프로그램이 수행 가능한 모든 경로이다.
  • 기본 경로 테스트(basic path testing)
- 경로 검증 기준(path coverage)가 아니고 구조 시험, 복잡도 시험이다.
따라서, 순환적 복잡도(Cyclomatic Complexity)를 구하면 된다.

① 분기 커버리지 (DC)
분기 커버리지가 각 조건에서 참, 거짓을 모두 테스트할 수 있는 것이므로 테스트 케이스는 2개이다.
그러면 두 개의 조건문이므로 모든 테스트 케이스가 2 X 2로 4개가 될 것 같으나 이것은 함정이다.

두 조건문에 x 변수의 조건이 다르고 y와 z는 하나씩 있으므로 
x,y,z의 값을 잘 선택하면 2개의 테스트 케이스만 있으면 된다. 

예는 ④의 풀이를 참고하라.
그러면 각 조건 별로 T, F를 테스트 할 수 있다.

② 기본 경로 (PC)
순환 복잡도 = 분기 수 + 1 = 2 + 1 = 3.

③ 문장 커버리지 (SC)
플로차트와 프로그램간의 차이를 이해하면 쉬게 풀 수 있다.
위 플로차트에서 if문에서 false인 경우를 실행할 문장이 없으므로 
SC의 경우는 false 조건을 테스트할 필요는 없다.
따라서 두 조건이 true인 경우만 테스트할 수 있는 테스트 케이스 하나로 충분하다. 

④ 분기 커버리지 (DC)
함정이  숨어 있다.
아래 코드에서 if 조건이 참이면 z 값이 바뀐다.
if (x>0) && (y>0)
   z=x-y


(x:1, y:2, z:0)는 (x:1, y:2, z:-1) 이다.
따라서 테스트 케이스에서 주어진 z는 의미가 없다.
 
개별 조건
 전체 결과
 첫 if문 T && T T
 두번째 if문 F || F F

(x:5, y:0, z:0)는 if (x>0) && (y>0) 를 만족하지 않아 (x:5, y:0, z:0) 이다.
  개별 조건전체 결과 
  첫 if문 T && F
 두번째 if문 T || T

즉, 두 if문의 결과는 모두 T, F로 DC 만족함.

답은 4번이다.
공무원 시험도 함정이 곳곳에 숨어 있다.


+ Recent posts

티스토리 툴바