같은 처리가 예상되는 영역을 나누고 처리가 바뀌는 경계 근처를 따로 확인한다. 정상 값만 여러 개 고르는 것과는 다르다.
가상 도서관은 대출 기간을 정수 1~21일로 받기로 했다. 먼저 정수 입력을 0 이하·1~21·22 이상으로 나누면 허용 여부가 같은 세 영역이 된다. 각 영역의 대표값으로 −4·8·30을 고를 수 있다. 다만 같은 영역이 같은 결함을 드러낸다는 것은 테스트 설계의 가정이다. 대표값 하나로 그 영역의 모든 값이 옳다고 증명하지는 않는다.
이번에는 유효 구간의 끝점 1과 21 주변에서 0·1·2·20·21·22를 고른다. 이 집합은 두 끝점의 안쪽·끝·바깥쪽을 비교하려고 직접 정한 것이다. 특정 시험 체계의 모든 경계값 커버리지를 달성했다고 부르지 않는다. 소수 2.5와 문자열 '21'은 정수 영역 밖의 입력이므로 별도로 확인한다. 빈 값·단위·화면에서 숫자로 바꾸는 규칙도 실제 요구에 따라 추가해야 한다.
예상 결과는 실행 전에 이 업무 규칙에서 적는다. 21을 거부하는 구현을 보고 예상값도 거부로 바꾸면 경계 오류가 가려진다. 아래 함수는 입력을 숫자로 자동 변환하지 않는다. 화면의 문자열을 어떻게 해석할지는 이 함수 앞단의 별도 계약이다.
- 01 →
입력 계약을 적는다
- 02 →
처리 영역을 나눈다
- 03 →
대표값·경계를 고른다
- 04
예상 결과와 비교한다
같은 상황에서 비교하기
| 개념 | 기준 | 확인할 점 |
|---|---|---|
| 동등 분할 | 같은 처리로 예상하는 영역의 대표값 | 무효 영역도 나눴는가 |
| 경계 근처 선택 | 규칙이 바뀌는 끝점과 이웃 값 | 어느 끝점을 어떤 간격으로 봤는가 |
| 입력 형식 검사 | 정수·소수·문자열 등 표현의 차이 | 형 변환과 업무 범위를 섞지 않았는가 |
도서관 예제로 따라가기
function acceptDays(days) {
return Number.isInteger(days) && days >= 1 && days <= 21;
}| 입력 | 예상 결과 | 선택한 이유 |
|---|---|---|
| 0 | 거부 | 하한 바로 밖 |
| 1 | 허용 | 하한 |
| 2 | 허용 | 하한 바로 안 |
| 20 | 허용 | 상한 바로 안 |
| 21 | 허용 | 상한 |
| 22 | 거부 | 상한 바로 밖 |
| 2.5 | 거부 | 정수가 아님 |
| '21' · 문자열 | 거부 | 자동 변환하지 않는 계약 |
0·1·2와 20·21·22를 묶어 비교한다. 2.5와 문자열 '21'도 거부한다. 숫자 21과 같은 글자로 보인다는 이유로 문자열까지 허용하지 않는다. 이 표는 도서 대출 DB의 실제 데이터가 아니라 새로 만든 입력 계약의 결과다.
내 말로 설명해 보기
8·9·10만 확인한 테스트에 무엇을 보태겠는가? 입력 계약과 선정 이유를 함께 설명해 보자.
설명 예시 확인
세 값은 모두 허용 영역 안이다. 0·1·2와 20·21·22로 두 끝점 주변을 비교하고 정수 계약에 맞춰 2.5와 문자열도 별도로 본다. 예상 허용 여부는 구현 출력이 아니라 합의한 규칙에서 정한다.
참고한 자료
이전 개념 자료와의 연결
이전 자료에서 다룬 주제를 이어받아 설명과 예시를 다시 썼어요.
- 동등 분할과 경계값 분석
- 예상 결과와 테스트 오라클