화이트박스 테스트 (White-Box Testing)란?

2024. 10. 12. 14:40·Category/정보처리기사
728x90

화이트박스 테스트는 소프트웨어의 내부 구조, 코드 로직, 알고리즘을 기반으로 프로그램의 흐름과 로직을 직접 확인하는 테스트 방법입니다. 개발자 관점에서 소스 코드를 보며 논리적 오류, 경로 커버리지, 루프 테스트 등을 수행하여, 내부적으로 올바르게 작동하는지 확인하는 것이 목적입니다.

화이트박스 테스트의 주요 특징

  1. 내부 로직에 집중: 소프트웨어의 코드 흐름과 구조를 이해하고 그에 맞게 테스트하는 방식.
  2. 코드 커버리지를 확인: 모든 코드가 실행되는지 확인하기 위해 커버리지 기준을 설정하고 테스트.
  3. 개발자 관점의 테스트: 내부 동작을 세부적으로 확인하며, 프로그램의 설계와 구현 방식에 따라 테스트 케이스를 설계.
  4. 유닛 테스트에서 주로 사용: 모듈 단위에서의 테스트가 많이 이루어짐.

주요 화이트박스 테스트 기법

1. 구문 커버리지 (Statement Coverage)

  • 개념: 프로그램의 모든 구문(Statement)이 한 번 이상 실행되는지를 확인하는 기법.
  • 목적: 프로그램 내의 모든 구문이 최소 한 번은 실행되도록 테스트하여, 실행되지 않은 코드가 없는지 확인.
  • 예시: 코드의 각 줄을 테스트하여 구문들이 모두 실행되는지 확인하는 테스트.

2. 조건 커버리지 (Condition Coverage)

  • 개념: 모든 조건문(If, Switch 등)의 결과가 참(True)과 거짓(False)을 모두 테스트하는 기법.
  • 목적: 조건문의 참, 거짓 양쪽 경로를 테스트하여 논리적인 오류를 찾음.
  • 예시: if (x > 10)이라면, x가 10보다 클 때와 작을 때의 경로를 모두 테스트.

3. 결정 커버리지 (Decision Coverage)

  • 개념: 조건문을 포함한 결정 포인트(Decision Point)의 모든 결과를 테스트하는 기법. 조건 커버리지와 비슷하지만, 결정 커버리지는 모든 경로를 테스트하는 데 집중.
  • 목적: 모든 경로가 한 번 이상 실행되도록 테스트하여 로직 오류를 탐지.
  • 예시: 여러 조건을 가진 if 문에서, 모든 조건의 조합이 한 번씩은 실행되도록 테스트.

4. 경로 커버리지 (Path Coverage)

  • 개념: 프로그램의 모든 경로(Path)를 테스트하여, 각 경로가 한 번 이상 실행되는지 확인하는 기법.
  • 목적: 프로그램 내의 모든 경로를 테스트하여, 로직과 흐름에 문제가 없는지 확인.
  • 예시: 하나의 입력값에 대해 여러 갈래로 나뉜 경로가 모두 테스트되도록 입력값을 설정.

5. 루프 테스트 (Loop Testing)

  • 개념: 프로그램 내 반복문(Loops)의 정상적인 동작 여부를 테스트하는 기법.
  • 목적: 루프가 정상적으로 실행되고 종료되는지, 그리고 루프의 경계 조건에서 오류가 발생하지 않는지를 확인.
  • 예시: for, while 등의 반복문에서 무한 루프가 발생하는지, 반복 횟수가 정확한지 등을 확인.

6. 기본 경로 테스트 (Base Path Testing)

  • 개념: 소스 코드를 제어 흐름 그래프(Control Flow Graph)로 변환하고, 각 경로를 독립적으로 테스트하는 기법.
  • 목적: 프로그램 내의 모든 독립적인 경로를 테스트하여 논리 오류를 탐지.
  • 예시: 제어 흐름의 다이어그램을 그려서 각 경로가 최소 한 번씩은 실행되도록 테스트 케이스를 설계.

화이트박스 테스트의 장점

  1. 코드의 모든 부분을 테스트 가능: 소스 코드의 내부를 들여다보고 모든 경로와 조건을 테스트하여, 숨겨진 오류나 버그를 발견하기 쉽습니다.
  2. 세부적인 버그 탐지 가능: 논리적 오류, 데이터 흐름의 이상 등 세밀한 부분까지 테스트 가능.
  3. 코드 최적화 가능성: 코드를 깊이 이해하게 되므로, 불필요한 코드나 중복된 로직을 최적화할 수 있음.

