본문 바로가기
Computer Science/Software Engineering

[Software Engineering] Testing Techniques

by __K.Jun__ 2025. 2. 19.

White Box Testing

화이트 박스 테스트는 소프트웨어의 내부 구조와 동작을 이해한 상태에서 수행하는 테스트 방법으로, 코드 기반 테스트라고도 한다. 내부 구현을 확인하면서 모든 논리 경로가 실행되도록 설계된다.

 

1. Basis Path Testing

  • 프로그램 내 모든 실행 경로를 검사하는 것이 목표.
  • 프로그램의 제어 흐름 그래프(Flow Graph)를 생성하여 노드와 간선(조건문)을 분석.
  • 독립적인 프로그램 경로(Independent Program Path)를 정의하여, 최소한의 경로만 테스트.
  • 사이클로매틱 복잡도(Cyclomatic Complexity)를 활용하여 테스트 경로의 개수를 산출.

경로 계산 방법

  1. 영역(region)의 수를 이용: V(G) = 영역의 개수
  2. 간선(E)과 노드(N)을 이용: V(G) = E - N + 2
  3. 조건 노드(predicate nodes)의 개수 이용: V(G) = 조건 노드 개수 + 1

2. Data Flow Testing

  • 변수의 정의(DEF)와 사용(USE)을 중심으로 테스트 경로를 선정.
  • 프로그램 내에서 변수가 사용되는 위치를 추적하여 정의-사용 체인(Definition-Use Chain, DU Chain)을 생성.
  • 모든 DU 체인을 포함하는 테스트 케이스를 설계하여 검증.

 

3. State-based Testing

  • 객체 지향 시스템에서 유용한 테스트 기법.
  • 소프트웨어의 모든 상태(State)와 전이(Transition)를 정의하고 테스트를 수행.
  • 상태 다이어그램을 기반으로 객체의 동작을 검증.

4. Loop Testing

  • 반복문(Loop)의 타당성을 검증하는 테스트 기법.
  • 다음과 같은 반복문 유형을 테스트:
    • 단순 루프(Simple Loop)
    • 중첩 루프(Nested Loop)
    • 연결된 루프(Concatenated Loop)
    • 비구조적 루프(Unstructured Loop)

테스트 기법

  1. 루프를 아예 실행하지 않음 (0회 반복)
  2. 루프를 1회 실행
  3. 루프를 2회 실행
  4. 특정 반복 횟수(m회) 실행 (m < 최대값 n)
  5. (n-1), n, (n+1) 반복 실행

 

Black Box Testing

블랙 박스 테스트는 소프트웨어의 내부 코드 구조를 모르는 상태에서 수행하는 기능 기반 테스트입니다. 입력과 출력만을 분석하여 테스트 케이스를 설계한다.

 

2.1 동등 분할 테스트 (Equivalence Partitioning)

  • 입력 데이터를 동등한 그룹(Equivalence Class)으로 나누어 각 그룹에서 대표적인 테스트 케이스를 선정.
  • 같은 그룹에 속한 값들은 동일한 방식으로 동작해야 함.

2.2 경계 값 분석 (Boundary Testing)

  • 개발자가 경계 조건에서 오류를 발생시키기 쉬움.
  • 경계 값과 그 주변의 값을 테스트함.
  • 예: >, >= 혼동, 최소/최대 값, 0 포함 여부.

2.3 결정 테이블 테스트 (Decision Table Testing)

  • 조건과 결과를 표 형식으로 정리하여 테스트 케이스 생성.
  • 모든 가능한 조합을 고려하여 테스트 수행.

2.4 직교 배열 테스트 (Orthogonal Array Testing)

  • 입력 공간이 크지만 모든 경우를 테스트하기 어려운 경우 유용.
  • 모든 조합을 테스트하지 않고도 최대한의 커버리지를 확보.

추가적인 테스트 기법

1. 전이 오류 및 연산 오류 (Operation & Transfer Errors)

  • 연산 오류: 프로그램의 출력 값만 수정하면 해결될 수 있는 오류.
  • 전이 오류: 프로그램의 다음 상태 전이 함수를 수정해야 해결되는 오류.

A: aaBB -> 0111

A': aaBB -> 0110

A: aaBB -> 12122

A': aaBB -> 12222

 

2. 스위치 커버리지 (Switch Coverage)

  • 0-Switch Cover (Branch Coverage): 모든 분기 실행.
  • 1-Switch Cover (Switch Coverage): 모든 분기 간 전이를 실행.

728x90