낙서장[2]/오답노트
[정보처리기사 실기] 화이트박스/블랙박스 테스트
nkjok
2025. 4. 17. 14:54
반응형
✅ 화이트박스 테스트(White-box Testing) 기법
구문 커버리지 | Statement Coverage |
결정 커버리지 | Decision Coverage |
조건 커버리지 | Condition Coverage |
조건-결정 커버리지 | Condition-Decision Coverage |
변경 조건-결정 커버리지 | Modified Condition-Decision Coverage (MC/DC) |
다중 조건 커버리지 | Multiple Condition Coverage |
기본 경로 검사 | Basis Path Testing |
제어 흐름 테스트 | Control Flow Testing |
데이터 흐름 테스트 | Data Flow Testing |
루프 테스트 | Loop Testing |
✅ 블랙박스 테스트(Black-box Testing) 기법
동등 분할 | Equivalence Partitioning |
경곗값 분석 | Boundary Value Analysis |
결정 테이블 테스트 | Decision Table Testing |
상태 전이 테스트 | State Transition Testing |
유스케이스 테스트 | Use Case Testing |
분류 트리 테스트 | Classification Tree Method |
페어와이즈 테스트 | Pairwise Testing |
원인-결과 그래프 테스트 | Cause-Effect Graphing |
비교 테스트 | Comparison Testing |
오류 추정 테스트 | Error Guessing |
🔎 + 특징
✅ 화이트박스 테스트(White-box Testing) 기법
화이트박스 테스트(White-box Testing)는 코드 내부 구조를 분석하여 논리 흐름을 직접 검토하는 방식입니다. 코드의 실행 경로와 조건을 평가하는 것이 핵심이며, 주요 기법은 다음과 같습니다:
- 구문 커버리지 (Statement Coverage): 모든 코드 라인이 최소 한 번 실행되었는지를 검증합니다. 실행되지 않은 코드가 있는 경우 테스트 케이스를 추가하여 보완합니다. 코드의 전체적인 실행 여부를 평가하는 기본적인 커버리지 방법입니다.
- 결정 커버리지 (Decision Coverage): 조건문(예: if, switch)의 모든 가능한 실행 경로를 테스트합니다. 프로그램 내의 모든 분기점이 적어도 한 번씩 실행되었는지 확인합니다. 논리적인 흐름을 중점적으로 평가하는 테스트 방법입니다.
- 조건 커버리지 (Condition Coverage): 각 개별 조건이 true와 false를 포함하여 모두 평가되었는지 확인합니다. 분기 조건 내 개별적인 Boolean 값 검증을 목표로 합니다. 논리적인 조건식의 모든 조합이 수행되었는지를 평가합니다.
- 조건-결정 커버리지 (Condition-Decision Coverage): 조건과 결정 커버리지를 통합하여 각 분기 내 개별 조건 및 전체 실행 경로를 검증합니다. 프로그램의 실행 흐름과 논리식이 올바르게 작동하는지를 평가합니다. 보다 정밀한 분기 구조 테스트를 수행하는 방식입니다.
- 변경 조건-결정 커버리지 (Modified Condition-Decision Coverage, MC/DC): 개별 조건이 전체 결과에 영향을 미치는지 검증하는 고급 테스트 기법입니다. 항공, 자동차, 의료 시스템 같은 안전이 중요한 시스템에서 많이 사용됩니다. 조건 변화가 실제 프로그램 동작에 미치는 영향을 분석하는 것이 핵심입니다.
- 다중 조건 커버리지 (Multiple Condition Coverage): 프로그램 내 모든 가능한 조건 조합을 테스트합니다. 개별 Boolean 표현식의 모든 가능한 조합이 평가되었는지 확인합니다. 테스트 비용이 높은 방식이지만, 가장 철저한 논리 검증이 가능합니다.
- 기본 경로 검사 (Basis Path Testing): 소스 코드의 제어 흐름을 기반으로 가장 중요한 실행 경로를 테스트합니다. 최소한의 테스트 케이스로 최대한의 코드 실행을 보장하는 것이 목표입니다. 사이클 복잡도를 기반으로 경로를 선정하는 기법입니다.
- 제어 흐름 테스트 (Control Flow Testing): 코드 실행 흐름(프로그램의 분기와 반복 구조)을 검증하는 테스트 방식입니다. 코드 내의 실행 경로가 예상대로 작동하는지를 확인합니다. 논리적인 제어 구조가 올바르게 구성되었는지를 평가하는 방식입니다.
- 데이터 흐름 테스트 (Data Flow Testing): 프로그램 내 변수의 정의와 사용(Definition & Use)을 추적하여 테스트합니다. 변수가 올바르게 초기화되고 예상대로 활용되는지를 검증합니다. 사용되지 않는 변수, 중복 선언된 변수 등의 오류를 찾는 데 효과적입니다.
- 루프 테스트 (Loop Testing): 반복문(Loop)의 동작을 집중적으로 테스트하여 오류를 검출합니다. 루프가 정상적으로 수행되는지, 무한 루프가 발생하지 않는지를 확인합니다. 단순 루프, 중첩 루프, 조건 기반 루프 등 다양한 테스트 방식이 존재합니다.
✅ 블랙박스 테스트(Black-box Testing) 기법
블랙박스 테스트(Black-box Testing)는 코드 내부 구조를 고려하지 않고, 입출력만을 기반으로 검증하는 방식입니다. 사용자 관점에서 시스템의 기능을 평가하며, 다음과 같은 기법들이 있습니다:
- 동등 분할 (Equivalence Partitioning): 입력값을 여러 그룹(등가 클래스)으로 나누어 대표 값을 테스트합니다. 동일한 클래스 내에서 같은 결과가 예상되므로 일부만 테스트해도 전체를 확인하는 효과가 있습니다. 테스트 범위를 줄여 효율적으로 오류를 검출하는 기법입니다.
- 경곗값 분석 (Boundary Value Analysis): 오류가 발생하기 쉬운 경계 영역의 값을 집중적으로 검토하는 방식입니다. 최소값과 최대값을 포함한 경계 영역에서 주로 오류가 발생하므로 이를 검증하는 것이 핵심입니다. 예상치 못한 예외 상황을 대비하기 위한 중요한 테스트 기법입니다.
- 결정 테이블 테스트 (Decision Table Testing): 다양한 조건과 그에 따른 동작을 테이블 형식으로 정리하여 테스트합니다. 복잡한 논리 조건을 체계적으로 정리하여 테스트할 수 있도록 도와줍니다. 비즈니스 로직이 복잡한 시스템에서 유용하게 활용됩니다.
- 상태 전이 테스트 (State Transition Testing): 시스템의 다양한 상태 변화와 이에 따른 동작을 검증하는 기법입니다. 예를 들어, 로그인 상태에서 로그아웃 상태로 변환되는 과정 등을 테스트합니다. 금융 시스템, 네트워크 프로토콜 등에서 많이 활용됩니다.
- 유스케이스 테스트 (Use Case Testing): 실제 사용자 관점에서 시스템의 기능을 검증하는 테스트 방식입니다. 사용자가 실행할 수 있는 여러 시나리오를 기반으로 테스트를 수행합니다. 사용자의 행동을 기반으로 서비스 품질을 평가하는 중요한 기법입니다.
- 분류 트리 테스트 (Classification Tree Method): 시스템의 입력 값을 계층적으로 분류하고 테스트 케이스를 생성하는 방법입니다. 복잡한 입력 조합을 체계적으로 관리할 수 있도록 도와줍니다. GUI 테스트나 기능 검증에 효과적으로 활용됩니다.
- 페어와이즈 테스트 (Pairwise Testing): 입력값의 모든 조합을 테스트하지 않고, 중요한 조합만 선택하여 검증하는 기법입니다. 각 값의 상호작용을 고려하여 최소한의 테스트 케이스를 생성합니다. 테스트 비용을 줄이면서도 높은 품질을 유지할 수 있도록 설계된 방법입니다.
- 원인-결과 그래프 테스트 (Cause-Effect Graphing): 특정 입력이 시스템의 결과(출력)에 어떻게 영향을 미치는지 분석하는 테스트 방식입니다. 입력 값의 원인과 그에 따른 결과를 그래프 형태로 표현하여 검증합니다. 복잡한 논리 관계를 정리하여 오류를 체계적으로 발견하는 기법입니다.
- 비교 테스트 (Comparison Testing): 동일한 입력값에 대해 두 개 이상의 시스템이나 알고리즘의 결과를 비교하는 방식입니다. 새로운 시스템과 기존 시스템을 비교하거나, 다른 알고리즘 성능을 평가할 때 유용합니다. 결과 차이를 분석하여 정확성을 검증하는 데 효과적인 테스트 기법입니다.
- 오류 추정 테스트 (Error Guessing): 경험을 바탕으로 오류가 발생할 가능성이 높은 부분을 집중적으로 검증하는 기법입니다. 개발자의 직관과 경험을 활용하여 예상치 못한 문제를 발견하는 것이 목표입니다. 체계적인 기법은 아니지만, 중요한 결함을 찾아내는 데 매우 효과적입니다.
반응형