반응형

출처: A Practitioner's Guide to Software Test Design by Lee Copeland, 2004

 

프로그램 코드 모듈을 횡단하는 실행 경로(execution paths)를 식별한 다음 해당 경로를 커버하는 테스트케이스를 생성하고 실행하는 제어 흐름 테스팅 기법 중 하나인 McCabe기본 경로 테스팅’(또는 구조적 테스팅이라고도 부름)에 대해 설명

 


 

McCabe의 기본 경로 테스팅(Basis Path Testing)

1970년대 Tom McCabe가 제안한 기본 경로 테스팅(또는 Structured Testing이라고도 함)은 제어 흐름 그래프의 토폴로지 분석을 통해 테스트케이스를 식별한다. 이 테스팅 프로세스의 단계가 다음과 같다.

  1. 소프트웨어 모듈에서 제어 흐름 그래프를 도출한다.
  2. 그래프의 순환복잡도(Cyclomatic Complexity) C를 계산한다.
  3. C 기반의 기본 경로 세트를 선정한다.
  4. 선정된 기본 경로 각각에 대해 테스트케이스를 하나씩 생성한다.
  5. 생성된 테스트케이스들을 실행한다.

 

순환복잡도(Cyclomatic Complexity) 계산 예

McCabe는 제어 흐름 그래프의 순환복잡도 C를 아래와 같이 정의한다.

C = 에지(edges) – 노드(nodes) + 2

그림 10-7. 제어 흐름 그래프 예

 

위 그래프에서 화살표가 에지를 원이 노드를 나타내므로 24개 에지와 19개 노드가 있고, 따라서 순환복잡도 C24-19+2 = 7이다. 

그래프의 모든 디시젼이 바이너리(, True 또는 False의 정확히 두 개의 진출 에지를 가짐)라면, 바이너리 디시젼 수를 통해 순환복잡도를 계산할 수도 있다. p개의 바이너리 디시젼이 존재할 때 순환복잡도가 아래와 같다.

C = p + 1

순환복잡도는 독립적이고 루프를 가지지 않는 경로(이를 기본 경로라고 함)의 최소 수를 의미하며, 이들의 선형 조합으로 모듈을 횡단하는 모든 가능한 경로를 생성할 수 있다. 제어 흐름 그래프의 관점에서 보면, 각 기본 경로는 다른 경로가 지나가지 않는 적어도 하나의 에지를 통과하게 된다.

 

McCabe의 기본 경로 테스팅 예

McCabe의 기본 경로 테스팅 기법은 각 기본 경로(basis path)에 하나씩 상응하는 총 C개의 테스트케이스를 생성하고 실행할 것을 요구한다. 기본 경로 세트가 제어 흐름 그래프의 모든 에지와 노드를 커버하기 때문에 이 테스팅 기준을 충족하면 자동으로 브랜치 커버리지(branch coverage)와 문장 커버리지(statement coverage)를 충족하게 된다.

 

McCabe는 기본 경로 세트를 생성하는 프로세스를 아래와 같이 제안하였다. 

1. 먼저 "베이스라인" 기본 경로를 선택한다. 예외적인 프로세싱 경로 보다는 "전형적인" 정상 실행 경로를 베이스라인 경로로 선택한다. 최선의 선택은 테스터의 관점에서 가장 중요한 경로를 고르는 것이 될 것이다.

그림 10-8. 선정된 베이스라인 기본 경로 ABDEGKMQS

 

2. 다음은 베이스라인 경로 상에 있는 첫 번째 디시젼의 결과를 달라지게 하여 두 번째 기본 경로를 선정한다(이 때 다른 디시젼의 최대 수를 베이스라인 경로와 동일하게 유지함).

그림 10-9. 두 번째 기본 경로 ACDEGKMQS

 

3. 세 번째 경로를 생성하려면 베이스라인 경로에서 다시 시작하되 첫 번째가 아닌 두 번째 디시젼이 달라지도록 한다.

그림 10-10. 세 번째 기본 경로 ABDFILORS

 

4. 네 번째 경로를 생성하려면 베이스라인에서 다시 시작하되 두 번째가 아닌 세 번째 디시젼을 변경한다. 그래프의 맨 바닥에 도달할 때까지 각 디시젼을 하나씩 달라지게 하는 것을 계속한다.

그림 10-11. 네 번째 기본 경로 ABDEHKMQS

 

그림 10-12. 다섯 번째 기본 경로 ABDEGKNQS

 

5. 이제 베이스라인 경로 상의 모든 디시젼이 뒤집혔으므로 두 번째 경로를 대상으로 그 디시젼을 하나씩 뒤집는 패턴을 반복한다. 이 과정을 기본 경로 세트를 완성할 때까지 계속한다.

그림 10-13. 여섯 번째 기본 경로 ACDFJLORS

 

그림 10-14. 일곱 번째 기본 경로 ACDFILPRS

 

이 그래프에서 선택한 기본 경로 세트(a set of basis paths)가 아래와 같다. 순환복잡도 C=7이므로 7개의 기본 경로가 선택되며, 이 기본 경로 각각에 상응하는 테스트케이스를 생성하게 된다. 

  • ABDEGKMQS
  • ACDEGKMQS
  • ABDFILORS
  • ABDEHKMQS
  • ABDEGKNQS
  • ACDFJLORS
  • ACDFILPRS

 

NOTE.
위 기본 경로 세트는 생성 가능한 다수의 기본 경로 세트 중 한 예일뿐이며 고유한 것이 아니다(즉, 위에 제시한 것과 다른 옵션도 가능하다). 다만 기본 경로 세트에 기반하여 구현된 테스트케이스 세트라면 어떤 경우라도 모든 문장과 모든 브랜치 실행을 보장한다는 속성을 갖게 된다.

 

 

요약(Summary)

  • 제어 흐름 그래프(control flow graph)는 제어 흐름 테스팅의 토대가 된다. 제어 흐름 테스팅은 코드 모듈을 제어 흐름 그래프로 변환하고, 그래프를 횡단하는 경로를 선택하고, 선택된 경로에 상응하는 테스트케이스를 생성한다.
  • McCabe 순환복잡도 기반의 기본 경로 세트가 제어 흐름 그래프의 모든 에지와 노드를 커버하기 때문에 이 테스팅 기준(즉, 기본 경로 세트에 상응하는 테스트케이스 세트를 생성)을 충족하면 자동으로 브랜치 및 문장 커버리지를 충족한다.

 

 

반응형

+ Recent posts