‘나이’를 입력하는 칸이 있다고 상상해 봅시다. 이 기능의 요구사항은 ‘1세부터 100세까지의 숫자만 입력 가능’합니다. 이 기능을 완벽하게 테스트하려면 어떤 값들을 입력해봐야 할까요? 1, 2, 3, … 100까지의 모든 숫자를 다 넣어봐야 할까요? 0이나 101은 어떨까요? 음수나 소수, 혹은 ‘스무살’ 같은 글자는 어떻게 처리될까요?
이처럼 모든 가능한 입력값과 상황을 테스트하는 것은 현실적으로 불가능하며, 매우 비효율적입니다. 그래서 영리한 QA 엔지니어는 ‘테스트 설계 기법’을 사용합니다.
테스트 설계 기법이란, 최소한의 테스트 케이스로 최대의 결함 발견 효과를 얻기 위한 체계적인 방법론입니다. 이번 글에서는 내부 코드를 보지 않고 사용자의 입장에서 기능을 검증하는 ‘블랙박스 테스트’의 가장 기본적이면서도 강력한 설계 기법 3가지를 소개합니다.
잠깐, 블랙박스 테스트란?
블랙박스 테스트는 소프트웨어의 내부 구조나 작동 원리를 전혀 모르는 상태에서, 오직 입력과 출력 결과만을 보고 기능의 올바름을 검증하는 테스트 방식을 말합니다. 사용 설명서만 보고 자동차를 운전해보는 것과 같습니다. 엔진이 어떻게 돌아가는지 몰라도, 엑셀을 밟았을 때 앞으로 잘 나가는지만 확인하는 것이죠. 지금부터 소개할 기법들은 모두 이 블랙박스 관점에서 사용됩니다.

기법 1. 동등 분할 (Equivalence Partitioning): ‘대표 선수’ 뽑기
‘동등 분할’은 모든 테스트 값을 일일이 테스트하는 대신, 시스템이 동일하게 동작할 것으로 예상되는 값들의 ‘그룹’을 나누고, 각 그룹에서 ‘대표 선수’ 하나씩만 뽑아 테스트하는 기법입니다.
선거에서 모든 유권자의 의견을 들을 수 없으니, 연령대별/지역별로 몇 명씩 대표를 뽑아 여론을 조사하는 것과 같습니다.
예시: ‘1세부터 100세까지’ 나이 입력 기능
- 그룹 1 (유효한 값): 1부터 100 사이의 숫자들. 이 범위의 어떤 숫자를 넣든 시스템은 ‘정상’으로 처리할 것입니다.
- 대표 선수:
50
- 대표 선수:
- 그룹 2 (유효하지 않은 값 – 너무 낮음): 1보다 작은 숫자들.
- 대표 선수:
0
- 대표 선수:
- 그룹 3 (유효하지 않은 값 – 너무 높음): 100보다 큰 숫자들.
- 대표 선수:
101
- 대표 선수:
- 그룹 4 (유효하지 않은 값 – 잘못된 유형): 숫자가 아닌 값들.
- 대표 선수:
'abc'
- 대표 선수:
이 기법을 사용하면, 수백 개가 넘는 테스트 케이스를 단 4개로 줄이면서도 각 그룹의 동작을 효과적으로 검증할 수 있습니다.
기법 2. 경계값 분석 (Boundary Value Analysis): ‘가장자리’를 노려라
‘경계값 분석’은 동등 분할 기법을 보완하는 단짝 같은 기법입니다. 통계적으로 수많은 결함이 ‘경계’ 영역에서 발생한다는 경험에 바탕을 둔 기법입니다. ‘크다/작다’, ‘이상/이하’와 같은 조건을 처리하는 코드에서 ‘off-by-one’ 에러(하나 차이로 발생하는 에러)가 자주 발생하기 때문입니다.
새로 페인트칠한 벽을 만질 때, 우리는 보통 한가운데보다는 가장자리가 잘 칠해졌는지 확인해봅니다. 버그도 마찬가지로 경계선에서 자주 발견됩니다.
예시: ‘1세부터 100세까지’ 나이 입력 기능
유효한 범위 [1, 100]의 경계는 ‘1’과 ‘100’입니다. 이 경계를 중심으로 아래 값들을 테스트합니다.
- 최소값의 경계:
- 경계 바로 아래:
0(유효하지 않음) - 경계값:
1(유효함) - 경계 바로 위:
2(유효함)
- 경계 바로 아래:
- 최대값의 경계:
- 경계 바로 아래:
99(유효함) - 경계값:
100(유효함) - 경계 바로 위:
101(유효하지 않음)
- 경계 바로 아래:
동등 분할 기법으로 ’50’만 테스트했다면 놓쳤을 수 있는, ‘100’은 포함되고 ‘101’은 포함되지 않는 로직의 오류를 정확하게 찾아낼 수 있습니다.
기법 3. 결정 테이블 테스팅 (Decision Table Testing): ‘복잡한 규칙’을 한눈에
‘결정 테이블’은 여러 개의 조건이 조합되어 각기 다른 결과를 초래하는 복잡한 비즈니스 로직을 테스트할 때 매우 유용합니다. 모든 조건의 조합을 표(테이블)로 만들어, 누락되는 케이스 없이 체계적으로 테스트할 수 있게 도와줍니다.
의사가 환자를 진단할 때, ‘열이 있는가?’, ‘기침을 하는가?’ 등 여러 조건을 조합하여 ‘감기’, ‘독감’ 등을 진단하는 것과 같습니다.
예시: 쇼핑몰 할인 정책
- 조건 1: VIP 회원인가? (Y/N)
- 조건 2: 5만원 이상 구매했는가? (Y/N)
이 두 가지 조건으로 발생할 수 있는 모든 경우의 수는 4가지입니다.
| 규칙 번호 | 조건 1: VIP 회원? | 조건 2: 5만원 이상? | 결과 (Action) |
| 1 | Y | Y | 10% 할인, 무료 배송 |
| 2 | Y | N | 10% 할인 |
| 3 | N | Y | 5% 할인, 무료 배송 |
| 4 | N | N | 할인 없음 |
이처럼 복잡한 정책을 말로 풀어쓰는 대신 표로 만들면, 우리가 테스트해야 할 시나리오 4개가 명확하게 드러나고, 단 하나의 조합도 놓치지 않게 됩니다.
결론: 감이 아닌, 전략으로 테스트하라
오늘 소개한 동등 분할, 경계값 분석, 결정 테이블 기법은 테스트 케이스 설계를 ‘감’의 영역에서 ‘공학’의 영역으로 끌어올리는 강력한 도구입니다.
이러한 기법들을 활용하면 ‘왜 이 테스트 케이스를 선택했는가?’라는 질문에 자신 있게 답할 수 있습니다. 이는 무작위로 이것저것 눌러보는 테스터와, 결함이 있을 만한 곳을 전략적으로 공략하는 전문 QA 엔지니어를 구분하는 중요한 차이점이 될 것입니다.