낙서장[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): 각 개별 조건이 truefalse를 포함하여 모두 평가되었는지 확인합니다. 분기 조건 내 개별적인 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): 경험을 바탕으로 오류가 발생할 가능성이 높은 부분을 집중적으로 검증하는 기법입니다. 개발자의 직관과 경험을 활용하여 예상치 못한 문제를 발견하는 것이 목표입니다. 체계적인 기법은 아니지만, 중요한 결함을 찾아내는 데 매우 효과적입니다.

 

반응형