테스트를 나누는 가장 큰 축은 “코드 내부를 보느냐”다. 블랙박스 테스트는 내부 구현을 모른 채 명세(요구사항)만 보고 입력과 출력을 검증한다. 화이트박스 테스트는 소스 코드의 구조를 들여다보며 실행 경로를 검증한다. 정처기에서는 각 방식의 대표 기법을 구분하는 문제가 반복 출제되므로, 기법이 어느 상자에 속하는지부터 확실히 해두는 것이 좋다.
블랙박스 — 명세 기반 기법
- 동등 분할(동치 클래스): 입력을 같은 결과가 나올 그룹으로 나누고 그룹마다 대표값 하나만 테스트한다. 1~100이 유효라면 유효 클래스에서 50 하나, 무효 클래스에서 -5와 200 하나씩.
- 경계값 분석: 오류는 경계에서 터진다는 경험칙. 1~100 범위면 0, 1, 100, 101을 찍는다. 동등 분할의 보완 기법으로 함께 출제된다.
- 원인-효과 그래프: 입력 조건(원인)과 출력(효과)의 논리 관계를 그래프로 그려 효과적인 케이스를 고른다.
- 오류 예측: 경험상 개발자가 자주 틀리는 지점(빈 입력, null 등)을 찍는 감 기반 보완 기법.
화이트박스 — 구조 기반 기법
화이트박스의 핵심은 커버리지, 즉 “테스트가 코드의 어디까지 실행해 봤는가”다.
def grade(score, is_retake):
if score >= 60 and not is_retake: # 분기 1
return "pass"
return "fail"
- 구문(문장) 커버리지: 모든 문장이 한 번씩 실행되면 달성.
(70, False)와(50, False)두 케이스면 두 return이 모두 실행된다. - 분기(결정) 커버리지: 모든 if의 참/거짓이 각각 한 번씩 나와야 한다. 구문 커버리지를 만족해도 분기 조합을 다 못 볼 수 있어 더 강한 기준이다.
- 조건 커버리지: 분기 전체가 아니라 개별 조건식(
score >= 60,not is_retake)이 각각 참/거짓을 갖도록 한다. - 경로 커버리지: 시작부터 끝까지 가능한 실행 경로 전부를 커버한다. 가장 강력하지만 분기가 늘수록 경로가 폭발해 현실적으로 어렵다.
강도 비교(구문 < 분기 < 조건/분기 조합 < 경로)와 “분기 커버리지는 구문 커버리지를 포함한다” 같은 포함 관계가 시험 단골이다.
무엇이 어느 상자인가
| 구분 | 블랙박스 | 화이트박스 |
|---|---|---|
| 보는 것 | 명세·입출력 | 소스 코드 구조 |
| 대표 기법 | 동등 분할, 경계값, 원인-효과, 오류 예측 | 구문·분기·조건·경로 커버리지, 기초 경로 검사 |
| 주 사용 단계 | 통합·시스템·인수 테스트 | 단위 테스트 |
| 수행 주체 경향 | 테스터·사용자 관점 | 개발자 관점 |
혼동 포인트 하나: “경계값 분석”은 숫자를 다루니 코드 내부를 보는 것 같지만, 명세의 범위만 보고 고르는 값이므로 블랙박스다. 반대로 커버리지가 붙은 기법은 전부 화이트박스다.
시험 관점 요약
기법 이름을 상자에 넣는 문제, 경계값으로 테스트 케이스를 고르는 문제, 커버리지 강도를 비교하는 문제 — 이 세 유형이 사실상 전부다. 두 방식은 대립이 아니라 보완 관계라는 것도 기억해 두자. 명세가 맞는지는 블랙박스로, 코드가 빠짐없이 실행되는지는 화이트박스로 확인하며, 실무의 테스트 스위트는 둘을 섞어 쌓는다.
이 글에 대한 의견은 아래 댓글로 남겨주세요 (GitHub 계정 필요). 로그인 없이 남기고 싶다면