
테스트 관련해서 헷갈리는 용어들을 정리해보았습니다.
테스트 시나리오 (Test Scenario)
- "무엇을 검증해야 할까?"
- 어떤 기능이 정상 동작하는지 확인하기 위한 목적 중심의 테스트 항목
- 사용자 관점에서 기술, 사용자가 시스템과 상호작용하는 방식
- 비교적 추상적, 전체 흐름 중심
- 하나의 테스트 시나리오가 여러 테스트 케이스로 나뉠 수 있음
예시: 사용자가 로그인할 수 있는지 확인한다.
테스트 케이스 (Test Case)
- "어떤 조건에서, 어떤 결과가 나와야 할까?"
- 특정 입력, 실행 조건, 예상 결과를 포함한 구체적인 테스트 절차
- 테스트 시나리오에 기반해 만들어짐
- 테스트 수행 단위
예시: "아이디: test, 비밀번호: 0000 -> 로그인 성공"
"아이디: test, 비밀번호: 9999 -> 로그인 실패"
테스트 시나리오 vs 테스트 케이스
| 항목 | 테스트 시나리오 | 테스트 케이스 |
| 의미 | 테스트의 목적/흐름 중심 설명 | 테스트의 구체적인 절차/조건 |
| 구체성 | 추상적, 상위 수준 | 구체적, 하위 수준 |
| 형태 | 자연어로 설명 가능 | 조건, 입력값, 예상 결과 등 구조화 |
| 예시 개수 | 1개 시나리오에 여러개의 케이스 가능 | 케이스는 각각 독립적 |
테스트 오라클은 테스트 케이스, 테스트 시나리오와 이름은 유사하지만 전혀 다른 개념을 나타내고 있다. 다음에서 알아보자.
테스트 오라클 (Test Oracle)
테스트 오라클에 대한 정의를 검색해보면 보통 아래와 같이 나온다.
테스트 결과가 참인지 거짓인지를 판단하기 위해,
미리 정의된 참값(기대값)과 실제 실행 결과를 비교하여 오류를 검출하는 기법
언뜻 복잡하게 적혀있지만 그 의미는 테스트 결과가 옳은지 판단해주는 기준이라는 뜻이다.
테스트 결과가 옳은지 판단해주는 기준이라는게 무슨 뜻일까? 다음과 같은 테스트 케이스가 있다고 생각해보자.
입력: add(2, 3)
예상 결과: 5
너무 간단한 테스트라 누가 봐도 당연하게 느껴지지만, add(2, 3)의 기대 결과가 정말로 5인지 어떻게 알 수 있을까?
바로 덧셈이라는 수학적 모델에 의해 라는 기준이 잡히게 되는 것이다. 그렇다면 특정한 시스템의 성능 테스트는 어떻게 통과와 실패를 판별할 수 있을까? 다양한 방법이 있겠지만, 특정 범위를 정해두고 이 실행 시간이 범위 내로 들어올 시 성공이라고 판별하는 식으로 할 수도 있을 것이다.
바로 이런 정답에 대한 기준을 세워주는게 테스트 오라클이라고 생각하면 된다.
각 테스트 오라클의 종류와 예시를 살펴보며 더 쉽게 이해해보자.
테스트 오라클 종류
참 오라클
- 모든 입력값에 대해 정확한 출력값을 알고 있음
- 수학 함수처럼, 기대 결과를 정확히 알고 있는 경우
sqrt(4) → 2
샘플링 오라클
- 특정한 몇몇 케이스의 입력값에 대해서만 정확한 출력값을 알고 있음
- 모든 입력값에 대한 기대 결과를 알 수 없는 경우
유저 데이터 마이그레이션 후, 10만명의 전체 유저 중 100명만 무작위로 추출해 검증
쇼핑몰 주문 목록 데이터 백업 후, 특정 날짜의 주문만 복원 테스트 수행
휴리스틱 오라클
- 특정 입력값에 대해 올바른 결과를 제공하고, 나머지 값들에 대해서는 휴리스틱(추정)으로 처리하는 오라클
- 확률이나 직관에 의한 예상 결과
특정 부분의 값들의 정확한 예상 결과를 아는 상황에서, 특정 값과 값 사이는 추정치로 처리
일관성 검사 오라클
- 이전 동작과 비교하여 결과가 일관적인지를 확인
- 회귀 테스트(Regression test)에서 사용
특정 기능을 배포한 뒤, 기존에 동작하던 기능이 동일하게 동작하는지 확인
명세 기반 오라클
- 명확한 요구사항, 기획서, API 문서 등을 기준으로 테스트 결과를 판단
요구사항: 비밀 번호는 8자 이상이어야 한다.
입력: "12345" -> 실패 처리
