구조기반 테스트 – 테스트커버리지
태그 :
- 개념
- - 소프트웨어나 시스템의 구조를 중심으로 테스팅하는 기법 - 특정 커버리지를 달성하기 위한 테스트를 설계하고, 케이스를 도출하기 위해 사용되는 기법
I. 구조 기반 테스트의 개요
- 소프트웨어나 시스템의 구조를 중심으로 테스팅하는 기법
- 특정 커버리지를 달성하기 위한 테스트를 설계하고, 케이스를 도출하기 위해 사용되는 기법
II. 구조 기반 테스트 목적/대상/유형
테스팅의 충분성 (Thoroughness) 측정 |
명세기반기법 적용후 사용시 최적의 결과 도출 |
시스템 아키텍처 기반에 수행 가능 (코드, 호출체계) |
모든 테스트 레벨에서 수행가능 (시스템/통합/인수 테스트) |
- 시스템 또는 SW와 구조가 테스트 스위트에 의해 테스트된 정도
- 구조 종류에 대해 커버된 퍼센트로 표시
가. 구조기반 테스트 목적
- 프로그램 내부 구조 및 복잡도를 검증하는 테스트로서 WhiteBox 테스트라고도 함
- 코드 구조의 효율성 및 오류사항을 발견하기 위한 테스트로서 Logic Driven 방식임
나.구조기반 테스트 대상
구 분 |
구조기반 테스트 대상 |
컴포넌트 레벨 |
|
통합 레벨 |
|
시스템 레벨 |
|
다.구조기반 테스트 유형
유형 |
설명 |
구문 커버리지 |
- Statement Coverage - 테스트 스위트에 의해 실행된 구문이 몇 퍼센트인지 측정하는 것 - 다른 커버리지에 비해 가장 약함 |
결정 커버리지 |
- Decision Coverage, Branch Coverage - 테스트 스위트에 의해 실행된 결정 포인트 내의 전체 조건식이 최소한 참(True)이 한번, 그리고 거짓(False)이 한번의 값을 갖는지 측정하여 퍼센트로 표현하는 것 - 개별 조건식의 개수와 상관없이 테스트 케이스의 최소 개수는 2 개 - 조건, 조건/결정 커버리지에 비해 약함 |
조건 커버리지 |
- Condition Coverage - 전체 조건식의 결과와 관계없이 각 개별 조건식이 참 한번, 거짓 한번을 모두 갖도록 개별 조건식을 조합하는 것 - 결정 커버리지 보다 강력한 형태의 커버리지 |
조건/결정 커버리지 |
- 전체 조건식의 결과가 참 한번, 거짓 한번을 갖도록 각 개별 조건식을 조합하는데, 이때 각 개별 조건식도 참 한번, 거짓 한번을 모두 갖도록 개별 조건식을 조합하는 것으로 결정 커버리지와 조건 커버리지를 포함하는 커버리지 |
변경조건/결정 커버리지 |
- Modify Condition/Decision Coverage - Mc/DC는 각 개별 조건식이 다른 개별 조건식에 무관하게 전체 조건식의 결과에 독립적으로 영향을 주도록 함으로써 조건/결정 커버리지를 향상시킨 것 - 결정 커버리지, 조건/결정 커버리지 보다 강력 |
다중조건 커버리지 |
- Multiple Condition Coverage - 결정 포인트 내에 있는 모든 개별 조건식의 모든 가능한 논리적 조합을 고려한 가장 강력한 논리적 수준의 100% 커버리지를 보장 |
III. 구조기반테스트 커버리지의 의사결정 테이블
가. Dpoint=A and B 에 대한 결정 커버리지의 결정 테이블
Dpoint |
A |
B |
0 |
1 |
0 |
1 |
1 |
1 |
나. Dpoint=A and B 에 대한 조건 커버리지의 결정 테이블
Dpoint |
A |
B |
0 |
1 |
0 |
0 |
0 |
1 |
다. Dpoint=A and B 에 대한 조건/결정 커버리지의 결정 테이블
Dpoint |
A |
B |
0 |
0 |
0 |
1 |
1 |
1 |
라. Dpoint=A and B 에 대한 변경조건/결정 커버리지의 결정 테이블
Dpoint |
A |
B |
0(B가 A에 독립적) |
1 |
0 |
0(A가 B에 독립적) |
0 |
1 |
1(A가 B에 독립적, B가 A에 독립적) |
1 |
1 |
마. Dpoint=A and B 에 대한 다중조건 커버리지의 결정 테이블
Dpoint |
A |
B |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
IV. 커버리지 포함관계 및 분류
가. 커버리지의 포함관계
나. 커버리지의 분류
커버리지 븐류 |
SC |
DC |
CC |
C/DC |
MC/DC |
MCC |
프로그램내에 있는 구문을 적어도 한번 수행 |
∨ |
∨ |
|
∨ |
∨ |
∨ |
프로그램내에 있는 모든 결정포인트에 대해 모든 가능한 결과(참,거짓)을 적어도 한번 수행 |
|
∨ |
|
∨ |
∨ |
∨ |
프로그램내에 있는 결정포인트 내의 모든 각 개별조건식에 대한 모든 가능한 결과(참,거짓)에 대해 적어도 한번 수행 |
|
|
∨ |
∨ |
∨ |
∨ |
프로그램내에 있는 모든 개별조건식은 독립적으로 전체조건식(판단문)의 결과에 영향을 줌. 즉,결정 포인트내의 다른 개별조건식의 결과와는 독립적으로 해당 개별조건식은 전체조건식의 결과에 영향을 줌 |
|
|
|
|
∨ |
∨ |
결정 포인트 내의 개별조건식 결과(참, 거짓)에 대한 모든 가능한 조합을 적어도 한번 수행 |
|
|
|
|
|
∨ |
포함관계 |
|
SC |
SC |
DC,CC |
C/DC |
MC/DC |
SC : 구문 커버리지, DC : 결정 커버리지, CC : 조건 커버리지, C/DC : 조건/결정 커버리지, MC/DC : 변경조건/결정 커버리지, MCC : 다중조건 커버리지
V. 명세기반 기법 vs 구조기반 기법
관점 |
명세기반 기법 |
구조기반 기법 |
테스트 대상 |
기능적 요구사항 |
내부구조 및 복잡도 |
테스트 목적 |
기능적 정확성 |
Logic 효율성 |
적용 단계 |
대부분의 테스트에 적용 |
단위테스트 위주 |
수행 형태 |
Data, I/O Driven |
Logic Driven |