control flow test, data flow test
1. 제어흐름 기반 테스트 (Control Flow Testing)
1) 개념
- 프로그램의 제어 흐름(Control Flow), 즉 명령문이 실행되는 순서와 흐름에 따라 테스트 케이스를 설계하는 방법입니다.
- 프로그램의 분기, 반복, 조건문 등 흐름 구조를 기준으로 테스트 경로(path)를 추출해 테스트합니다.
2) 목적
- 모든 가능한 실행 경로나 주요 분기점을 테스트하여 논리적 오류 발견
- 프로그램의 흐름에 따른 버그(예: 잘못된 조건, 분기 누락)를 찾는 데 효과적
3) 구성요소
- 제어흐름 그래프(Control Flow Graph, CFG): 노드(명령문 또는 블록)와 간선(제어 흐름)으로 표현
- 경로(path): 시작 노드부터 종료 노드까지의 실행 경로
- 기본 경로 테스트: 독립적인 경로를 테스트하여 커버리지 확보
4) 주요 기법
- 구문 커버리지 (Statement Coverage)
- 결정 커버리지 (Decision Coverage)
- 경로 커버리지 (Path Coverage)
- 조건/결정 커버리지 (Condition/Decision Coverage)
5) 특징
- 테스트 설계가 비교적 명확하고 구조적
- 논리적 흐름에 중점, 데이터 값의 변화는 고려하지 않음
- 제어 흐름에 따른 오류를 효과적으로 찾음
2. 데이터 플로우 기반 테스트 (Data Flow Testing)
1) 개념
- **프로그램 내 변수의 정의(Definition)와 사용(Use)**에 초점을 맞춘 테스트 기법
- 변수의 값이 언제, 어디서 할당되고, 어디서 사용되는지를 추적해 테스트 케이스를 설계
2) 목적
- 변수 관련 오류(예: 초기화 안 된 변수 사용, 잘못된 변수 값 전달)를 발견
- 변수의 생명주기(lifecycle)를 따라 적절히 테스트하여 코드 품질 향상
3) 구성요소
- 변수 정의(Definition): 변수에 값이 할당되는 위치
- 변수 사용(Use): 변수의 값이 참조되는 위치 (계산이나 조건문 등)
- 정의-사용 경로(Definition-Use Paths): 변수 정의에서 사용까지의 경로
4) 주요 기법
- 정의-사용 커버리지 (Def-Use Coverage)
- 정의-사용 쌍(Definition-Use Pairs) 테스트
5) 특징
- 변수의 흐름과 사용에 집중하여 논리적 오류 발견 가능
- 제어 흐름 테스트보다 더 세밀한 테스트 설계 가능
- 복잡한 데이터 관계가 있는 프로그램에서 특히 유용
요약 비교
| 구분 | 제어흐름 기반 테스트 | 데이터 플로우 기반 테스트 |
|---|
| 초점 | 프로그램 명령문의 실행 흐름(분기, 반복) | 변수의 정의와 사용 관계 |
| 주요 목적 | 실행 경로와 조건 테스트로 논리적 오류 탐지 | 변수 관련 오류(초기화 누락 등) 발견 |
| 테스트 설계 방법 | 제어흐름 그래프, 경로 및 분기 중심 | 변수의 정의-사용 경로 추적 |
| 주요 커버리지 유형 | 구문, 결정, 경로, 조건/결정 커버리지 | 정의-사용 커버리지, 정의-사용 쌍 테스트 |
| 특징 | 제어 흐름에 의한 오류 발견에 효과적 | 변수 관련 버그, 데이터 오류 탐지에 효과적 |