화이트박스 테스트의 단점

  1. 복잡한 코드일수록 어려움: 코드의 양이 많고 복잡할수록, 테스트 케이스 설계가 복잡하고 노력이 많이 필요.
  2. 외부 요인에 대한 테스트 부족: 주로 내부 로직에 집중하다 보니, 외부 입력과 출력만 확인하는 사용자 경험(UX) 측면에서는 테스트가 부족할 수 있음.
  3. 커버리지 한계: 모든 경로와 조건을 테스트하려면 많은 시간을 필요로 하며, 현실적으로 100% 커버리지를 달성하기는 어려움.

화이트박스 테스트와 블랙박스 테스트 비교

       항목                                     화이트박스 테스트                                                                     블랙박스 테스트

테스트 대상 내부 구조, 소스 코드 기반 외부 동작, 입력과 출력 기반
관점 개발자 관점 사용자 관점
주요 기법 구문 커버리지, 경로 커버리지, 조건 커버리지 등 동등 분할, 경계값 분석, 원인-결과 그래프 등
적용 단계 주로 유닛 테스트 단계에서 사용 주로 시스템 테스트나 통합 테스트 단계에서 사용
장점 코드 내부의 세밀한 오류 발견 가능, 코드 최적화 가능 사용자 관점에서의 오류 발견, 자동화 테스트 용이
단점 복잡한 코드에 대해 테스트 케이스 작성이 어려움, 시간 소요 내부 구조에 대한 테스트 부족, 세부적인 로직 테스트 어려움

요약

화이트박스 테스트는 소프트웨어의 내부 구조와 로직을 기반으로 테스트를 수행하는 방식입니다. 구문 커버리지, 경로 커버리지, 조건 커버리지 등을 통해 프로그램의 세부적인 동작을 확인하고 코드의 모든 경로가 올바르게 작동하는지 테스트합니다. 코드의 세밀한 오류를 발견할 수 있지만, 테스트 설계가 복잡할 수 있으며 100% 커버리지를 달성하기 어렵다는 단점이 있습니다.

728x90

'Category > 정보처리기사' 카테고리의 다른 글

데이터베이스 키(Key) 개념 정리  (0) 2024.10.12
V-모델 (V-Model)이란?  (0) 2024.10.12
블랙박스 테스트(Black-box testing)란?  (2) 2024.10.12
RAID (Redundant Array of Independent Disks)란?  (1) 2024.10.12
ACID란?  (0) 2024.10.12
'Category/정보처리기사' 카테고리의 다른 글
  • 데이터베이스 키(Key) 개념 정리
  • V-모델 (V-Model)이란?
  • 블랙박스 테스트(Black-box testing)란?
  • RAID (Redundant Array of Independent Disks)란?
Corinee
Corinee
  • Corinee
    Coding Note
    Corinee
  • 전체
    오늘
    어제
    • 분류 전체보기 (351)
      • Category (268)
        • Algorithm (7)
        • SQL (1)
        • Java (4)
        • C (9)
        • React (6)
        • JavaScript (9)
        • CSS (2)
        • Node (1)
        • SpringBoot (26)
        • Database (3)
        • Network (1)
        • Django (6)
        • Python (21)
        • Flask (4)
        • iOS (25)
        • Swift (4)
        • Flutter (11)
        • Dart (3)
        • Git (1)
        • Firebase (1)
        • Gof (1)
        • 정보처리기사 (112)
        • AI (5)
        • NestJs (4)
        • Docker (1)
      • Projects (0)
        • Chrome Extension (1)
      • 눈 감고 치는 (0)
        • Socket (0)
      • Note (76)
        • nk (75)
      • 개인 정보 처리 방침 (1)
      • 취업 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    math.h
    react router
    inp
    jackson 라이브러리
    프로세스 강제 종료
    semver)
    defaultdict
    ajax (asynchronous javascript and xml)
    x.y.z (메이저.마이너.패치)
    mermaid-cli
    Jest
    counter
    stdlib.h
    원시값(primitive)
    react
    public vs assets
    styled-components
    소프트웨어 버전 관리
    core web vitals
    중첩 함수(nested function)
    intellij 콘솔 한글 깨짐
    chrome extension 자동 배포
    useEffect
    쉽게 풀어쓴 C언어 Express
    structuredclone()
    Collections
    named export vs default export
    javascript 필수 문법
    시맨틱 버전(semantic versioning
    json.parse(json.stringify())
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Corinee
화이트박스 테스트 (White-Box Testing)란?
상단으로

티스토리툴바